Type.GetType Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Type Возвращает объект, представляющий указанный тип.
Перегрузки
| Имя | Описание |
|---|---|
| GetType() |
Возвращает текущий Type. |
| GetType(String) |
Получает указанное Type имя, выполняя поиск с учетом регистра. |
| GetType(String, Boolean) |
Type Возвращает указанное имя, выполняя поиск с учетом регистра и указывая, следует ли вызывать исключение, если тип не найден. |
| GetType(String, Boolean, Boolean) |
Type Получает указанное имя, указывая, следует ли вызывать исключение, если тип не найден и следует ли выполнять поиск с учетом регистра. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Возвращает тип с указанным именем, при необходимости предоставляя пользовательские методы для разрешения сборки и типа. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Возвращает тип с указанным именем, указывая, следует ли вызывать исключение, если тип не найден, и при необходимости предоставляет пользовательские методы для разрешения сборки и типа. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Возвращает тип с указанным именем, указывая, следует ли выполнять поиск с учетом регистра и вызывать исключение, если тип не найден, и при необходимости предоставляя пользовательские методы для разрешения сборки и типа. |
GetType()
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Возвращает текущий Type.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type
Возвращаемое значение
Текущий Type.
Реализации
Исключения
Инициализатор класса вызывается и вызывает исключение.
См. также раздел
Применяется к
GetType(String)
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
Получает указанное Type имя, выполняя поиск с учетом регистра.
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType(string typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
Параметры
- typeName
- String
Полное имя типа, который требуется получить. См. AssemblyQualifiedName. Если тип находится в текущей сборке или в mscorlib.dll/System.Private.CoreLib.dll, достаточно указать имя типа, соответствующее пространству имен.
Возвращаемое значение
Тип с указанным именем, если найден; nullв противном случае .
- Атрибуты
Исключения
typeName равно null.
Инициализатор класса вызывается и вызывает исключение.
typeName представляет универсальный тип, имеющий тип указателя, ByRef тип или Void один из его аргументов типа.
–или–
typeName представляет универсальный тип с неправильным числом аргументов типа.
–или–
typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.
typeName представляет недопустимый тип, например массив TypedReference.
Сборка или одна из его зависимостей найдена, но не удалось загрузить.
Примечание. В .NET для приложений магазина Windows или библиотеки классов Portable перехватите исключение базового класса IOException.
Сборка недопустима для текущей загруженной среды выполнения.
Примеры
В следующем примере извлекается тип System.Int32 и используется этот объект типа для отображения FullName свойства System.Int32.
using System;
class GetTypeExample
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Комментарии
Этот метод можно использовать GetType для получения Type объекта для типа в другой сборке, если вы знаете его полное имя сборки, из которого можно получить AssemblyQualifiedName.
GetType вызывает загрузку сборки, указанной в typeName. Можно также загрузить сборку с помощью Assembly.Load метода, а затем использовать Assembly.GetType метод или Assembly.GetTypes метод для получения Type объектов. Если тип находится в сборке, известной вашей программе во время компиляции, более эффективно использовать typeof в C# или оператор GetType в Visual Basic.
Note
Если typeName не удается найти, вызов GetType(String) метода возвращается null. Он не создает исключение. Чтобы определить, возникает ли исключение, вызовите перегрузку GetType метода с параметром throwOnError .
.NET Framework: только GetType работает только на сборках, загруженных с диска. При вызове GetType поиска типа, определенного в динамической сборке, определенной с помощью System.Reflection.Emit служб, может возникнуть несогласованное поведение. Поведение зависит от того, является ли динамическая сборка постоянной, т. еRunAndSave. созданной с помощью Save режимов доступа перечисления или System.Reflection.Emit.AssemblyBuilderAccess режимов доступа. Если динамическая сборка является постоянной и была записана на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает ее и извлекает тип из этой сборки. Если сборка не была сохранена на диск при GetType вызове, метод возвращается null.
GetType не понимает временные динамические сборки; таким образом, вызов GetType для получения типа в временной динамической сборке возвращается null.
В .NET Framework, чтобы использовать GetType в динамическом модуле, подпишитесь на событие AppDomain.AssemblyResolve и вызовите GetType перед сохранением. В противном случае вы получите две копии сборки в памяти.
На .NET Core 3.0 и более поздних версий сборки, активируемой этим API, влияет текущее значение AssemblyLoadContext.CurrentContextualReflectionContext.
В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.
| Тип участника | Static | Нестатическое |
|---|---|---|
| Конструктор | Нет | Нет |
| Поле | Нет | Yes. Поле всегда скрывается по имени и подписи. |
| Событие | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
| Метод | Нет | Yes. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи. |
| Вложенный тип | Нет | Нет |
| Недвижимость | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.
Пользовательские атрибуты не являются частью общей системы типов.
Массивы или типы COM не ищутся, если они еще не загружены в таблицу доступных классов.
typeName может быть именем типа, соответствующим его пространством имен или именем, соответствующим сборке, который включает спецификацию имени сборки. См. AssemblyQualifiedName.
Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только сборки вызывающего объекта и mscorlib.dll/System.Private.CoreLib.dllв этом порядке. Если typeName полностью соответствует имени частичной или полной сборки, этот метод выполняет поиск в указанной сборке. Если сборка имеет строгое имя, требуется полное имя сборки.
Свойство AssemblyQualifiedName возвращает полное имя типа, включая вложенные типы, имя сборки и аргументы универсального типа. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение создает имя, которое выполняется при запросе, в соответствии со следующими соглашениями.
Note
Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "ProcessorArchitecture=msil". Однако он не включен в строку, возвращаемую свойством AssemblyQualifiedName , по соображениям совместимости. Вы также можете загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода. Затем можно использовать Assembly.GetType метод для загрузки типов из сборки. См. также AssemblyName.ProcessorArchitecture.
| Разделитель | Значение |
|---|---|
| Обратная косая черта (\) | Escape-символ. |
| Backtick (') | Перед одним или несколькими цифрами, представляющими число параметров типа, расположенных в конце имени универсального типа. |
| Квадратные скобки ([]) | Заключите список аргументов универсального типа для созданного универсального типа; в списке аргументов типа заключите тип с указанием сборки. |
| Запятая (,) | Предшествует имени сборки. |
| Период (.) | Обозначает идентификаторы пространства имен. |
| Знак "плюс" (+) | Перед вложенным классом. |
Например, полное имя класса может выглядеть следующим образом:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Если пространство имен было TopNamespace.Sub+Namespace, то строка придется предшествовать знаку плюса (+) с escape-символом (\), чтобы предотвратить его интерпретацию как вложенный разделитель. Отражение выдает следующую строку:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Значение "++" становится "\+\+", а "\" становится "\\".
Это полное имя можно сохранить и позже использовать для загрузки Type. Для поиска и загрузки используйте TypeGetType только имя типа или с полным именем сборки. GetType с именем типа будет искать Type только сборку вызывающего объекта, а затем в системной сборке. GetType с именем квалифицированного типа сборки будет искать в любой сборке Type .
Имена типов могут содержать конечные символы, обозначающие дополнительные сведения о типе, например тип ссылочного типа, тип указателя или тип массива. Чтобы получить имя типа без этих конечных символов, используйте t.GetElementType().ToString(), где t находится тип.
Пробелы относятся ко всем компонентам имени типа, кроме имени сборки. В имени сборки пробелы перед разделителем "," имеют значение, но пробелы после "," разделителя игнорируются.
Имя универсального типа заканчивается обратным символом ('), за которым следует цифры, представляющие число аргументов универсального типа. Назначение этого имени — разрешить компиляторам поддерживать универсальные типы с одинаковым именем, но с разными числами параметров типа, происходящими в одной области. Например, отражение возвращает имена Tuple`1 и Tuple`2 из универсальных методов Tuple(Of T) и Tuple(Of T0, T1) в Visual Basic или Tuple<T> и Tuple<T0, T1> в Visual C#.
Для универсальных типов список аргументов типа заключен в квадратные скобки, а аргументы типа разделяются запятыми. Например, универсальный Dictionary<TKey,TValue> имеет два параметра типа.
Dictionary<TKey,TValue> Ключи MyType типа String могут быть представлены следующим образом:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Чтобы указать подходящий для сборки тип в списке аргументов типа, заключите тип, квалифицированный сборкой, в скобках. В противном случае запятые, разделяющие части квалифицированного имени сборки, интерпретируются как разделяющие дополнительные аргументы типа. Например, Dictionary<TKey,TValue>MyType fromMyAssembly.dllс ключами типа Stringможно указать следующим образом:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Квалифицированный тип сборки может быть заключен в скобки только в том случае, если он отображается в списке параметров типа. Правила поиска сборок для квалифицированных и неквалифицированных типов в списках параметров типа совпадают с правилами для квалифицированных и неквалифицированных негенерических типов.
Типы, допускающие значение NULL, — это особый случай универсальных типов. Например, значение Int32 NULL представлено строкой System.Nullable'1[System.Int32].
Note
Можно также получить типы, допускающие значение NULL, с помощью операторов типов. Например, тип ,допускающий значение NULL Boolean, возвращается typeof(Nullable<bool>) в C# и GetType(Nullable(Of Boolean)) в Visual Basic.
В следующей таблице показан синтаксис, используемый для GetType различных типов.
| Получение | Использование |
|---|---|
| Значение NULL Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Неуправляемый указатель на MyType |
Type.GetType("MyType*") |
Неуправляемый указатель на указатель на указатель MyType |
Type.GetType("MyType**") |
Управляемый указатель или ссылка на MyType |
Type.GetType("MyType&"). Обратите внимание, что в отличие от указателей ссылки ограничены одним уровнем. |
| Родительский класс и вложенный класс | Type.GetType("MyParentClass+MyNestedClass") |
| Одномерный массив с нижней границой 0 | Type.GetType("MyType[]") |
| Одномерный массив с неизвестной нижней границой | Type.GetType("MyType[*]") |
| N-мерный массив | Запятая (,) внутри квадратных скобок в общей сложности n-1 раз. Например, System.Object[,,] представляет трехмерный Object массив. |
| Массив одномерных массивов | Type.GetType("MyType[][]") |
| Прямоугольный двухмерный массив с неизвестными нижними границами | Type.GetType("MyType[,]") |
| Универсальный тип с одним аргументом типа | Type.GetType("MyGenericType`1[MyType]") |
| Универсальный тип с двумя аргументами типа | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Универсальный тип с двумя аргументами типа, соответствующими сборке | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Универсальный тип с указанием сборки с аргументом типа с указанием сборки | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Универсальный тип, аргумент типа которого является универсальным типом с двумя аргументами типа | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
См. также раздел
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Указание полных имен типов
Применяется к
GetType(String, Boolean)
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
Type Возвращает указанное имя, выполняя поиск с учетом регистра и указывая, следует ли вызывать исключение, если тип не найден.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType(string typeName, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Параметры
- typeName
- String
Полное имя типа, который требуется получить. См. AssemblyQualifiedName. Если тип находится в текущей сборке или в mscorlib.dll/System.Private.CoreLib.dll, достаточно указать имя типа, соответствующее пространству имен.
- throwOnError
- Boolean
false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".
Возвращаемое значение
Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".
- Атрибуты
Исключения
typeName равно null.
Инициализатор класса вызывается и вызывает исключение.
throwOnError is true и тип не найден.
–или–
throwOnError
true содержит typeName недопустимые символы, такие как внедренная вкладка.
–или–
throwOnError имеет true значение и typeName является пустой строкой.
–или–
throwOnError имеет true и typeName представляет тип массива с недопустимым размером.
–или–
typeName представляет массив TypedReference.
throwOnError
true имеет typeName недопустимый синтаксис. Например, "MyType[,*,]".
–или–
typeName представляет универсальный тип, имеющий тип указателя, ByRef тип или Void один из его аргументов типа.
–или–
typeName представляет универсальный тип с неправильным числом аргументов типа.
–или–
typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.
throwOnError is true и сборка или одна из его зависимостей не найдена.
Сборка или одна из его зависимостей найдена, но не удалось загрузить.
Примечание. В .NET для приложений магазина Windows или библиотеки классов Portable перехватите исключение базового класса IOException.
Сборка или одна из его зависимостей не является допустимой для текущей загруженной среды выполнения.
Примеры
В следующем примере извлекается тип System.Int32 и используется этот объект типа для отображения FullName свойства System.Int32. Если объект типа ссылается на сборку, которая не существует, в этом примере возникает исключение.
using System;
class GetTypeExample
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Комментарии
Этот метод можно использовать GetType для получения Type объекта для типа в другой сборке, если вы знаете его полное имя сборки, из которого можно получить AssemblyQualifiedName.
GetType вызывает загрузку сборки, указанной в typeName. Можно также загрузить сборку с помощью Assembly.Load метода, а затем использовать Assembly.GetType метод или Assembly.GetTypes метод для получения Type объектов. Если тип находится в сборке, известной вашей программе во время компиляции, более эффективно использовать typeof в C# или оператор GetType в Visual Basic.
.NET Framework: только GetType работает только на сборках, загруженных с диска. При вызове GetType поиска типа, определенного в динамической сборке, определенной с помощью System.Reflection.Emit служб, может возникнуть несогласованное поведение. Поведение зависит от того, является ли динамическая сборка постоянной, т. еRunAndSave. созданной с помощью Save режимов доступа перечисления или System.Reflection.Emit.AssemblyBuilderAccess режимов доступа. Если динамическая сборка является постоянной и была записана на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает ее и извлекает тип из этой сборки. Если сборка не была сохранена на диск при GetType вызове, метод возвращается null.
GetType не понимает временные динамические сборки; таким образом, вызов GetType для получения типа в временной динамической сборке возвращается null.
В .NET Framework, чтобы использовать GetType в динамическом модуле, подпишитесь на событие AppDomain.AssemblyResolve и вызовите GetType перед сохранением. В противном случае вы получите две копии сборки в памяти.
На .NET Core 3.0 и более поздних версий сборки, активируемой этим API, влияет текущее значение AssemblyLoadContext.CurrentContextualReflectionContext.
Параметр throwOnError указывает, что происходит, когда тип не найден, а также подавляет некоторые другие условия исключения, как описано в разделе "Исключения". Некоторые исключения создаются независимо от значения throwOnError. Например, если тип найден, но не может быть загружен, TypeLoadException создается даже в том throwOnErrorслучаеfalse.
В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.
| Тип участника | Static | Нестатическое |
|---|---|---|
| Конструктор | Нет | Нет |
| Поле | Нет | Yes. Поле всегда скрывается по имени и подписи. |
| Событие | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
| Метод | Нет | Yes. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи. |
| Вложенный тип | Нет | Нет |
| Недвижимость | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.
Пользовательские атрибуты не являются частью общей системы типов.
Массивы или типы COM не ищутся, если они еще не загружены в таблицу доступных классов.
typeName может быть именем типа, соответствующим его пространством имен или именем, соответствующим сборке, который включает спецификацию имени сборки. См. AssemblyQualifiedName.
Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только сборки вызывающего объекта и mscorlib.dll/System.Private.CoreLib.dllв этом порядке. Если typeName полностью соответствует имени частичной или полной сборки, этот метод выполняет поиск в указанной сборке. Если сборка имеет строгое имя, требуется полное имя сборки.
Свойство AssemblyQualifiedName возвращает полное имя типа, включая вложенные типы, имя сборки и универсальные аргументы. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение создает имя, которое выполняется при запросе, в соответствии со следующими соглашениями.
Note
Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "ProcessorArchitecture=msil". Однако он не включен в строку, возвращаемую свойством AssemblyQualifiedName , по соображениям совместимости. Вы также можете загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода. Затем можно использовать Assembly.GetType метод для загрузки типов из сборки. См. также AssemblyName.ProcessorArchitecture.
| Разделитель | Значение |
|---|---|
| Обратная косая черта (\) | Escape-символ. |
| Backtick (') | Перед одним или несколькими цифрами, представляющими число параметров типа, расположенных в конце имени универсального типа. |
| Квадратные скобки ([]) | Заключите список аргументов универсального типа для созданного универсального типа; в списке аргументов типа заключите тип с указанием сборки. |
| Запятая (,) | Предшествует имени сборки. |
| Период (.) | Обозначает идентификаторы пространства имен. |
| Знак "плюс" (+) | Перед вложенным классом. |
Например, полное имя класса может выглядеть следующим образом:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Если пространство имен было TopNamespace.Sub+Namespace, то строка придется предшествовать знаку плюса (+) с escape-символом (\), чтобы предотвратить его интерпретацию как вложенный разделитель. Отражение выдает следующую строку:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Значение "++" становится "\+\+", а "\" становится "\\".
Это полное имя можно сохранить и позже использовать для загрузки Type. Для поиска и загрузки используйте TypeGetType только имя типа или с полным именем сборки. GetType с именем типа будет искать Type только сборку вызывающего объекта, а затем в системной сборке. GetType с именем квалифицированного типа сборки будет искать в любой сборке Type .
Имена типов могут содержать конечные символы, обозначающие дополнительные сведения о типе, например тип ссылочного типа, тип указателя или тип массива. Чтобы получить имя типа без этих конечных символов, используйте t.GetElementType().ToString(), где t находится тип.
Пробелы относятся ко всем компонентам имени типа, кроме имени сборки. В имени сборки пробелы перед разделителем "," имеют значение, но пробелы после "," разделителя игнорируются.
Имя универсального типа заканчивается обратным символом ('), за которым следует цифры, представляющие число аргументов универсального типа. Назначение этого имени — разрешить компиляторам поддерживать универсальные типы с одинаковым именем, но с разными числами параметров типа, происходящими в одной области. Например, отражение возвращает имена Tuple`1 и Tuple`2 из универсальных методов Tuple(Of T) и Tuple(Of T0, T1) в Visual Basic или Tuple<T> и Tuple<T0, T1> в Visual C#.
Для универсальных типов список аргументов типа заключен в квадратные скобки, а аргументы типа разделяются запятыми. Например, универсальный Dictionary<TKey,TValue> имеет два параметра типа.
Dictionary<TKey,TValue> Ключи MyType типа String могут быть представлены следующим образом:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Чтобы указать подходящий для сборки тип в списке аргументов типа, заключите тип, квалифицированный сборкой, в скобках. В противном случае запятые, разделяющие части квалифицированного имени сборки, интерпретируются как разделяющие дополнительные аргументы типа. Например, Dictionary<TKey,TValue>MyType можно указать ключи Stringтипа из MyAssembly.dllследующим образом:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Квалифицированный тип сборки может быть заключен в скобки только в том случае, если он отображается в списке параметров типа. Правила поиска сборок для квалифицированных и неквалифицированных типов в списках параметров типа совпадают с правилами для квалифицированных и неквалифицированных негенерических типов.
Типы, допускающие значение NULL, — это особый случай универсальных типов. Например, значение Int32 NULL представлено строкой System.Nullable'1[System.Int32].
Note
Можно также получить типы, допускающие значение NULL, с помощью операторов типов. Например, тип ,допускающий значение NULL Boolean, возвращается typeof(Nullable<bool>) в C# и GetType(Nullable(Of Boolean)) в Visual Basic.
В следующей таблице показан синтаксис, используемый для GetType различных типов.
| Получение | Использование |
|---|---|
| Значение NULL Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Неуправляемый указатель на MyType |
Type.GetType("MyType*") |
Неуправляемый указатель на указатель на указатель MyType |
Type.GetType("MyType**") |
Управляемый указатель или ссылка на MyType |
Type.GetType("MyType&"). Обратите внимание, что в отличие от указателей ссылки ограничены одним уровнем. |
| Родительский класс и вложенный класс | Type.GetType("MyParentClass+MyNestedClass") |
| Одномерный массив с нижней границой 0 | Type.GetType("MyArray[]") |
| Одномерный массив с неизвестной нижней границой | Type.GetType("MyArray[*]") |
| N-мерный массив | Запятая (,) внутри квадратных скобок в общей сложности n-1 раз. Например, System.Object[,,] представляет трехмерный Object массив. |
| Массив двухмерного массива | Type.GetType("MyArray[][]") |
| Прямоугольный двухмерный массив с неизвестными нижними границами | Type.GetType("MyArray[,]") |
| Универсальный тип с одним аргументом типа | Type.GetType("MyGenericType`1[MyType]") |
| Универсальный тип с двумя аргументами типа | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Универсальный тип с двумя аргументами типа, соответствующими сборке | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Универсальный тип с указанием сборки с аргументом типа с указанием сборки | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Универсальный тип, аргумент типа которого является универсальным типом с двумя аргументами типа | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
См. также раздел
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Указание полных имен типов
Применяется к
GetType(String, Boolean, Boolean)
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
Type Получает указанное имя, указывая, следует ли вызывать исключение, если тип не найден и следует ли выполнять поиск с учетом регистра.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Параметры
- typeName
- String
Полное имя типа, который требуется получить. См. AssemblyQualifiedName. Если тип находится в текущей сборке или в mscorlib.dll/System.Private.CoreLib.dll, достаточно указать имя типа, соответствующее пространству имен.
- throwOnError
- Boolean
false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".
- ignoreCase
- Boolean
trueдля выполнения поиска без учета регистра typeNameдля выполнения поиска falseс typeName учетом регистра.
Возвращаемое значение
Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".
- Атрибуты
Исключения
typeName равно null.
Инициализатор класса вызывается и вызывает исключение.
throwOnError is true и тип не найден.
–или–
throwOnError
true содержит typeName недопустимые символы, такие как внедренная вкладка.
–или–
throwOnError имеет true значение и typeName является пустой строкой.
–или–
throwOnError имеет true и typeName представляет тип массива с недопустимым размером.
–или–
typeName представляет массив TypedReference.
throwOnError
true имеет typeName недопустимый синтаксис. Например, "MyType[,*,]".
–или–
typeName представляет универсальный тип, имеющий тип указателя, ByRef тип или Void один из его аргументов типа.
–или–
typeName представляет универсальный тип с неправильным числом аргументов типа.
–или–
typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.
throwOnError is true и сборка или одна из его зависимостей не найдена.
Сборка или одна из его зависимостей найдена, но не удалось загрузить.
Сборка недопустима для текущей загруженной среды выполнения.
Комментарии
Этот метод можно использовать GetType для получения Type объекта для типа в другой сборке, если вы знаете его полное имя сборки, из которого можно получить AssemblyQualifiedName.
GetType вызывает загрузку сборки, указанной в typeName. Можно также загрузить сборку с помощью Assembly.Load метода, а затем использовать Assembly.GetType метод или Assembly.GetTypes метод для получения Type объектов. Если тип находится в сборке, известной вашей программе во время компиляции, более эффективно использовать typeof в C# или оператор GetType в Visual Basic.
.NET Framework: только GetType работает только на сборках, загруженных с диска. При вызове GetType поиска типа, определенного в динамической сборке, определенной с помощью System.Reflection.Emit служб, может возникнуть несогласованное поведение. Поведение зависит от того, является ли динамическая сборка постоянной, т. еRunAndSave. созданной с помощью Save режимов доступа перечисления или System.Reflection.Emit.AssemblyBuilderAccess режимов доступа. Если динамическая сборка является постоянной и была записана на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает ее и извлекает тип из этой сборки. Если сборка не была сохранена на диск при GetType вызове, метод возвращается null.
GetType не понимает временные динамические сборки; таким образом, вызов GetType для получения типа в временной динамической сборке возвращается null.
В .NET Framework, чтобы использовать GetType в динамическом модуле, подпишитесь на событие AppDomain.AssemblyResolve и вызовите GetType перед сохранением. В противном случае вы получите две копии сборки в памяти.
На .NET Core 3.0 и более поздних версий сборки, активируемой этим API, влияет текущее значение AssemblyLoadContext.CurrentContextualReflectionContext.
Параметр throwOnError указывает, что происходит, когда тип не найден, а также подавляет некоторые другие условия исключения, как описано в разделе "Исключения". Некоторые исключения создаются независимо от значения throwOnError. Например, если тип найден, но не может быть загружен, TypeLoadException создается даже в том throwOnErrorслучаеfalse.
В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.
| Тип участника | Static | Нестатическое |
|---|---|---|
| Конструктор | Нет | Нет |
| Поле | Нет | Yes. Поле всегда скрывается по имени и подписи. |
| Событие | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
| Метод | Нет | Yes. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи. |
| Вложенный тип | Нет | Нет |
| Недвижимость | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.
Пользовательские атрибуты не являются частью общей системы типов.
Массивы или типы COM не ищутся, если они еще не загружены в таблицу доступных классов.
typeName может быть именем типа, соответствующим его пространством имен или именем, соответствующим сборке, который включает спецификацию имени сборки. См. AssemblyQualifiedName.
Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только сборки вызывающего объекта и mscorlib.dll/System.Private.CoreLib.dllв этом порядке. Если typeName полностью соответствует имени частичной или полной сборки, этот метод выполняет поиск в указанной сборке. Если сборка имеет строгое имя, требуется полное имя сборки.
Свойство AssemblyQualifiedName возвращает полное имя типа, включая вложенные типы, имя сборки и аргументы типа. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение создает имя, которое выполняется при запросе, в соответствии со следующими соглашениями.
Note
Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "ProcessorArchitecture=msil". Однако он не включен в строку, возвращаемую свойством AssemblyQualifiedName , по соображениям совместимости. Вы также можете загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода. Затем можно использовать Assembly.GetType метод для загрузки типов из сборки. См. также AssemblyName.ProcessorArchitecture.
| Разделитель | Значение |
|---|---|
| Обратная косая черта (\) | Escape-символ. |
| Backtick (') | Перед одним или несколькими цифрами, представляющими число параметров типа, расположенных в конце имени универсального типа. |
| Квадратные скобки ([]) | Заключите список аргументов универсального типа для созданного универсального типа; в списке аргументов типа заключите тип с указанием сборки. |
| Запятая (,) | Предшествует имени сборки. |
| Период (.) | Обозначает идентификаторы пространства имен. |
| Знак "плюс" (+) | Перед вложенным классом. |
Например, полное имя класса может выглядеть следующим образом:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Если пространство имен было TopNamespace.Sub+Namespace, то строка придется предшествовать знаку плюса (+) с escape-символом (\), чтобы предотвратить его интерпретацию как вложенный разделитель. Отражение выдает следующую строку:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Значение "++" становится "\+\+", а "\" становится "\\".
Это полное имя можно сохранить и позже использовать для загрузки Type. Для поиска и загрузки используйте TypeGetType только имя типа или с полным именем сборки. GetType с именем типа будет искать Type только сборку вызывающего объекта, а затем в системной сборке. GetType с именем квалифицированного типа сборки будет искать в любой сборке Type .
Имена типов могут содержать конечные символы, обозначающие дополнительные сведения о типе, например тип ссылочного типа, тип указателя или тип массива. Чтобы получить имя типа без этих конечных символов, используйте t.GetElementType().ToString(), где t находится тип.
Пробелы относятся ко всем компонентам имени типа, кроме имени сборки. В имени сборки пробелы перед разделителем "," имеют значение, но пробелы после "," разделителя игнорируются.
Имя универсального типа заканчивается обратным символом ('), за которым следует цифры, представляющие число аргументов универсального типа. Назначение этого имени — разрешить компиляторам поддерживать универсальные типы с одинаковым именем, но с разными числами параметров типа, происходящими в одной области. Например, отражение возвращает имена Tuple`1 и Tuple`2 из универсальных методов Tuple(Of T) и Tuple(Of T0, T1) в Visual Basic или Tuple<T> и Tuple<T0, T1> в Visual C#.
Для универсальных типов список аргументов типа заключен в квадратные скобки, а аргументы типа разделяются запятыми. Например, универсальный Dictionary<TKey,TValue> имеет два параметра типа.
Dictionary<TKey,TValue> Ключи MyType типа String могут быть представлены следующим образом:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Чтобы указать подходящий для сборки тип в списке аргументов типа, заключите тип, квалифицированный сборкой, в скобках. В противном случае запятые, разделяющие части квалифицированного имени сборки, интерпретируются как разделяющие дополнительные аргументы типа. Например, Dictionary<TKey,TValue>MyType можно указать ключи Stringтипа из MyAssembly.dllследующим образом:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Квалифицированный тип сборки может быть заключен в скобки только в том случае, если он отображается в списке параметров типа. Правила поиска сборок для квалифицированных и неквалифицированных типов в списках параметров типа совпадают с правилами для квалифицированных и неквалифицированных негенерических типов.
Типы, допускающие значение NULL, — это особый случай универсальных типов. Например, значение Int32 NULL представлено строкой System.Nullable'1[System.Int32].
Note
Можно также получить типы, допускающие значение NULL, с помощью операторов типов. Например, тип ,допускающий значение NULL Boolean, возвращается typeof(Nullable<bool>) в C# и GetType(Nullable(Of Boolean)) в Visual Basic.
В следующей таблице показан синтаксис, используемый для GetType различных типов.
| Получение | Использование |
|---|---|
| Значение NULL Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Неуправляемый указатель на MyType |
Type.GetType("MyType*") |
Неуправляемый указатель на указатель на указатель MyType |
Type.GetType("MyType**") |
Управляемый указатель или ссылка на MyType |
Type.GetType("MyType&"). Обратите внимание, что в отличие от указателей ссылки ограничены одним уровнем. |
| Родительский класс и вложенный класс | Type.GetType("MyParentClass+MyNestedClass") |
| Одномерный массив с нижней границой 0 | Type.GetType("MyArray[]") |
| Одномерный массив с неизвестной нижней границой | Type.GetType("MyArray[*]") |
| N-мерный массив | Запятая (,) внутри квадратных скобок в общей сложности n-1 раз. Например, System.Object[,,] представляет трехмерный Object массив. |
| Массив двухмерного массива | Type.GetType("MyArray[][]") |
| Прямоугольный двухмерный массив с неизвестными нижними границами | Type.GetType("MyArray[,]") |
| Универсальный тип с одним аргументом типа | Type.GetType("MyGenericType`1[MyType]") |
| Универсальный тип с двумя аргументами типа | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Универсальный тип с двумя аргументами типа, соответствующими сборке | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Универсальный тип с указанием сборки с аргументом типа с указанием сборки | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Универсальный тип, аргумент типа которого является универсальным типом с двумя аргументами типа | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
См. также раздел
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Указание полных имен типов
Применяется к
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
Возвращает тип с указанным именем, при необходимости предоставляя пользовательские методы для разрешения сборки и типа.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
Параметры
- typeName
- String
Имя типа, который требуется получить.
typeResolver Если параметр указан, имя типа может быть любой строкой, typeResolver которая может разрешать.
assemblyResolver Если параметр указан или используется стандартное разрешение типов, typeName необходимо иметь имя, соответствующее сборке (см. раздел AssemblyQualifiedName), если тип не находится в выполняемой сборке или в mscorlib.dll/System.Private.CoreLib.dll, в этом случае достаточно указать имя типа, соответствующее пространству имен.
- assemblyResolver
- Func<AssemblyName,Assembly>
Метод, который находит и возвращает сборку, указанную в typeName. Имя сборки assemblyResolver передается AssemblyName в качестве объекта. Если typeName имя сборки не содержится, assemblyResolver не вызывается. Если assemblyResolver он не указан, выполняется стандартное разрешение сборки.
Внимание. Не передайте методы из неизвестных или ненадежных вызывающих. Это может привести к повышению привилегий для вредоносного кода. Используйте только те методы, которые вы предоставляете или с которыми вы знакомы.
Метод, который находит и возвращает тип, указанный typeName из сборки, возвращаемой или стандартным assemblyResolver разрешением сборки. Если сборка не указана typeResolver , метод может предоставить его. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; false передается в этот параметр.
Внимание. Не передайте методы из неизвестных или ненадежных вызывающих.
Возвращаемое значение
Тип с указанным именем или null тип не найден.
- Атрибуты
Исключения
typeName равно null.
Инициализатор класса вызывается и вызывает исключение.
Ошибка возникает при typeName синтаксическом анализе имени типа и имени сборки (например, если простое имя типа содержит неискаченный специальный символ).
–или–
typeName представляет универсальный тип, имеющий тип указателя, ByRef тип или Void один из его аргументов типа.
–или–
typeName представляет универсальный тип с неправильным числом аргументов типа.
–или–
typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.
typeName представляет недопустимый тип, например массив TypedReference.
Сборка или одна из его зависимостей найдена, но не удалось загрузить.
–или–
typeName содержит недопустимое имя сборки.
–или–
typeName — допустимое имя сборки без имени типа.
Сборка или одна из его зависимостей не является допустимой для текущей загруженной среды выполнения.
Комментарии
Сценарии использования этого метода и сведения о assemblyResolvertypeResolver параметрах можно найти в перегрузке GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) метода.
Note
Если typeName не удается найти, вызов GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) метода возвращается null. Он не создает исключение. Чтобы определить, возникает ли исключение, вызовите перегрузку GetType метода с параметром throwOnError .
Вызов перегрузки этого метода совпадает GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) с вызовом перегрузки false метода и указанием для throwOnError параметров и ignoreCase параметров.
Применяется к
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
Возвращает тип с указанным именем, указывая, следует ли вызывать исключение, если тип не найден, и при необходимости предоставляет пользовательские методы для разрешения сборки и типа.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
Параметры
- typeName
- String
Имя типа, который требуется получить.
typeResolver Если параметр указан, имя типа может быть любой строкой, typeResolver которая может разрешать.
assemblyResolver Если параметр указан или используется стандартное разрешение типов, typeName необходимо иметь имя, соответствующее сборке (см. раздел AssemblyQualifiedName), если тип не находится в выполняемой сборке или в mscorlib.dll/System.Private.CoreLib.dll, в этом случае достаточно указать имя типа, соответствующее пространству имен.
- assemblyResolver
- Func<AssemblyName,Assembly>
Метод, который находит и возвращает сборку, указанную в typeName. Имя сборки assemblyResolver передается AssemblyName в качестве объекта. Если typeName имя сборки не содержится, assemblyResolver не вызывается. Если assemblyResolver он не указан, выполняется стандартное разрешение сборки.
Внимание. Не передайте методы из неизвестных или ненадежных вызывающих. Это может привести к повышению привилегий для вредоносного кода. Используйте только те методы, которые вы предоставляете или с которыми вы знакомы.
Метод, который находит и возвращает тип, указанный typeName из сборки, возвращаемой или стандартным assemblyResolver разрешением сборки. Если сборка не указана, метод может предоставить его. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; false передается в этот параметр.
Внимание. Не передайте методы из неизвестных или ненадежных вызывающих.
- throwOnError
- Boolean
false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".
Возвращаемое значение
Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".
- Атрибуты
Исключения
typeName равно null.
Инициализатор класса вызывается и вызывает исключение.
throwOnError is true и тип не найден.
–или–
throwOnError
true содержит typeName недопустимые символы, такие как внедренная вкладка.
–или–
throwOnError имеет true значение и typeName является пустой строкой.
–или–
throwOnError имеет true и typeName представляет тип массива с недопустимым размером.
–или–
typeName представляет массив TypedReference.
Ошибка возникает при typeName синтаксическом анализе имени типа и имени сборки (например, если простое имя типа содержит неискаченный специальный символ).
–или–
throwOnError is true и typeName содержит недопустимый синтаксис (например, "MyType[,*,]").
–или–
typeName представляет универсальный тип, имеющий тип указателя, ByRef тип или Void один из его аргументов типа.
–или–
typeName представляет универсальный тип с неправильным числом аргументов типа.
–или–
typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.
throwOnError is true и сборка или одна из его зависимостей не найдена.
–или–
typeName содержит недопустимое имя сборки.
–или–
typeName — допустимое имя сборки без имени типа.
Сборка или одна из его зависимостей найдена, но не удалось загрузить.
Сборка или одна из его зависимостей не является допустимой для текущей загруженной среды выполнения.
Комментарии
Сценарии использования этого метода и сведения о assemblyResolvertypeResolver параметрах можно найти в перегрузке GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) метода.
Вызов перегрузки этого метода совпадает с вызовом перегрузки GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) метода и указанием falseignoreCase параметра.
Применяется к
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
- Исходный код:
- Type.CoreCLR.cs
Возвращает тип с указанным именем, указывая, следует ли выполнять поиск с учетом регистра и вызывать исключение, если тип не найден, и при необходимости предоставляя пользовательские методы для разрешения сборки и типа.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
Параметры
- typeName
- String
Имя типа, который требуется получить.
typeResolver Если параметр указан, имя типа может быть любой строкой, typeResolver которая может разрешать.
assemblyResolver Если параметр указан или используется стандартное разрешение типов, typeName необходимо иметь имя, соответствующее сборке (см. раздел AssemblyQualifiedName), если тип не находится в выполняемой сборке или в mscorlib.dll/System.Private.CoreLib.dll, в этом случае достаточно указать имя типа, соответствующее пространству имен.
- assemblyResolver
- Func<AssemblyName,Assembly>
Метод, который находит и возвращает сборку, указанную в typeName. Имя сборки assemblyResolver передается AssemblyName в качестве объекта. Если typeName имя сборки не содержится, assemblyResolver не вызывается. Если assemblyResolver он не указан, выполняется стандартное разрешение сборки.
Внимание. Не передайте методы из неизвестных или ненадежных вызывающих. Это может привести к повышению привилегий для вредоносного кода. Используйте только те методы, которые вы предоставляете или с которыми вы знакомы.
Метод, который находит и возвращает тип, указанный typeName из сборки, возвращаемой или стандартным assemblyResolver разрешением сборки. Если сборка не указана, метод может предоставить его. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; Значение ignoreCase передается в этот параметр.
Внимание. Не передайте методы из неизвестных или ненадежных вызывающих.
- throwOnError
- Boolean
false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".
- ignoreCase
- Boolean
trueдля выполнения поиска без учета регистра typeNameдля выполнения поиска falseс typeName учетом регистра.
Возвращаемое значение
Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".
- Атрибуты
Исключения
typeName равно null.
Инициализатор класса вызывается и вызывает исключение.
throwOnError is true и тип не найден.
–или–
throwOnError
true содержит typeName недопустимые символы, такие как внедренная вкладка.
–или–
throwOnError имеет true значение и typeName является пустой строкой.
–или–
throwOnError имеет true и typeName представляет тип массива с недопустимым размером.
–или–
typeName представляет массив TypedReference.
Ошибка возникает при typeName синтаксическом анализе имени типа и имени сборки (например, если простое имя типа содержит неискаченный специальный символ).
–или–
throwOnError is true и typeName содержит недопустимый синтаксис (например, "MyType[,*,]").
–или–
typeName представляет универсальный тип, имеющий тип указателя, ByRef тип или Void один из его аргументов типа.
–или–
typeName представляет универсальный тип с неправильным числом аргументов типа.
–или–
typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.
throwOnError is true и сборка или одна из его зависимостей не найдена.
Сборка или одна из его зависимостей найдена, но не удалось загрузить.
–или–
typeName содержит недопустимое имя сборки.
–или–
typeName — допустимое имя сборки без имени типа.
Сборка или одна из его зависимостей не является допустимой сборкой для текущей загруженной среды выполнения.
Комментарии
В .NET Core 3.0 и более поздних версиях, если assemblyResolver имеет значение NULL, то нагрузки сборки, активируемой этим API, влияют на текущее значение AssemblyLoadContext.CurrentContextualReflectionContext.
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Используйте перегрузку метода и связанные с ней перегрузки (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)иGetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)) для замены реализации GetType метода по умолчанию более гибкими реализациями. Предоставляя собственные методы, разрешающие имена типов и имена сборок, содержащих их, можно выполнить следующие действия:
- Управляйте тем, из какой версии сборки загружается тип.
- Укажите другое место, где можно искать имя типа, не включающее имя сборки.
- Загрузка сборок с использованием частичных имен сборок.
- Возвращает подклассы System.Type , которые не создаются средой CLR.
Например, в устойчивой к версиям сериализации этот метод позволяет искать наиболее подходящую сборку с помощью частичного имени. Для других перегрузок GetType метода требуется имя типа с указанием сборки, включающее номер версии.
Альтернативные реализации системы типов могут потребовать возврата подклассов System.Type, не создаваемых CLR; все типы, возвращаемые другими перегрузками метода GetType, — это типы времени выполнения.
Заметки об использовании
Эта перегрузка метода и связанные с ней перегрузки анализируют typeName, чтобы получить имя типа и имя сборки, а затем разрешают эти имена. Определение имени сборки происходит перед определением имени типа, потому что имя типа должно быть определено в контексте сборки.
Note
Если вы не знакомы с понятием имен типов с указанием сборки, ознакомьтесь со свойством AssemblyQualifiedName .
Если typeName не является сборочно-квалифицированным именем, разрешение сборки пропускается. Неквалифицированные имена типов можно разрешить в контексте mscorlib.dll/System.Private.CoreLib.dll или текущей выполняемой сборки или при необходимости предоставить сборку в параметре typeResolver . Эффекты включения или исключения имени сборки для различных типов разрешения имен отображаются в виде таблицы в разделе разрешения смешанных имен .
Общие заметки об использовании:
Не передавайте методы в
assemblyResolverилиtypeResolver, если они поступают от неизвестных или ненадёжных вызывающих объектов. Используйте только те методы, которые вы предоставляете или с которыми вы знакомы.Предостережение
Использование методов из неизвестных или недоверенных вызывающих объектов может привести к повышению привилегий для вредоносного кода.
Если опущены
assemblyResolverпараметры и/илиtypeResolverпараметры, значениеthrowOnErrorпараметра передается методам, выполняющим разрешение по умолчанию.Если
throwOnErrorэтоtrueтак, этот метод создает TypeLoadException исключение, когдаtypeResolverвозвращаетсяnull, и FileNotFoundException когдаassemblyResolverвозвращаетсяnull.Этот метод не перехватывает исключения, вызванные
assemblyResolverиtypeResolver. Вы несете ответственность за все исключения, создаваемые методами резольвера.
Разрешение сборок
Метод assemblyResolver получает объект AssemblyName, который создается путем разбора имени строковой сборки, которая содержится в typeName. Если имя сборки не содержится в typeName, assemblyResolver не вызывается, а null передается в typeResolver.
Если assemblyResolver не указан, для поиска сборки используется стандартная проверка сборки. Если указан assemblyResolver, метод не выполняет стандартную проверку; в этом случае необходимо убедиться, что GetType может обработать все сборки, которые вы ему передаете.
Метод assemblyResolver должен возвращать null, если сборка не может быть разрешена. Если assemblyResolver возвращаетсяnull, typeResolver не вызывается и не выполняется дальнейшая обработка; кроме того, при throwOnErrortrueFileNotFoundExceptionналичии возникает исключение.
Если переданное в AssemblyNameassemblyResolver является частичным именем, одна или несколько его частей - null. Например, если у него нет версии, Version свойство имеет значение null. Если свойство Version, свойство CultureInfo и метод GetPublicKeyToken возвращают null, то было предоставлено только простое имя сборки. Метод assemblyResolver может использовать или игнорировать все части имени сборки.
Эффекты различных параметров разрешения сборок отображаются в виде таблицы в разделе "Разрешение смешанных имен " для простых и сборочных имен.
Разрешение типов
Если имя сборки для typeName не указано, typeResolver всегда вызывается. Если typeName указывает имя сборки, typeResolver вызывается только при успешном разрешении имени сборки. Если assemblyResolver или стандартная проверка сборок дает результат null, typeResolver не вызывается.
Метод typeResolver получает три аргумента:
- Сборка для поиска или
null, еслиtypeNameне содержит имени сборки. - Простое имя типа. В случае вложенного типа это самый внешний содержащий тип. В случае универсального типа это простое имя универсального типа.
- Логическое значение, указывающее
true, следует ли игнорировать регистр имен типов.
Реализация определяет способ использования этих аргументов. Метод должен возвращать typeResolvernull, если он не может разрешить тип. Если typeResolver возвращается null и throwOnError является true, эта перегрузка GetType вызывает TypeLoadExceptionисключение.
Эффекты различных параметров разрешения типов отображаются в виде таблицы в разделе "Разрешение смешанных имен " для простых и сборочных имен.
Разрешение вложенных типов
Если typeName является вложенным типом, typeResolver передается только имя внешнего содержащего типа. Когда typeResolver возвращает этот тип, метод GetNestedType вызывается рекурсивно, пока не будет разрешен внутренний вложенный тип.
Разрешение универсальных типов
Элемент GetType вызывается рекурсивно для разрешения универсальных типов: сначала для разрешения самого универсального типа, а затем для разрешения аргументов типа. Если аргумент типа является универсальным, GetType вызывается рекурсивно для разрешения его аргументов типа и т. д.
Сочетание assemblyResolver и typeResolver, которое вы предоставляете, должно быть способно разрешать все уровни этой рекурсии. Например, предположим, что вы предоставляете assemblyResolver, который управляет загрузкой MyAssembly. Предположим, вы хотите разрешить универсальный тип Dictionary<string, MyType> (Dictionary(Of String, MyType) в Visual Basic). Можно передать следующее имя универсального типа:
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
Обратите внимание, что MyType является единственным аргументом типа, квалифицированным сборкой. Имена классов Dictionary<TKey,TValue> и String не имеют квалификации сборки. Ваш typeResolver должен иметь возможность обрабатывать либо сборку, либо null, потому что он будет получать null для Dictionary<TKey,TValue> и String. Он может обработать этот случай путем вызова перегрузки метода, принимающего GetType строку, так как оба имена неквалифицированных типов находятся в mscorlib.dll/System.Private.CoreLib.dll:
Type t = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore)
);
let t =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else null),
fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr))
Метод assemblyResolver не вызывается для типа словаря и типа строки, так как эти имена типов не квалифицированы сборкой.
Теперь предположим, что вместо System.String, первый универсальный тип аргумента — это YourType, из YourAssembly.
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
Так как эта сборка не является ни mscorlib.dll/System.Private.CoreLib.dll, ни текущей выполняемой сборкой, невозможно разрешить YourType без имени, указанного в сборке. Так как ваш assemblyResolve вызов будет вызываться рекурсивно, он должен иметь возможность обрабатывать этот случай. Вместо возврата null для сборок, отличных от MyAssembly, теперь выполняется загрузка сборки с использованием предоставленного объекта AssemblyName.
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
let t2 =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else Assembly.Load aName),
(fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr)), true)
Устранение неоднозначности в именах типов, содержащих специальные символы
Некоторые символы имеют особые значения в именах с указанием сборки. Если имя простого типа содержит эти символы, символы вызывают ошибки синтаксического анализа, если простое имя является частью имени, заданного сборкой. Чтобы избежать ошибок синтаксического анализа, перед передачей полного имени сборки в метод GetType, необходимо экранировать специальные символы с помощью обратной косой черты. Например, если тип называется Strange]Type, служебный символ должен быть добавлен перед квадратной скобкой следующим образом: Strange\]Type.
Note
Имена с такими специальными символами не могут быть созданы в Visual Basic или C#, но можно создавать с помощью общего промежуточного языка (CIL) или путем создания динамических сборок.
В следующей таблице показаны специальные символы для имен типов.
| Character | Значение |
|---|---|
, (запятая) |
Разделитель имен с указанием сборки. |
[] (квадратные скобки) |
Как пара суффиксов указывает тип массива; как пара разделителей заключает универсальные списки аргументов и имена с указанием сборки. |
& (амперсанд) |
Как суффикс указывает, что тип является ссылочным типом. |
* (звездочка) |
Как суффикс указывает, что тип является типом указателя. |
+ (плюс) |
Разделитель для вложенных типов. |
\ (обратная косая черта) |
Escape-символ. |
Такие свойства, как AssemblyQualifiedName, возвращают правильно экранированные строки. Необходимо правильно передать в метод экранированные строки GetType . В свою очередь, метод GetType правильно передает экранированные имена в typeResolver и в методы разрешения типов по умолчанию. Если вам нужно сравнить имя с незакрытым именем typeResolver, необходимо удалить escape-символы.
Разрешение смешанных имен
В следующей таблице приведены сведения о взаимодействии между assemblyResolver, typeResolver и разрешением имен по умолчанию для всех сочетаний имени типа и имени сборки в typeName.
| Содержимое имени типа | Метод сопоставителя сборок | Метод сопоставителя типов | Result |
|---|---|---|---|
| тип, сборка | null | null | Эквивалентно вызову метода перегрузки Type.GetType(String, Boolean, Boolean). |
| тип, сборка | предоставленный | null |
assemblyResolver возвращает сборку, или null, если не удается разрешить сборку. Если сборка разрешена, перегрузка метода Assembly.GetType(String, Boolean, Boolean) используется для загрузки типа из сборки; в противном случае попытка разрешить тип не предпринимается. |
| тип, сборка | null | предоставленный | Эквивалентно преобразованию имени сборки в объект AssemblyName и вызову перегруженного метода Assembly.Load(AssemblyName) для получения сборки. Если сборка разрешена, она передается в typeResolver; в противном случае она не вызывается, и не предпринимается дальнейших попыток разрешения типа в typeResolver. |
| тип, сборка | предоставленный | предоставленный |
assemblyResolver возвращает сборку, или null, если не удается разрешить сборку. Если сборка разрешена, она передается в typeResolver; в противном случае она не вызывается, и не предпринимается дальнейших попыток разрешения типа в typeResolver. |
| type | null, предоставлено | null | Эквивалентно вызову метода перегрузки Type.GetType(String, Boolean, Boolean). Поскольку имя сборки не указано, выполняется поиск только для mscorlib.dll/System.Private.CoreLib.dll и текущей выполняемой сборки. Если assemblyResolver указан, он игнорируется. |
| type | null, предоставлено | предоставленный |
typeResolver вызывается и null передается для сборки.
typeResolver может предоставить тип из любой сборки, включая сборки, которые он загружает с этой целью. Если assemblyResolver указан, он игнорируется. |
| сборка | null, предоставлено | null, предоставлено | Создается исключение FileLoadException, потому что имя сборки анализируется так, как если бы это было имя типа с полным указанием сборки. Это приводит к недопустимому имени сборки. |