Поделиться через


Type.GetType Метод

Определение

Type Возвращает объект, представляющий указанный тип.

Перегрузки

Имя Описание
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

Возвращает тип с указанным именем, указывая, следует ли выполнять поиск с учетом регистра и вызывать исключение, если тип не найден, и при необходимости предоставляя пользовательские методы для разрешения сборки и типа.

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)

Исходный код:
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. Имя сборки AssemblyName передается assemblyResolver в качестве объекта. Если typeName имя сборки не содержится, assemblyResolver не вызывается. Если assemblyResolver он не указан, выполняется стандартное разрешение сборки.

Внимание. Не передайте методы из неизвестных или ненадежных вызывающих. Это может привести к повышению привилегий для вредоносного кода. Используйте только те методы, которые вы предоставляете или с которыми вы знакомы.

typeResolver
Func<Assembly,String,Boolean,Type>

Метод, который находит и возвращает тип, указанный typeName из сборки, возвращаемой или стандартным assemblyResolver разрешением сборки. Если сборка не указана, метод может предоставить его. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; Значение ignoreCase передается в этот параметр.

Внимание. Не передайте методы из неизвестных или ненадежных вызывающих.

throwOnError
Boolean

, чтобы вызвать исключение, если тип не удается найти; значение a Указание false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".

ignoreCase
Boolean

trueдля выполнения поиска без учета регистра typeNameдля выполнения поиска typeNameс false учетом регистра.

Возвращаемое значение

Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".

Атрибуты

Исключения

typeName равно null.

Инициализатор класса вызывается и вызывает исключение.

throwOnError is true и тип не найден.

–или–

throwOnError typeName содержит true недопустимые символы, такие как внедренная вкладка.

–или–

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.

Дополнительные сведения об этом API см. в дополнительных примечаниях API для Type.GetType.

Применяется к

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 или переносимой библиотеке классов перехватывает исключение IOExceptionбазового класса.

Сборка недопустима для текущей загруженной среды выполнения.

Примеры

В следующем примере извлекается тип System.Int32 и используется этот объект типа для отображения FullName свойства System.Int32.

using System;

class Example
{
     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.

Замечание

Если typeName не удается найти, вызов GetType(String) метода возвращается null. Он не создает исключение. Чтобы определить, возникает ли исключение, вызовите перегрузку GetType метода с параметром throwOnError .

Только .NET Framework: GetType работает только на сборках, загруженных с диска. При вызове GetType поиска типа, определенного в динамической сборке, определенной с помощью System.Reflection.Emit служб, может возникнуть несогласованное поведение. Поведение зависит от того, является ли динамическая сборка постоянной, т. еSystem.Reflection.Emit.AssemblyBuilderAccess. созданной с помощью RunAndSave режимов доступа перечисления или Save режимов доступа. Если динамическая сборка является постоянной и была записана на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает ее и извлекает тип из этой сборки. Если сборка не была сохранена на диск при GetType вызове, метод возвращается null. GetType не понимает временные динамические сборки; таким образом, вызов GetType для получения типа в временной динамической сборке возвращается null.

Чтобы использовать GetType динамический модуль в .NET Framework, подпишитесь на AppDomain.AssemblyResolve событие и вызов GetType перед сохранением. В противном случае вы получите две копии сборки в памяти.

В .NET Core 3.0 и более поздних версиях сборка загружается, активируемая этим API, зависит от текущего AssemblyLoadContext.CurrentContextualReflectionContextзначения.

В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.

Тип участника Статический Нестатическое
Конструктор Нет Нет
Поле Нет Да. Поле всегда скрывается по имени и подписи.
Event Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
Метод Нет Да. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи.
Вложенный тип Нет Нет
Недвижимость Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
  1. Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.

  3. Пользовательские атрибуты не являются частью общей системы типов.

Массивы или типы COM не ищутся, если они еще не загружены в таблицу доступных классов.

typeName может быть именем типа, соответствующим его пространством имен или именем, соответствующим сборке, который включает спецификацию имени сборки. См. AssemblyQualifiedName.

Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только сборки вызывающего объекта и mscorlib.dll/System.Private.CoreLib.dllв этом порядке. Если typeName полностью соответствует имени частичной или полной сборки, этот метод выполняет поиск в указанной сборке. Если сборка имеет строгое имя, требуется полное имя сборки.

Свойство AssemblyQualifiedName возвращает полное имя типа, включая вложенные типы, имя сборки и аргументы универсального типа. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение создает имя, которое выполняется при запросе, в соответствии со следующими соглашениями.

Замечание

Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "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(Of T), Tuple`2Tuple(Of T0, T1) а также в Visual Basic или Tuple<T>Tuple<T0, T1> в Visual C#.

Для универсальных типов список аргументов типа заключен в квадратные скобки, а аргументы типа разделяются запятыми. Например, универсальный Dictionary<TKey,TValue> имеет два параметра типа. MyType Ключи Dictionary<TKey,TValue> типа 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]]")

Замечание

Квалифицированный тип сборки может быть заключен в скобки только в том случае, если он отображается в списке параметров типа. Правила поиска сборок для квалифицированных и неквалифицированных типов в списках параметров типа совпадают с правилами для квалифицированных и неквалифицированных негенерических типов.

Типы, допускающие значение NULL, — это особый случай универсальных типов. Например, значение Int32 NULL представлено строкой System.Nullable'1[System.Int32].

Замечание

Можно также получить типы, допускающие значение NULL, с помощью операторов типов. Например, тип, допускающий Boolean значение NULL, возвращается 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]]")

См. также раздел

Применяется к

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

, чтобы вызвать исключение, если тип не удается найти; значение a Указание false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".

Возвращаемое значение

Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".

Атрибуты

Исключения

typeName равно null.

Инициализатор класса вызывается и вызывает исключение.

throwOnError is true и тип не найден.

–или–

throwOnError typeName содержит true недопустимые символы, такие как внедренная вкладка.

–или–

throwOnError имеет true значение и typeName является пустой строкой.

–или–

throwOnError имеет true и typeName представляет тип массива с недопустимым размером.

–или–

typeName представляет массив TypedReference.

throwOnError typeName имеет true недопустимый синтаксис. Например, "MyType[,*,]".

–или–

typeName представляет универсальный тип, имеющий тип указателя, ByRef тип или Void один из его аргументов типа.

–или–

typeName представляет универсальный тип с неправильным числом аргументов типа.

–или–

typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.

throwOnError is true и сборка или одна из его зависимостей не найдена.

Сборка или одна из его зависимостей найдена, но не удалось загрузить.

Примечание. Вместо этого в .NET для приложений Магазина Windows или переносимой библиотеке классов перехватывает исключение IOExceptionбазового класса.

Сборка или одна из его зависимостей не является допустимой для текущей загруженной среды выполнения.

Примеры

В следующем примере извлекается тип System.Int32 и используется этот объект типа для отображения FullName свойства System.Int32. Если объект типа ссылается на сборку, которая не существует, в этом примере возникает исключение.

using System;

class Example
{
     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 служб, может возникнуть несогласованное поведение. Поведение зависит от того, является ли динамическая сборка постоянной, т. еSystem.Reflection.Emit.AssemblyBuilderAccess. созданной с помощью RunAndSave режимов доступа перечисления или Save режимов доступа. Если динамическая сборка является постоянной и была записана на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает ее и извлекает тип из этой сборки. Если сборка не была сохранена на диск при GetType вызове, метод возвращается null. GetType не понимает временные динамические сборки; таким образом, вызов GetType для получения типа в временной динамической сборке возвращается null.

Чтобы использовать GetType динамический модуль в .NET Framework, подпишитесь на AppDomain.AssemblyResolve событие и вызов GetType перед сохранением. В противном случае вы получите две копии сборки в памяти.

В .NET Core 3.0 и более поздних версиях сборка загружается, активируемая этим API, зависит от текущего AssemblyLoadContext.CurrentContextualReflectionContextзначения.

Параметр throwOnError указывает, что происходит, когда тип не найден, а также подавляет некоторые другие условия исключения, как описано в разделе "Исключения". Некоторые исключения создаются независимо от значения throwOnError. Например, если тип найден, но не может быть загружен, TypeLoadException создается даже в том falseслучаеthrowOnError.

В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.

Тип участника Статический Нестатическое
Конструктор Нет Нет
Поле Нет Да. Поле всегда скрывается по имени и подписи.
Event Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
Метод Нет Да. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи.
Вложенный тип Нет Нет
Недвижимость Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
  1. Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.

  3. Пользовательские атрибуты не являются частью общей системы типов.

Массивы или типы COM не ищутся, если они еще не загружены в таблицу доступных классов.

typeName может быть именем типа, соответствующим его пространством имен или именем, соответствующим сборке, который включает спецификацию имени сборки. См. AssemblyQualifiedName.

Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только сборки вызывающего объекта и mscorlib.dll/System.Private.CoreLib.dllв этом порядке. Если typeName полностью соответствует имени частичной или полной сборки, этот метод выполняет поиск в указанной сборке. Если сборка имеет строгое имя, требуется полное имя сборки.

Свойство AssemblyQualifiedName возвращает полное имя типа, включая вложенные типы, имя сборки и универсальные аргументы. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение создает имя, которое выполняется при запросе, в соответствии со следующими соглашениями.

Замечание

Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "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(Of T), Tuple`2Tuple(Of T0, T1) а также в Visual Basic или Tuple<T>Tuple<T0, T1> в Visual C#.

Для универсальных типов список аргументов типа заключен в квадратные скобки, а аргументы типа разделяются запятыми. Например, универсальный Dictionary<TKey,TValue> имеет два параметра типа. MyType Ключи Dictionary<TKey,TValue> типа 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]]")

Замечание

Квалифицированный тип сборки может быть заключен в скобки только в том случае, если он отображается в списке параметров типа. Правила поиска сборок для квалифицированных и неквалифицированных типов в списках параметров типа совпадают с правилами для квалифицированных и неквалифицированных негенерических типов.

Типы, допускающие значение NULL, — это особый случай универсальных типов. Например, значение Int32 NULL представлено строкой System.Nullable'1[System.Int32].

Замечание

Можно также получить типы, допускающие значение NULL, с помощью операторов типов. Например, тип, допускающий Boolean значение NULL, возвращается 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]]")

См. также раздел

Применяется к

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

, чтобы вызвать исключение, если тип не удается найти; значение a Указание false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".

ignoreCase
Boolean

trueдля выполнения поиска без учета регистра typeNameдля выполнения поиска typeNameс false учетом регистра.

Возвращаемое значение

Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".

Атрибуты

Исключения

typeName равно null.

Инициализатор класса вызывается и вызывает исключение.

throwOnError is true и тип не найден.

–или–

throwOnError typeName содержит true недопустимые символы, такие как внедренная вкладка.

–или–

throwOnError имеет true значение и typeName является пустой строкой.

–или–

throwOnError имеет true и typeName представляет тип массива с недопустимым размером.

–или–

typeName представляет массив TypedReference.

throwOnError typeName имеет true недопустимый синтаксис. Например, "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 служб, может возникнуть несогласованное поведение. Поведение зависит от того, является ли динамическая сборка постоянной, т. еSystem.Reflection.Emit.AssemblyBuilderAccess. созданной с помощью RunAndSave режимов доступа перечисления или Save режимов доступа. Если динамическая сборка является постоянной и была записана на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает ее и извлекает тип из этой сборки. Если сборка не была сохранена на диск при GetType вызове, метод возвращается null. GetType не понимает временные динамические сборки; таким образом, вызов GetType для получения типа в временной динамической сборке возвращается null.

Чтобы использовать GetType динамический модуль в .NET Framework, подпишитесь на AppDomain.AssemblyResolve событие и вызов GetType перед сохранением. В противном случае вы получите две копии сборки в памяти.

В .NET Core 3.0 и более поздних версиях сборка загружается, активируемая этим API, зависит от текущего AssemblyLoadContext.CurrentContextualReflectionContextзначения.

Параметр throwOnError указывает, что происходит, когда тип не найден, а также подавляет некоторые другие условия исключения, как описано в разделе "Исключения". Некоторые исключения создаются независимо от значения throwOnError. Например, если тип найден, но не может быть загружен, TypeLoadException создается даже в том falseслучаеthrowOnError.

В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.

Тип участника Статический Нестатическое
Конструктор Нет Нет
Поле Нет Да. Поле всегда скрывается по имени и подписи.
Event Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
Метод Нет Да. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи.
Вложенный тип Нет Нет
Недвижимость Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
  1. Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.

  3. Пользовательские атрибуты не являются частью общей системы типов.

Массивы или типы COM не ищутся, если они еще не загружены в таблицу доступных классов.

typeName может быть именем типа, соответствующим его пространством имен или именем, соответствующим сборке, который включает спецификацию имени сборки. См. AssemblyQualifiedName.

Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только сборки вызывающего объекта и mscorlib.dll/System.Private.CoreLib.dllв этом порядке. Если typeName полностью соответствует имени частичной или полной сборки, этот метод выполняет поиск в указанной сборке. Если сборка имеет строгое имя, требуется полное имя сборки.

Свойство AssemblyQualifiedName возвращает полное имя типа, включая вложенные типы, имя сборки и аргументы типа. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение создает имя, которое выполняется при запросе, в соответствии со следующими соглашениями.

Замечание

Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "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(Of T), Tuple`2Tuple(Of T0, T1) а также в Visual Basic или Tuple<T>Tuple<T0, T1> в Visual C#.

Для универсальных типов список аргументов типа заключен в квадратные скобки, а аргументы типа разделяются запятыми. Например, универсальный Dictionary<TKey,TValue> имеет два параметра типа. MyType Ключи Dictionary<TKey,TValue> типа 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]]")

Замечание

Квалифицированный тип сборки может быть заключен в скобки только в том случае, если он отображается в списке параметров типа. Правила поиска сборок для квалифицированных и неквалифицированных типов в списках параметров типа совпадают с правилами для квалифицированных и неквалифицированных негенерических типов.

Типы, допускающие значение NULL, — это особый случай универсальных типов. Например, значение Int32 NULL представлено строкой System.Nullable'1[System.Int32].

Замечание

Можно также получить типы, допускающие значение NULL, с помощью операторов типов. Например, тип, допускающий Boolean значение NULL, возвращается 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]]")

См. также раздел

Применяется к

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. Имя сборки AssemblyName передается assemblyResolver в качестве объекта. Если typeName имя сборки не содержится, assemblyResolver не вызывается. Если assemblyResolver он не указан, выполняется стандартное разрешение сборки.

Внимание. Не передайте методы из неизвестных или ненадежных вызывающих. Это может привести к повышению привилегий для вредоносного кода. Используйте только те методы, которые вы предоставляете или с которыми вы знакомы.

typeResolver
Func<Assembly,String,Boolean,Type>

Метод, который находит и возвращает тип, указанный 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) метода.

Замечание

Если typeName не удается найти, вызов GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) метода возвращается null. Он не создает исключение. Чтобы определить, возникает ли исключение, вызовите перегрузку GetType метода с параметром throwOnError .

Вызов перегрузки этого метода совпадает false с вызовом перегрузки GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) метода и указанием для 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. Имя сборки AssemblyName передается assemblyResolver в качестве объекта. Если typeName имя сборки не содержится, assemblyResolver не вызывается. Если assemblyResolver он не указан, выполняется стандартное разрешение сборки.

Внимание. Не передайте методы из неизвестных или ненадежных вызывающих. Это может привести к повышению привилегий для вредоносного кода. Используйте только те методы, которые вы предоставляете или с которыми вы знакомы.

typeResolver
Func<Assembly,String,Boolean,Type>

Метод, который находит и возвращает тип, указанный typeName из сборки, возвращаемой или стандартным assemblyResolver разрешением сборки. Если сборка не указана, метод может предоставить его. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; false передается в этот параметр.

Внимание. Не передайте методы из неизвестных или ненадежных вызывающих.

throwOnError
Boolean

, чтобы вызвать исключение, если тип не удается найти; значение a Указание false также подавляет некоторые другие условия исключения, но не все из них. См. раздел "Исключения".

Возвращаемое значение

Тип с указанным именем. Если тип не найден, параметр указывает, throwOnError возвращается ли null возвращается или возникает исключение. В некоторых случаях исключение создается независимо от значения throwOnError. См. раздел "Исключения".

Атрибуты

Исключения

typeName равно null.

Инициализатор класса вызывается и вызывает исключение.

throwOnError is true и тип не найден.

–или–

throwOnError typeName содержит true недопустимые символы, такие как внедренная вкладка.

–или–

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 параметра.

Применяется к