Type.GetType Метод

Определение

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

Перегрузки

GetType()

Возвращает текущий Type.

GetType(String)

Возвращает объект Type с указанным именем, учитывая при поиске регистр.

GetType(String, Boolean)

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

GetType(String, Boolean, Boolean)

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

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

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

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

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

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

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

GetType()

Возвращает текущий Type.

public:
 Type ^ GetType();
public:
 virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type

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

Type

Текущий контекст Type.

Реализации

Исключения

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

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

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

GetType(String)

Возвращает объект 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, достаточно предоставить имя типа с указанием пространства имен.

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

Type

Тип с указанным именем, если он существует; в противном случае — значение null.

Исключения

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

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

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

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

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

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

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

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

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

-или-

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

Примеры

В следующем примере извлекается тип 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
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 в динамическом модуле Подпишитесь на AppDomain.AssemblyResolve событие и вызовите его GetType перед сохранением. В противном случае в памяти будут выводится две копии сборки.

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

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

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

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

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

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

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

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

Примечание

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

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

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

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly  

Если пространство имен было Топнамеспаце. Re+ 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> тип имеет два параметра типа. Dictionary<TKey,TValue> MyType Тип с ключами типа String может быть представлен следующим образом:

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

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

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

Примечание

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

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

Примечание

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

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

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

Type

Тип с указанным именем. Если тип не найден, параметр 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 вместо этого.

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

-или-

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

Примеры

В следующем примере извлекается тип 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
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 в динамическом модуле Подпишитесь на AppDomain.AssemblyResolve событие и вызовите его GetType перед сохранением. В противном случае в памяти будут выводится две копии сборки.

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly  

Если пространство имен было Топнамеспаце. Re+ 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> тип имеет два параметра типа. Dictionary<TKey,TValue> MyType Тип с ключами типа 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, являются особым случаем универсальных типов. Например, значение NULL Int32 представлено строкой "System. Nullable" 1 [System. Int32] ".

Примечание

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

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.

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

Type

Тип с указанным именем. Если тип не найден, параметр 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, и не удалось найти сборку либо одну из ее зависимостей.

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

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

-или-

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

Комментарии

Метод можно использовать 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 в динамическом модуле Подпишитесь на AppDomain.AssemblyResolve событие и вызовите его GetType перед сохранением. В противном случае в памяти будут выводится две копии сборки.

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly  

Если пространство имен было Топнамеспаце. Re+ 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> тип имеет два параметра типа. Dictionary<TKey,TValue> MyType Тип с ключами типа 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, являются особым случаем универсальных типов. Например, значение NULL Int32 представлено строкой "System. Nullable" 1 [System. Int32] ".

Примечание

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

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

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.

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

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

Type

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

Исключения

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

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

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

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

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

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

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

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

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

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

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

-или-

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

Комментарии

Сценарии использования для этого метода и сведения о 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) перегрузки метода и указанию false для throwOnError ignoreCase параметров и.

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

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

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

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

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

Type

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

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

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

-или-

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

Комментарии

Сценарии использования для этого метода и сведения о 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 параметра.

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

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

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

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.

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

Type

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

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

-или-

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

Комментарии

Используйте эту перегрузку метода и связанные с ней перегрузки ( GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) и GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) ), чтобы заменить реализацию метода по умолчанию GetType более гибкими реализациями. Предоставляя собственные методы, которые разрешают имена типов и имена сборок, содержащих их, можно выполнить следующие действия.

  • Управление версией сборки, из которой загружается тип.

  • Укажите другое место для поиска имени типа, не включающего в себя имя сборки.

  • Загрузка сборок с использованием частичных имен сборок.

  • Возвращают подклассы System.Type , которые не создаются средой CLR.

Например, при сериализации с поддержкой версий этот метод позволяет выполнять поиск "наилучшего" сборки с помощью частичного имени. Для других перегрузок GetType метода требуется имя типа с указанием сборки, которое включает номер версии.

Альтернативным реализациям системы типов может потребоваться возврат подклассов System.Type , которые не создаются средой CLR; все типы, возвращаемые другими перегрузками GetType метода, являются типами среды выполнения.

Примечания об использовании

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

Примечание

Если вы не знакомы с концепцией имен типов с указанием сборки, см AssemblyQualifiedName . свойство.

Если не typeName является именем с указанием сборки, разрешение сборки пропускается. Неполные имена типов могут быть разрешены в контексте mscorlib.dll/System.Private.CoreLib.dll или в выполняющейся в данный момент сборке. Кроме того, можно указать сборку в typeResolver параметре. Влияние включения или пропущения имени сборки для различных типов разрешения имен отображается в виде таблицы в разделе Разрешение смешанных имен .

Общие замечания об использовании:

  • Не передавайте методы в assemblyResolver или, typeResolver если они поступают от неизвестных или ненадежных вызывающих объектов. Рекомендуется использовать только методы, предоставленные пользователями или знакомые им.

    Внимание!

    Использование методов от неизвестных или ненадежных вызывающих объектов может привести к повышению привилегий для вредоносного кода.

  • Если assemblyResolver Параметры и/или не заданы typeResolver , значение throwOnError параметра передается методам, которые выполняют разрешение по умолчанию.

  • Если throwOnError имеет значение true , этот метод выдает исключение TypeLoadException при typeResolver возвращении null , а FileNotFoundException при assemblyResolver возврате null .

  • Этот метод не перехватывает исключения, создаваемые assemblyResolver и typeResolver . Вы несете ответственность за любые исключения, вызываемые методами сопоставителя.

Разрешение сборок

assemblyResolverМетод получает AssemblyName объект, который создается путем анализа имени строковой сборки, включенной в typeName . Если не typeName содержит имя сборки, assemblyResolver не вызывается и null передается в typeResolver .

Если assemblyResolver не указан, для поиска сборки используется стандартная сборка. Если указан assemblyResolver , метод не GetType выполняет стандартную проверку. в этом случае необходимо убедиться, что assemblyResolver можно обрабатывать все передаваемые ей сборки.

assemblyResolverМетод должен возвращать значение null , если сборка не может быть разрешена. Если assemblyResolver метод возвращает значение null , typeResolver не вызывается и дальнейшая обработка не выполняется. Кроме того, если throwOnError имеет значение true , FileNotFoundException создается исключение.

Если AssemblyName передаваемое значение assemblyResolver является частичным именем, то один или несколько его частей имеют значение null . Например, если у него нет версии, Version свойство имеет значение null . Если Version свойство, CultureInfo свойство и GetPublicKeyToken метод возвращают null , то было указано только простое имя сборки. assemblyResolverМетод может использовать или игнорировать все части имени сборки.

Влияние различных параметров разрешения сборки отображается в виде таблицы в разделе разрешения смешанных имен для простых и имен типов с указанием сборки.

Разрешение типов

Если не typeName указывает имя сборки, typeResolver всегда вызывается. Если typeName указывает имя сборки, typeResolver вызывается только в том случае, если имя сборки успешно разрешено. Если assemblyResolver или стандартная сборка вернула null , typeResolver то метод не вызывается.

typeResolverМетод получает три аргумента:

  • Сборка для поиска или, null если не typeName содержит имя сборки.

  • Простое имя типа. В случае вложенного типа это самый внешний вмещающий тип. В случае универсального типа это простое имя универсального типа.

  • Логическое значение, равное, true Если регистр имен типов должен игнорироваться.

Реализация определяет способ использования этих аргументов. typeResolverМетод должен возвращать значение, null если он не может разрешить тип. Если typeResolver возвращает значение null и throwOnError равно true , эта перегрузка метода GetType создает исключение TypeLoadException .

Эффекты различных параметров разрешения типов отображаются в виде таблицы в разделе " Разрешение смешанных имен " для простых и имен типов с указанием сборки.

Разрешение вложенных типов

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

Разрешение универсальных типов

GetTypeМетод вызывается рекурсивно для разрешения универсальных типов: сначала для разрешения самого универсального типа, а затем для разрешения его аргументов типа. Если аргумент типа является универсальным, GetType вызывается рекурсивно для разрешения его аргументов типа и т. д.

Сочетание assemblyResolver и typeResolver , которое вы предоставляете, должны иметь возможность разрешения всех уровней этой рекурсии. Например, предположим, что вы предоставляете assemblyResolver , который управляет загрузкой MyAssembly . Предположим, что требуется разрешить универсальный тип Dictionary<string, MyType> ( Dictionary(Of String, MyType) в Visual Basic). Вы можете передать следующее имя универсального типа:

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

Обратите внимание, что MyType является единственным аргументом типа с указанием сборки. Имена Dictionary<TKey,TValue> String классов и не являются полными сборками. typeResolverНеобходимо иметь возможность обрабатывать либо сборку null , либо, так как она будет получать null Dictionary<TKey,TValue> и String . Это можно сделать, вызвав перегрузку GetType метода, который принимает строку, так как оба неполных имени типа находятся в mscorlib.dllили System.Private.CoreLib.dll:

Type t = Type.GetType(test,
                      (aName) => aName.Name == "MyAssembly" ?
                          Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
                      (assem, name, ignore) => assem == null ?
                          Type.GetType(name, false, ignore) :
                              assem.GetType(name, false, ignore)
                     );

assemblyResolverМетод не вызывается для типа словаря и строкового типа, так как эти имена типов не являются полными сборками.

Теперь предположим, что вместо System.String первым типом универсального аргумента является YourType , от YourAssembly :

"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"  

Так как эта сборка не является ни mscorlib.dll, ни System.Private.CoreLib.dllой, ни текущей сборкой, нельзя разрешить YourType без имени сборки. Так как assemblyResolve метод будет вызываться рекурсивно, он должен иметь возможность обрабатывать этот случай. Вместо того чтобы возвращать null сборки, отличные от MyAssembly , она теперь выполняет загрузку сборки с помощью предоставляемого AssemblyName объекта.

Type t2 = Type.GetType(test,
                       (aName) => aName.Name == "MyAssembly" ?
                           Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
                           Assembly.Load(aName),
                       (assem, name, ignore) => assem == null ?
                           Type.GetType(name, false, ignore) :
                               assem.GetType(name, false, ignore), true
                      );

Вернуться к заметкам об использовании.

Разрешение имен типов с помощью специальных символов

Некоторые символы имеют особое значение в именах с указанием сборки. Если простое имя типа содержит эти символы, то символы приводят к ошибкам синтаксического анализа, если простое имя является частью имени с указанием сборки. Чтобы избежать ошибок синтаксического анализа, необходимо экранировать специальные символы с помощью обратной косой черты, прежде чем можно будет передать полное имя сборки в GetType метод. Например, если тип имеет имя Strange]Type , escape-символ должен быть добавлен впереди квадратной скобки следующим образом: Strange\]Type .

Примечание

имена с такими специальными символами не могут быть созданы в Visual Basic или C#, но могут быть созданы с помощью языка msil или путем выпуска динамических сборок.

В следующей таблице приведены специальные символы для имен типов.

Символ Значение
, символа Разделитель для имен, соответствующих сборке.
[] (квадратные скобки) В качестве пары суффиксов указывает тип массива; в качестве пары разделителей заключите списки универсальных аргументов и имена с указанием сборки.
& (амперсанд) В качестве суффикса указывает, что тип является ссылочным типом.
* * В качестве суффикса указывает, что тип является типом указателя.
+ плюс Разделитель для вложенных типов.
\ знака Escape-символ.

Такие свойства, как AssemblyQualifiedName Возврат правильно экранированных строк. Необходимо передать правильно экранированные строки в GetType метод. В свою очередь, GetType метод передает правильно экранированные имена в typeResolver методы разрешения типов по умолчанию. Если необходимо сравнить имя с неэкранированным именем в typeResolver , необходимо удалить escape-символы.

Вернуться к заметкам об использовании.

Разрешение смешанных имен

В следующей таблице приведена сводка взаимодействий между assemblyResolver , typeResolver и разрешением имен по умолчанию для всех сочетаний имени типа и имени сборки в typeName .

Содержимое типа Name Метод сопоставителя сборок Метод распознавателя типов Результат
тип, сборка null null Эквивалентно вызову Type.GetType(String, Boolean, Boolean) перегрузки метода.
тип, сборка предоставляется null assemblyResolver Возвращает сборку или возвращает, null если не удается разрешить сборку. Если сборка разрешается, Assembly.GetType(String, Boolean, Boolean) перегрузка метода используется для загрузки типа из сборки; в противном случае не пытайтесь разрешить тип.
тип, сборка null предоставляется Эквивалентно преобразованию имени сборки в AssemblyName объект и вызову Assembly.Load(AssemblyName) перегрузки метода для получения сборки. Если сборка разрешается, она передается typeResolver ; в противном случае — typeResolver не вызывается и дальнейшая попытка разрешения этого типа не выполняется.
тип, сборка предоставляется предоставляется assemblyResolver Возвращает сборку или возвращает, null если не удается разрешить сборку. Если сборка разрешается, она передается typeResolver ; в противном случае — typeResolver не вызывается и дальнейшая попытка разрешения этого типа не выполняется.
тип NULL, указано null Эквивалентно вызову Type.GetType(String, Boolean, Boolean) перегрузки метода. Так как имя сборки не указано, поиск выполняется только mscorlib.dll/System.Private.CoreLib.dll и выполняемой в данный момент сборке. Если указан assemblyResolver , он игнорируется.
тип NULL, указано предоставляется typeResolver вызывается и null передается для сборки. typeResolver может предоставлять тип из любой сборки, включая сборки, которые она загружает для назначения. Если указан assemblyResolver , он игнорируется.
сборка NULL, указано NULL, указано Создается FileLoadException исключение, так как имя сборки анализируется так, как если бы оно было именем типа с указанием сборки. В результате получается недопустимое имя сборки.

Назад: Примечания об использовании, разрешение сборок, Разрешение типов.

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