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


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

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

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);
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);
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 не указан, выполняется стандартное разрешение сборки.

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

typeResolver
Func<Assembly,String,Boolean,Type>

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

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

throwOnError
Boolean

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

ignoreCase
Boolean

Значение true, чтобы не учитывать регистр при поиске typeName, значение false, чтобы учитывать регистр при поиске typeName.

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

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

Исключения

typeName имеет значение null.

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

throwOnError имеет значение true, и тип не найден.

-или-

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

-или-

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

-или-

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

-или-

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

Произошла ошибка при интерпретации typeName в имя типа и имя сборки (например, если имя простого типа содержит неэкранированный специальный знак).

-или-

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

-или-

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

-или-

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

-или-

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

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

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

-или-

typeName содержит недопустимое имя сборки.

-или-

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

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

Комментарии

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

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

GetType()

Исходный код:
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 с указанным именем, учитывая при поиске регистр.

public:
 static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
public static Type? GetType (string typeName);
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 namespace System;

int 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
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 .

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

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

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

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

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

  3. Настраиваемые атрибуты не являются частью системы общих типов.

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

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

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

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

Примечание

Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "ProcessorArchitecture=msil". Однако он не включается в строку, возвращаемую свойством AssemblyQualifiedName , из соображений совместимости. Вы также можете загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода . Затем можно использовать метод для Assembly.GetType загрузки типов из сборки. См. также раздел AssemblyName.ProcessorArchitecture.

Разделитель Значение
Обратная косая черта (\) Escape-символ.
Обратный тиктик (') Предшествует одной или нескольким цифрам, представляющим количество параметров типа, расположенных в конце имени универсального типа.
Квадратные скобки ([]) Заключите список аргументов универсального типа для сконструированного универсального типа; В списке аргументов типа заключите тип, квалифицированные сборкой.
Запятая (,) Предшествует имени сборки.
Точка (.) Обозначает идентификаторы пространств имен.
Знак "плюс" (+) Предшествует вложенному классу.

Например, полное имя класса может выглядеть следующим образом:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Если пространство имен — TopNamespace.Sub+Namespace, то строка будет предшествовать знаку плюса (+) с escape-символом (\), чтобы предотвратить ее интерпретацию как вложенного разделителя. Отражение выдает эту строку следующим образом:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

"++" становится "\+\+", а "\" — "\\".

Это полное имя можно сохранить, а затем использовать для загрузки Type. Для поиска и загрузки Typeиспользуйте GetType либо только имя типа, либо полное имя типа сборки. 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> имеет два параметра типа. 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].

Примечание

В C#, C++ и Visual Basic можно также получить типы, допускаемые значение NULL, с помощью операторов типов. Например, тип, допускающий Boolean значение NULL, возвращается typeof(Nullable<bool>) в C#, в Nullable<Boolean>::typeid 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 с заданным именем, выполняя поиск с учетом регистра и указывая, будет ли создаваться исключение в случае невозможности найти тип.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
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

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

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

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

Исключения

typeName имеет значение null.

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

throwOnError имеет значение true, и тип не найден.

-или-

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

-или-

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

-или-

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

-или-

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

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

-или-

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

-или-

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

-или-

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

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

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

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

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

Примеры

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

using namespace System;

int 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
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.

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

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

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

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

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

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

  3. Настраиваемые атрибуты не являются частью системы общих типов.

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

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

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

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

Примечание

Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "ProcessorArchitecture=msil". Однако он не включается в строку, возвращаемую свойством AssemblyQualifiedName , из соображений совместимости. Вы также можете загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода . Затем можно использовать метод для Assembly.GetType загрузки типов из сборки. См. также раздел AssemblyName.ProcessorArchitecture.

Разделитель Значение
Обратная косая черта (\) Escape-символ.
Обратный тиктик (') Предшествует одной или нескольким цифрам, представляющим количество параметров типа, расположенных в конце имени универсального типа.
Квадратные скобки ([]) Заключите список аргументов универсального типа для сконструированного универсального типа; В списке аргументов типа заключите тип, квалифицированные сборкой.
Запятая (,) Предшествует имени сборки.
Точка (.) Обозначает идентификаторы пространств имен.
Знак "плюс" (+) Предшествует вложенному классу.

Например, полное имя класса может выглядеть следующим образом:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Если пространство имен — TopNamespace.Sub+Namespace, то строка будет предшествовать знаку плюса (+) с escape-символом (\), чтобы предотвратить ее интерпретацию как вложенного разделителя. Отражение выдает эту строку следующим образом:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

"++" становится "\+\+", а "\" — "\\".

Это полное имя можно сохранить, а затем использовать для загрузки Type. Для поиска и загрузки Typeиспользуйте GetType либо только имя типа, либо полное имя типа сборки. 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> имеет два параметра типа. MyType Объект Dictionary<TKey,TValue> с ключами типа String может быть представлен следующим образом:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Чтобы указать тип с указанием сборки в списке аргументов типа, заключите тип с указанием сборки в квадратные скобки. В противном случае запятые, разделяющие части имени сборки, интерпретируются как разделяющие дополнительные аргументы типа. Например, Dictionary<TKey,TValue>MyType из MyAssembly.dll с ключами типа Stringможно указать следующим образом:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Примечание

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

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

Примечание

В C#, C++ и Visual Basic можно также получить типы, допускаемые значение NULL, с помощью операторов типов. Например, тип, допускающий Boolean значение NULL, возвращается typeof(Nullable<bool>) в C#, в Nullable<Boolean>::typeid 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 с указанным именем, позволяющий определить, будет ли создаваться исключение в случае невозможности найти тип и будет ли учитываться регистр при поиске.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
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
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

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

ignoreCase
Boolean

Значение true, чтобы не учитывать регистр при поиске typeName, значение false, чтобы учитывать регистр при поиске typeName.

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

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

Исключения

typeName имеет значение null.

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

throwOnError имеет значение true, и тип не найден.

-или-

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

-или-

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

-или-

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

-или-

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

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

-или-

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

-или-

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

-или-

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

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

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

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

Комментарии

Метод можно использовать GetType для получения Type объекта для типа в другой сборке, если известно полное имя сборки, которое можно получить из AssemblyQualifiedName. GetType вызывает загрузку сборки, указанной в typeName. Вы также можете загрузить сборку Assembly.Load с помощью метода , а затем использовать Assembly.GetType метод или Assembly.GetTypes для получения Type объектов. Если тип находится в сборке, известной вашей программе во время компиляции, его эффективнее использовать typeof в C# или оператор в GetType Visual Basic.

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

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

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

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

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

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

  3. Настраиваемые атрибуты не являются частью системы общих типов.

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

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

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

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

Примечание

Архитектура процессора является частью удостоверения сборки и может быть указана как часть строк имени сборки. Например, "ProcessorArchitecture=msil". Однако он не включается в строку, возвращаемую свойством AssemblyQualifiedName , из соображений совместимости. Вы также можете загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода . Затем можно использовать метод для Assembly.GetType загрузки типов из сборки. См. также раздел AssemblyName.ProcessorArchitecture.

Разделитель Значение
Обратная косая черта (\) Escape-символ.
Обратный тиктик (') Предшествует одной или нескольким цифрам, представляющим количество параметров типа, расположенных в конце имени универсального типа.
Квадратные скобки ([]) Заключите список аргументов универсального типа для сконструированного универсального типа; В списке аргументов типа заключите тип, квалифицированные сборкой.
Запятая (,) Предшествует имени сборки.
Точка (.) Обозначает идентификаторы пространств имен.
Знак "плюс" (+) Предшествует вложенному классу.

Например, полное имя класса может выглядеть следующим образом:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Если пространство имен — TopNamespace.Sub+Namespace, то строка будет предшествовать знаку плюса (+) с escape-символом (\), чтобы предотвратить ее интерпретацию как вложенного разделителя. Отражение выдает эту строку следующим образом:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

"++" становится "\+\+", а "\" — "\\".

Это полное имя можно сохранить, а затем использовать для загрузки Type. Для поиска и загрузки Typeиспользуйте GetType либо только имя типа, либо полное имя типа сборки. 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> тип имеет два параметра типа. MyType Объект Dictionary<TKey,TValue> с ключами типа String может быть представлен следующим образом:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Чтобы указать тип, отвечающий требованиям сборки, в списке аргументов типа заключите тип, квалифицирующий сборку, в квадратные скобки. В противном случае запятые, разделяющие части имени сборки, интерпретируются как разделяющие дополнительные аргументы типа. Например, Dictionary<TKey,TValue>MyType из MyAssembly.dll с ключами типа Stringможно указать следующим образом:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Примечание

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

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

Примечание

В C#, C++ и Visual Basic можно также получить типы, допускаемые значением NULL, с помощью операторов типов. Например, тип, допускающий Boolean значение NULL, возвращается typeof(Nullable<bool>) в C#, в Nullable<Boolean>::typeid 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

Получает тип с указанным именем; дополнительно может предоставлять настраиваемые методы для разрешения сборки и типа.

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::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);
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 не указан, выполняется стандартное разрешение сборки.

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

typeResolver
Func<Assembly,String,Boolean,Type>

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

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

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

Тип с указанным именем или значение null, если тип не найден.

Исключения

typeName имеет значение null.

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

Произошла ошибка при интерпретации typeName в имя типа и имя сборки (например, если имя простого типа содержит неэкранированный специальный знак).

-или-

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

-или-

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

-или-

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

typeNameпредставляет недопустимый тип, например массив .TypedReference

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

-или-

typeName содержит недопустимое имя сборки.

-или-

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

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

Комментарии

Сценарии использования для этого метода, а также сведения о параметрах assemblyResolver и typeResolver можно найти в перегрузке 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 .

Вызов перегрузки этого метода совпадает с вызовом перегрузки GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) метода и указанием falsethrowOnError для параметров и ignoreCase .

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

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)

Исходный код:
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);
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);
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 не указан, выполняется стандартное разрешение сборки.

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

typeResolver
Func<Assembly,String,Boolean,Type>

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

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

throwOnError
Boolean

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

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

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

Исключения

typeName имеет значение null.

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

throwOnError имеет значение true, и тип не найден.

-или-

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

-или-

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

-или-

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

-или-

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

Произошла ошибка при интерпретации typeName в имя типа и имя сборки (например, если имя простого типа содержит неэкранированный специальный знак).

-или-

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

-или-

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

-или-

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

-или-

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

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

-или-

typeName содержит недопустимое имя сборки.

-или-

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

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

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

Комментарии

Сценарии использования этого метода, а также сведения о параметрах assemblyResolver и typeResolver можно найти в перегрузке GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) метода.

Вызов этой перегрузки метода совпадает с вызовом перегрузки GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) метода и указанием false параметра ignoreCase .

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