Type.GetType Type.GetType Type.GetType Type.GetType Method

Определение

Возвращает объект Type, предоставляющий указанный тип.Gets a Type object that represents the specified type.

Перегрузки

GetType() GetType() GetType() GetType()

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

GetType(String) GetType(String) GetType(String) GetType(String)

Возвращает объект Type с указанным именем, учитывая при поиске регистр.Gets the Type with the specified name, performing a case-sensitive search.

GetType(String, Boolean) GetType(String, Boolean) GetType(String, Boolean) GetType(String, Boolean)

Возвращает объект Type с заданным именем, выполняя поиск с учетом регистра и указывая, будет ли создаваться исключение в случае невозможности найти тип.Gets the Type with the specified name, performing a case-sensitive search and specifying whether to throw an exception if the type is not found.

GetType(String, Boolean, Boolean) GetType(String, Boolean, Boolean) GetType(String, Boolean, Boolean) GetType(String, Boolean, Boolean)

Возвращает объект Type с указанным именем, позволяющий определить, будет ли создаваться исключение в случае невозможности найти тип и будет ли учитываться регистр при поиске.Gets the Type with the specified name, specifying whether to throw an exception if the type is not found and whether to perform a case-sensitive search.

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

Получает тип с указанным именем; дополнительно может предоставлять настраиваемые методы для разрешения сборки и типа.Gets the type with the specified name, optionally providing custom methods to resolve the assembly and the type.

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

Возвращает тип с заданным именем и указывает, следует ли создавать исключение в случае невозможности найти тип, а также может предоставлять настраиваемые методы для разрешения сборки и типа.Gets the type with the specified name, specifying whether to throw an exception if the type is not found, and optionally providing custom methods to resolve the assembly and the type.

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

Получает тип с заданным именем и указывает, следует ли выполнять поиск без учета регистра и следует ли создавать исключение в случае невозможности найти тип, а также может предоставлять настраиваемые методы для разрешения сборки и типа.Gets the type with the specified name, specifying whether to perform a case-sensitive search and whether to throw an exception if the type is not found, and optionally providing custom methods to resolve the assembly and the type.

GetType() GetType() GetType() GetType()

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

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

Возвраты

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

Реализации

Исключения

Инициализатор класса вызывается и создает исключение.A class initializer is invoked and throws an exception.

Дополнительно

GetType(String) GetType(String) GetType(String) GetType(String)

Возвращает объект Type с указанным именем, учитывая при поиске регистр.Gets the Type with the specified name, performing a case-sensitive search.

public:
 static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type

Параметры

typeName
String String String String

Имя искомого типа с указанием сборки.The assembly-qualified name of the type to get. См. раздел AssemblyQualifiedName.See AssemblyQualifiedName. Если тип находится в выполняемой в данный момент сборке или библиотеке Mscorlib.dll, достаточно предоставить имя типа с указанием пространства имен.If the type is in the currently executing assembly or in Mscorlib.dll, it is sufficient to supply the type name qualified by its namespace.

Возвраты

Тип с указанным именем, если он существует; в противном случае — значение null.The type with the specified name, if found; otherwise, null.

Исключения

Свойство typeName имеет значение null.typeName is null.

Инициализатор класса вызывается и создает исключение.A class initializer is invoked and throws an exception.

typeName представляет универсальный тип, имеющий тип указателя, тип ByRef или Void в качестве одного из его аргументов типа.typeName represents a generic type that has a pointer type, a ByRef type, or Void as one of its type arguments.

-или--or- typeName представляет универсальный тип, который содержит неправильное количество аргументов типа.typeName represents a generic type that has an incorrect number of type arguments.

-или--or- typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.typeName represents a generic type, and one of its type arguments does not satisfy the constraints for the corresponding type parameter.

typeName представляет массив TypedReference.typeName represents an array of TypedReference.

Вместо этого в .NET для приложений Магазина Windows или в переносимой библиотеке классов перехватите исключение базового класса IOException.In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, IOException, instead.

Сборка или одна из ее зависимостей найдена, но не может быть загружена.The assembly or one of its dependencies was found, but could not be loaded.

Сборка или одна из ее зависимостей является недопустимой.The assembly or one of its dependencies is not valid.

- или --or-

В текущий момент загружена среда CLR версии 2.0 или более поздней версии. Сборка была скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded, and the assembly was compiled with a later version.

Примеры

В следующем примере извлекается тип System.Int32 и используется объект типа для FullName вывода свойства System.Int32.The following example retrieves the type of System.Int32 and uses that type object to display the FullName property of 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.You can use the GetType method to obtain a Type object for a type in another assembly if you know its assembly-qualified name, which can be obtained from AssemblyQualifiedName. GetTypeвызывает загрузку сборки, указанной в параметре typeName.GetType causes loading of the assembly specified in typeName. Можно также загрузить сборку с Assembly.Load помощью метода, а затем Assembly.GetType использовать метод или Assembly.GetTypes для получения Type объектов.You can also load an assembly using the Assembly.Load method, and then use the Assembly.GetType or Assembly.GetTypes method to get Type objects. Если тип находится в сборке, известной для программы во время компиляции, более эффективно использовать typeof в C# или GetType оператор в Visual Basic.If a type is in an assembly known to your program at compile time, it is more efficient to use typeof in C# or the GetType operator in Visual Basic.

Примечание

Если typeName не удается найти, вызов GetType(String) метода возвращает null.If typeName cannot be found, the call to the GetType(String) method returns null. Исключение не создается.It does not throw an exception. Чтобы управлять тем, возникает ли исключение, вызовите перегрузку GetType метода, throwOnError имеющего параметр.To control whether an exception is thrown, call an overload of the GetType method that has a throwOnError parameter.

GetTypeработает только с сборками, загруженными с диска.GetType only works on assemblies loaded from disk. При вызове GetType для поиска типа, определенного в динамической сборке, определенной System.Reflection.Emit с помощью служб, может возникнуть несоответствие поведения.If you call GetType to look up a type defined in a dynamic assembly defined using the System.Reflection.Emit services, you might get inconsistent behavior. Поведение зависит от того, является ли динамическая сборка постоянной, то есть, созданной с RunAndSave помощью Save режимов System.Reflection.Emit.AssemblyBuilderAccess доступа или перечисления.The behavior depends on whether the dynamic assembly is persistent, that is, created using the RunAndSave or Save access modes of the System.Reflection.Emit.AssemblyBuilderAccess enumeration. Если динамическая сборка является постоянной и записывается на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает эту сборку и получает тип из этой сборки.If the dynamic assembly is persistent and has been written to disk before GetType is called, the loader finds the saved assembly on disk, loads that assembly, and retrieves the type from that assembly. Если сборка не была сохранена на диск при GetType вызове метода, метод возвращает nullзначение.If the assembly has not been saved to disk when GetType is called, the method returns null. GetTypeне распознает временные динамические сборки; Таким образом, GetType вызов для получения типа во временной динамической сборке возвращает. nullGetType does not understand transient dynamic assemblies; therefore, calling GetType to retrieve a type in a transient dynamic assembly returns null.

Для использования GetType в динамическом модуле Подпишитесь на AppDomain.AssemblyResolve событие и вызовите GetType его перед сохранением.To use GetType on a dynamic module, subscribe to the AppDomain.AssemblyResolve event and call GetType before saving. В противном случае в памяти будут выводится две копии сборки.Otherwise, you will get two copies of the assembly in memory.

В следующей таблице показано, какие члены базового класса возвращаются Get методами при отражении в типе.The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

Тип членаMember Type StaticStatic Не статическийNon-Static
КонструкторConstructor НетNo НетNo
ПолеField НетNo Да.Yes. Поле всегда скрывается по имени и сигнатуре.A field is always hide-by-name-and-signature.
событиеEvent НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
МетодMethod НетNo Да.Yes. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
Вложенный типNested Type НетNo НетNo
Свойство.Property НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
  1. При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах.Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. Это двоичное сравнение.This is a binary comparison.

  2. Для отражения свойства и события скрываются по имени и сигнатуре.For reflection, properties and events are hide-by-name-and-signature. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. Настраиваемые атрибуты не являются частью системы общих типов.Custom attributes are not part of the common type system.

Поиск в массивах или типах COM не выполняется, если они еще не загружены в таблицу доступных классов.Arrays or COM types are not searched for unless they have already been loaded into the table of available classes.

typeNameможет быть именем типа, дополненным его пространством имен или именем сборки, которое включает спецификацию имени сборки.typeName can be the type name qualified by its namespace or an assembly-qualified name that includes an assembly name specification. См. раздел AssemblyQualifiedName.See AssemblyQualifiedName.

Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только в сборке вызывающего объекта и mscorlib. dll в указанном порядке.If typeName includes the namespace but not the assembly name, this method searches only the calling object's assembly and Mscorlib.dll, in that order. Если typeName имеет полное имя с частичным или полным именем сборки, этот метод выполняет поиск в указанной сборке.If typeName is fully qualified with the partial or complete assembly name, this method searches in the specified assembly. Если сборка имеет строгое имя, требуется полное имя сборки.If the assembly has a strong name, a complete assembly name is required.

AssemblyQualifiedName Свойство возвращает полное имя типа, включая вложенные типы, имя сборки и аргументы универсального типа.The AssemblyQualifiedName property returns a fully qualified type name including nested types, the assembly name, and generic type arguments. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение при запросе создает искаженное имя в соответствии со следующими соглашениями.All compilers that support the common language runtime will emit the simple name of a nested class, and reflection constructs a mangled name when queried, in accordance with the following conventions.

Примечание

В .NET Framework версии 2,0 архитектура процессора добавляется в удостоверение сборки и может быть указана в качестве части строк имен сборок.In the .NET Framework version 2.0, processor architecture is added to assembly identity, and can be specified as part of assembly name strings. Например, "ProcessorArchitecture = MSIL".For example, "ProcessorArchitecture=msil". Однако он не включается в строку, возвращаемую AssemblyQualifiedName свойством, по причинам совместимости.However, it is not included in the string returned by the AssemblyQualifiedName property, for compatibility reasons. Можно также загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода.You can also load types by creating an AssemblyName object and passing it to an appropriate overload of the Load method. Затем можно использовать Assembly.GetType метод для загрузки типов из сборки.You can then use the Assembly.GetType method to load types from the assembly. См. также раздел AssemblyName.ProcessorArchitecture.See also AssemblyName.ProcessorArchitecture.

РазделительDelimiter ЗначениеMeaning
Обратная косая черта (\)Backslash (\) Escape-символ.Escape character.
Обратная кавычка (')Backtick (`) Предшествует одной или нескольким цифрам, представляющим количество параметров типа, расположенных в конце имени универсального типа.Precedes one or more digits representing the number of type parameters, located at the end of the name of a generic type.
Квадратные скобки ([])Brackets ([]) Заключите список аргументов универсального типа для сконструированного универсального типа. в списке аргументов типа заключите тип, квалифицированный сборкой.Enclose a generic type argument list, for a constructed generic type; within a type argument list, enclose an assembly-qualified type.
Запятая (,)Comma (,) Предшествует имени сборки.Precedes the Assembly name.
Точка (.)Period (.) Обозначает идентификаторы пространства имен.Denotes namespace identifiers.
Знак плюса (+)Plus sign (+) Предшествует вложенному классу.Precedes a nested class.

Например, полное имя класса может выглядеть следующим образом:For example, the fully qualified name for a class might look like this:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly  

Если пространство имен было топнамеспаце. Re+ Namespace, строка должна предшествовать знаку плюс (+) с escape-символом (\), чтобы предотвратить его интерпретацию как разделитель вложения.If the namespace were TopNamespace.Sub+Namespace, then the string would have to precede the plus sign (+) with an escape character (\) to prevent it from being interpreted as a nesting separator. Отражение выдает эту строку следующим образом:Reflection emits this string as follows:

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

"+ +" Преобразуется в\"\\+\+", а "" преобразуется в "\".A "++" becomes "\+\+", and a "\" becomes "\\".

Это полное имя можно сохранить, а затем использовать для загрузки Type.This qualified name can be persisted and later used to load the Type. Чтобы найти и загрузить Type, используйте GetType либо с именем типа, либо с полным именем типа сборки.To search for and load a Type, use GetType either with the type name only or with the assembly qualified type name. GetTypeс именем типа будет искать Type только в сборке вызывающего объекта, а затем в сборке системы.GetType with the type name only will look for the Type in the caller's assembly and then in the System assembly. GetTypeс полным именем типа сборки будет искать Type в любой сборке.GetType with the assembly qualified type name will look for the Type in any assembly.

Имена типов могут содержать конечные символы, которые обозначают дополнительные сведения о типе, например, является ли тип ссылочным типом, типом указателя или типом массива.Type names may include trailing characters that denote additional information about the type, such as whether the type is a reference type, a pointer type or an array type. Чтобы получить имя типа без этих замыкающих символов, используйте t.GetElementType().ToString(), где t — это тип.To retrieve the type name without these trailing characters, use t.GetElementType().ToString(), where t is the type.

Пробелы учитываются во всех компонентах имени типа, за исключением имени сборки.Spaces are relevant in all type name components except the assembly name. В имени сборки учитываются пробелы перед разделителем ",", но пробелы после разделителя "," игнорируются.In the assembly name, spaces before the ',' separator are relevant, but spaces after the ',' separator are ignored.

Имя универсального типа заканчивается обратной кавычкой (`), за которой следуют цифры, представляющие число аргументов универсального типа.The name of a generic type ends with a backtick (`) followed by digits representing the number of generic type arguments. Такое искажение имени позволяет компиляторам поддерживать универсальные типы с тем же именем, но с разными числами параметров типа, происходящих в одной области.The purpose of this name mangling is to allow compilers to support generic types with the same name but with different numbers of type parameters, occurring in the same scope. TupleНапример, отражение возвращает кортежand ``2 с искаженными именами 1 из универсальных методов Tuple(Of T0, T1) Tuple<T> Tuple(Of T) , в Visual Basic или и кортеж\<T0, T1> в Visual. C#For example, reflection returns the mangled names Tuple1andTuple2 from the generic methods Tuple(Of T) and Tuple(Of T0, T1) in Visual Basic, or Tuple<T> and Tuple\<T0, T1> in Visual C#.

Для универсальных типов список аргументов типа заключается в квадратные скобки, а аргументы типа разделяются запятыми.For generic types, the type argument list is enclosed in brackets, and the type arguments are separated by commas. Например, универсальный Dictionary<TKey,TValue> тип имеет два параметра типа.For example, a generic Dictionary<TKey,TValue> has two type parameters. Тип с ключами типа String может быть представлен следующим образом: MyType Dictionary<TKey,TValue>A Dictionary<TKey,TValue> of MyType with keys of type String might be represented as follows:

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

Чтобы указать тип с указанием сборки в списке аргументов типа, заключите тип сборки в квадратные скобки.To specify an assembly-qualified type within a type argument list, enclose the assembly-qualified type within brackets. В противном случае запятые, разделяющие части имени с указанием сборки, будут интерпретироваться как разделители дополнительных аргументов типа.Otherwise, the commas that separate the parts of the assembly-qualified name are interpreted as delimiting additional type arguments. Например, объект Dictionary<TKey,TValue> MyType фроммяссембли. dll с ключами типа Stringможет быть указан следующим образом:For example, a Dictionary<TKey,TValue> of MyType fromMyAssembly.dll, with keys of type String, might be specified as follows:

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

Примечание

Тип с указанием сборки может быть заключен в квадратные скобки только в том случае, если он присутствует в списке параметров типа.An assembly-qualified type can be enclosed in brackets only when it appears within a type parameter list. Правила поиска сборок для полных и неквалифицированных типов в списках параметров типов совпадают с правилами для полных и неполных неуниверсальных типов.The rules for searching assemblies for qualified and unqualified types in type parameter lists are the same as the rules for qualified and unqualified nongeneric types.

Типы, допускающие значение null, являются особым случаем универсальных типов.Nullable types are a special case of generic types. Например, значение NULL Int32 представлено строкой "System. Nullable" 1 [System. Int32] ".For example, a nullable Int32 is represented by the string "System.Nullable`1[System.Int32]".

Примечание

В C#, C++и Visual Basic можно также получить типы, допускающие значение null, с помощью операторов типа.In C#, C++, and Visual Basic you can also get nullable types using type operators. Например, тип, допускающий значение NULL Boolean , typeof(Nullable<bool>) возвращается в C#, Nullable<Boolean>::typeid by C++в и GetType(Nullable(Of Boolean)) в Visual Basic.For example, the nullable Boolean type is returned by typeof(Nullable<bool>) in C#, by Nullable<Boolean>::typeid in C++, and by GetType(Nullable(Of Boolean)) in Visual Basic.

В следующей таблице показан синтаксис, используемый с GetType для различных типов.The following table shows the syntax you use with GetType for various types.

Для полученияTo Get ИспользоватьUse
Допускает значения NULLInt32A nullable Int32 Type.GetType("System.Nullable`1[System.Int32]")
Неуправляемый указатель наMyTypeAn unmanaged pointer to MyType Type.GetType("MyType*")
Неуправляемый указатель на указатель наMyTypeAn unmanaged pointer to a pointer to MyType Type.GetType("MyType**")
Управляемый указатель или ссылка наMyTypeA managed pointer or reference to MyType Type.GetType("MyType&").Type.GetType("MyType&"). Обратите внимание, что ссылки, в отличие от указателей, ограничены одним уровнем.Note that unlike pointers, references are limited to one level.
Родительский класс и вложенный классA parent class and a nested class Type.GetType("MyParentClass+MyNestedClass")
Одномерный массив с нижней границей 0A one-dimensional array with a lower bound of 0 Type.GetType("MyType[]")
Одномерный массив с неизвестной нижней границейA one-dimensional array with an unknown lower bound Type.GetType("MyType[*]")
N-мерный массивAn n-dimensional array Запятая (,) внутри квадратных скобок, всего n – 1 раз.A comma (,) inside the brackets a total of n-1 times. Например, System.Object[,,] представляет трехмерный Object массив.For example, System.Object[,,] represents a three-dimensional Object array.
Массив одномерных массивовAn array of one-dimensional arrays Type.GetType("MyType[][]")
Прямоугольный двухмерный массив с неизвестными нижними границамиA rectangular two-dimensional array with unknown lower bounds Type.GetType("MyType[,]")
Универсальный тип с одним аргументом типаA generic type with one type argument Type.GetType("MyGenericType`1[MyType]")
Универсальный тип с двумя аргументами типаA generic type with two type arguments Type.GetType("MyGenericType`2[MyType,AnotherType]")
Универсальный тип с двумя аргументами типа с указанием сборкиA generic type with two assembly-qualified type arguments Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Квалифицированный в сборке универсальный тип с аргументом типа сборкиAn assembly-qualified generic type with an assembly-qualified type argument Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
Универсальный тип, аргумент типа которого является универсальным типом с двумя аргументами типаA generic type whose type argument is a generic type with two type arguments Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")
Дополнительно

GetType(String, Boolean) GetType(String, Boolean) GetType(String, Boolean) GetType(String, Boolean)

Возвращает объект Type с заданным именем, выполняя поиск с учетом регистра и указывая, будет ли создаваться исключение в случае невозможности найти тип.Gets the Type with the specified name, performing a case-sensitive search and specifying whether to throw an exception if the type is not found.

public:
 static Type ^ GetType(System::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 String String String

Имя искомого типа с указанием сборки.The assembly-qualified name of the type to get. См. раздел AssemblyQualifiedName.See AssemblyQualifiedName. Если тип находится в выполняемой в данный момент сборке или библиотеке Mscorlib.dll, достаточно предоставить имя типа с указанием пространства имен.If the type is in the currently executing assembly or in Mscorlib.dll, it is sufficient to supply the type name qualified by its namespace.

throwOnError
Boolean Boolean Boolean Boolean

Значение true, чтобы создать исключение, если тип не удается найти; значение false, чтобы вернуть значение null.true to throw an exception if the type cannot be found; false to return null. Кроме того, при указании значения false подавляются некоторые другие условия возникновения исключений, но не все из них.Specifying false also suppresses some other exception conditions, but not all of them. См. раздел "Исключения".See the Exceptions section.

Возвраты

Тип с указанным именем.The type with the specified name. Если тип не найден, параметр throwOnError определяет дальнейшее действие — возврат значения null или создание исключения.If the type is not found, the throwOnError parameter specifies whether null is returned or an exception is thrown. В некоторых случаях исключение создается независимо от значения параметра throwOnError.In some cases, an exception is thrown regardless of the value of throwOnError. См. раздел "Исключения".See the Exceptions section.

Исключения

Свойство typeName имеет значение null.typeName is null.

Инициализатор класса вызывается и создает исключение.A class initializer is invoked and throws an exception.

throwOnError имеет значение true, и тип не найден.throwOnError is true and the type is not found.

-или--or- throwOnError имеет значение true, и typeName содержит недопустимые знаки, например внедренные табуляции.throwOnError is true and typeName contains invalid characters, such as an embedded tab. - или --or- throwOnError имеет значение true, и typeName является пустой строкой.throwOnError is true and typeName is an empty string.

- или --or- throwOnError имеет значение true, и typeName представляет тип массива с недопустимым размером.throwOnError is true and typeName represents an array type with an invalid size.

- или --or- typeName представляет массив TypedReference.typeName represents an array of TypedReference.

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

-или--or- typeName представляет универсальный тип, имеющий тип указателя, тип ByRef или Void в качестве одного из его аргументов типа.typeName represents a generic type that has a pointer type, a ByRef type, or Void as one of its type arguments.

- или --or- typeName представляет универсальный тип, который содержит неправильное количество аргументов типа.typeName represents a generic type that has an incorrect number of type arguments.

-или--or- typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.typeName represents a generic type, and one of its type arguments does not satisfy the constraints for the corresponding type parameter.

throwOnError имеет значение true , и не удалось найти сборку либо одну из ее зависимостей.throwOnError is true and the assembly or one of its dependencies was not found.

Вместо этого в .NET для приложений Магазина Windows или в переносимой библиотеке классов перехватите исключение базового класса IOException.In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, IOException, instead.

Сборка или одна из ее зависимостей найдена, но не может быть загружена.The assembly or one of its dependencies was found, but could not be loaded.

Сборка или одна из ее зависимостей является недопустимой.The assembly or one of its dependencies is not valid.

- или --or-

В текущий момент загружена среда CLR версии 2.0 или более поздней версии. Сборка была скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded, and the assembly was compiled with a later version.

Примеры

В следующем примере извлекается тип System.Int32 и используется объект типа для FullName вывода свойства System.Int32.The following example retrieves the type of System.Int32 and uses that type object to display the FullName property of System.Int32. Если объект типа ссылается на несуществующую сборку, в этом примере создается исключение.If a type object refers to an assembly that does not exist, this example throws an exception.

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.You can use the GetType method to obtain a Type object for a type in another assembly if you know its assembly-qualified name, which can be obtained from AssemblyQualifiedName. GetTypeвызывает загрузку сборки, указанной в параметре typeName.GetType causes loading of the assembly specified in typeName. Можно также загрузить сборку с Assembly.Load помощью метода, а затем Assembly.GetType использовать метод или Assembly.GetTypes для получения Type объектов.You can also load an assembly using the Assembly.Load method, and then use the Assembly.GetType or Assembly.GetTypes method to get Type objects. Если тип находится в сборке, известной для программы во время компиляции, более эффективно использовать typeof в C# или GetType оператор в Visual Basic.If a type is in an assembly known to your program at compile time, it is more efficient to use typeof in C# or the GetType operator in Visual Basic.

GetTypeработает только с сборками, загруженными с диска.GetType only works on assemblies loaded from disk. При вызове GetType для поиска типа, определенного в динамической сборке, определенной System.Reflection.Emit с помощью служб, может возникнуть несоответствие поведения.If you call GetType to look up a type defined in a dynamic assembly defined using the System.Reflection.Emit services, you might get inconsistent behavior. Поведение зависит от того, является ли динамическая сборка постоянной, то есть, созданной с RunAndSave помощью Save режимов System.Reflection.Emit.AssemblyBuilderAccess доступа или перечисления.The behavior depends on whether the dynamic assembly is persistent, that is, created using the RunAndSave or Save access modes of the System.Reflection.Emit.AssemblyBuilderAccess enumeration. Если динамическая сборка является постоянной и записывается на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает эту сборку и получает тип из этой сборки.If the dynamic assembly is persistent and has been written to disk before GetType is called, the loader finds the saved assembly on disk, loads that assembly, and retrieves the type from that assembly. Если сборка не была сохранена на диск при GetType вызове метода, метод возвращает nullзначение.If the assembly has not been saved to disk when GetType is called, the method returns null. GetTypeне распознает временные динамические сборки; Таким образом, GetType вызов для получения типа во временной динамической сборке возвращает. nullGetType does not understand transient dynamic assemblies; therefore, calling GetType to retrieve a type in a transient dynamic assembly returns null.

Для использования GetType в динамическом модуле Подпишитесь на AppDomain.AssemblyResolve событие и вызовите GetType его перед сохранением.To use GetType on a dynamic module, subscribe to the AppDomain.AssemblyResolve event and call GetType before saving. В противном случае в памяти будут выводится две копии сборки.Otherwise, you will get two copies of the assembly in memory.

throwOnError Параметр указывает, что происходит, если тип не найден, а также подавляет некоторые другие условия исключения, как описано в разделе "исключения".The throwOnError parameter specifies what happens when the type is not found, and also suppresses certain other exception conditions, as described in the Exceptions section. Некоторые исключения создаются независимо от значения throwOnError.Some exceptions are thrown regardless of the value of throwOnError. Например, если тип найден, но не может быть загружен, создается исключение TypeLoadException , даже если throwOnError имеет значение false.For example, if the type is found but cannot be loaded, a TypeLoadException is thrown even if throwOnError is false.

В следующей таблице показано, какие члены базового класса возвращаются Get методами при отражении в типе.The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

Тип членаMember Type StaticStatic Не статическийNon-Static
КонструкторConstructor НетNo НетNo
ПолеField НетNo Да.Yes. Поле всегда скрывается по имени и сигнатуре.A field is always hide-by-name-and-signature.
событиеEvent НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
МетодMethod НетNo Да.Yes. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
Вложенный типNested Type НетNo НетNo
Свойство.Property НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
  1. При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах.Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. Это двоичное сравнение.This is a binary comparison.

  2. Для отражения свойства и события скрываются по имени и сигнатуре.For reflection, properties and events are hide-by-name-and-signature. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. Настраиваемые атрибуты не являются частью системы общих типов.Custom attributes are not part of the common type system.

Поиск в массивах или типах COM не выполняется, если они еще не загружены в таблицу доступных классов.Arrays or COM types are not searched for unless they have already been loaded into the table of available classes.

typeNameможет быть именем типа, дополненным его пространством имен или именем сборки, которое включает спецификацию имени сборки.typeName can be the type name qualified by its namespace or an assembly-qualified name that includes an assembly name specification. См. раздел AssemblyQualifiedName.See AssemblyQualifiedName.

Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только в сборке вызывающего объекта и mscorlib. dll в указанном порядке.If typeName includes the namespace but not the assembly name, this method searches only the calling object's assembly and Mscorlib.dll, in that order. Если typeName имеет полное имя с частичным или полным именем сборки, этот метод выполняет поиск в указанной сборке.If typeName is fully qualified with the partial or complete assembly name, this method searches in the specified assembly. Если сборка имеет строгое имя, требуется полное имя сборки.If the assembly has a strong name, a complete assembly name is required.

AssemblyQualifiedName Свойство возвращает полное имя типа, включая вложенные типы, имя сборки и универсальные аргументы.The AssemblyQualifiedName property returns a fully qualified type name including nested types, the assembly name, and generic arguments. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение при запросе создает искаженное имя в соответствии со следующими соглашениями.All compilers that support the common language runtime will emit the simple name of a nested class, and reflection constructs a mangled name when queried, in accordance with the following conventions.

Примечание

В .NET Framework версии 2,0 архитектура процессора добавляется в удостоверение сборки и может быть указана в качестве части строк имен сборок.In the .NET Framework version 2.0, processor architecture is added to assembly identity, and can be specified as part of assembly name strings. Например, "ProcessorArchitecture = MSIL".For example, "ProcessorArchitecture=msil". Однако он не включается в строку, возвращаемую AssemblyQualifiedName свойством, по причинам совместимости.However, it is not included in the string returned by the AssemblyQualifiedName property, for compatibility reasons. Можно также загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода.You can also load types by creating an AssemblyName object and passing it to an appropriate overload of the Load method. Затем можно использовать Assembly.GetType метод для загрузки типов из сборки.You can then use the Assembly.GetType method to load types from the assembly. См. также раздел AssemblyName.ProcessorArchitecture.See also AssemblyName.ProcessorArchitecture.

РазделительDelimiter ЗначениеMeaning
Обратная косая черта (\)Backslash (\) Escape-символ.Escape character.
Обратная кавычка (')Backtick (`) Предшествует одной или нескольким цифрам, представляющим количество параметров типа, расположенных в конце имени универсального типа.Precedes one or more digits representing the number of type parameters, located at the end of the name of a generic type.
Квадратные скобки ([])Brackets ([]) Заключите список аргументов универсального типа для сконструированного универсального типа. в списке аргументов типа заключите тип, квалифицированный сборкой.Enclose a generic type argument list, for a constructed generic type; within a type argument list, enclose an assembly-qualified type.
Запятая (,)Comma (,) Предшествует имени сборки.Precedes the Assembly name.
Точка (.)Period (.) Обозначает идентификаторы пространства имен.Denotes namespace identifiers.
Знак плюса (+)Plus sign (+) Предшествует вложенному классу.Precedes a nested class.

Например, полное имя класса может выглядеть следующим образом:For example, the fully qualified name for a class might look like this:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly  

Если пространство имен было топнамеспаце. Re+ Namespace, строка должна предшествовать знаку плюс (+) с escape-символом (\), чтобы предотвратить его интерпретацию как разделитель вложения.If the namespace were TopNamespace.Sub+Namespace, then the string would have to precede the plus sign (+) with an escape character (\) to prevent it from being interpreted as a nesting separator. Отражение выдает эту строку следующим образом:Reflection emits this string as follows:

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

"+ +" Преобразуется в\"\\+\+", а "" преобразуется в "\".A "++" becomes "\+\+", and a "\" becomes "\\".

Это полное имя можно сохранить, а затем использовать для загрузки Type.This qualified name can be persisted and later used to load the Type. Чтобы найти и загрузить Type, используйте GetType либо с именем типа, либо с полным именем типа сборки.To search for and load a Type, use GetType either with the type name only or with the assembly qualified type name. GetTypeс именем типа будет искать Type только в сборке вызывающего объекта, а затем в сборке системы.GetType with the type name only will look for the Type in the caller's assembly and then in the System assembly. GetTypeс полным именем типа сборки будет искать Type в любой сборке.GetType with the assembly qualified type name will look for the Type in any assembly.

Имена типов могут содержать конечные символы, которые обозначают дополнительные сведения о типе, например, является ли тип ссылочным типом, типом указателя или типом массива.Type names may include trailing characters that denote additional information about the type, such as whether the type is a reference type, a pointer type or an array type. Чтобы получить имя типа без этих замыкающих символов, используйте t.GetElementType().ToString(), где t — это тип.To retrieve the type name without these trailing characters, use t.GetElementType().ToString(), where t is the type.

Пробелы учитываются во всех компонентах имени типа, за исключением имени сборки.Spaces are relevant in all type name components except the assembly name. В имени сборки учитываются пробелы перед разделителем ",", но пробелы после разделителя "," игнорируются.In the assembly name, spaces before the ',' separator are relevant, but spaces after the ',' separator are ignored.

Имя универсального типа заканчивается обратной кавычкой (`), за которой следуют цифры, представляющие число аргументов универсального типа.The name of a generic type ends with a backtick (`) followed by digits representing the number of generic type arguments. Такое искажение имени позволяет компиляторам поддерживать универсальные типы с тем же именем, но с разными числами параметров типа, происходящих в одной области.The purpose of this name mangling is to allow compilers to support generic types with the same name but with different numbers of type parameters, occurring in the same scope. TupleНапример, отражение возвращает кортежand ``2 с искаженными именами 1 из универсальных методов Tuple(Of T0, T1) Tuple<T> Tuple(Of T) , в Visual Basic или и кортеж\<T0, T1> в Visual. C#For example, reflection returns the mangled names Tuple1andTuple2 from the generic methods Tuple(Of T) and Tuple(Of T0, T1) in Visual Basic, or Tuple<T> and Tuple\<T0, T1> in Visual C#.

Для универсальных типов список аргументов типа заключается в квадратные скобки, а аргументы типа разделяются запятыми.For generic types, the type argument list is enclosed in brackets, and the type arguments are separated by commas. Например, универсальный Dictionary<TKey,TValue> тип имеет два параметра типа.For example, a generic Dictionary<TKey,TValue> has two type parameters. Тип с ключами типа String может быть представлен следующим образом: MyType Dictionary<TKey,TValue>A Dictionary<TKey,TValue> of MyType with keys of type String might be represented as follows:

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

Чтобы указать тип с указанием сборки в списке аргументов типа, заключите тип сборки в квадратные скобки.To specify an assembly-qualified type within a type argument list, enclose the assembly-qualified type within brackets. В противном случае запятые, разделяющие части имени с указанием сборки, будут интерпретироваться как разделители дополнительных аргументов типа.Otherwise, the commas that separate the parts of the assembly-qualified name are interpreted as delimiting additional type arguments. Например, объект Dictionary<TKey,TValue> MyType из myAssembly. dll с ключами типа Stringможет быть указан следующим образом:For example, a Dictionary<TKey,TValue> of MyType from MyAssembly.dll, with keys of type String, might be specified as follows:

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

Примечание

Тип с указанием сборки может быть заключен в квадратные скобки только в том случае, если он присутствует в списке параметров типа.An assembly-qualified type can be enclosed in brackets only when it appears within a type parameter list. Правила поиска сборок для полных и неквалифицированных типов в списках параметров типов совпадают с правилами для полных и неполных неуниверсальных типов.The rules for searching assemblies for qualified and unqualified types in type parameter lists are the same as the rules for qualified and unqualified nongeneric types.

Типы, допускающие значение null, являются особым случаем универсальных типов.Nullable types are a special case of generic types. Например, значение NULL Int32 представлено строкой "System. Nullable" 1 [System. Int32] ".For example, a nullable Int32 is represented by the string "System.Nullable`1[System.Int32]".

Примечание

В C#, C++и Visual Basic можно также получить типы, допускающие значение null, с помощью операторов типа.In C#, C++, and Visual Basic you can also get nullable types using type operators. Например, тип, допускающий значение NULL Boolean , typeof(Nullable<bool>) возвращается в C#, Nullable<Boolean>::typeid by C++в и GetType(Nullable(Of Boolean)) в Visual Basic.For example, the nullable Boolean type is returned by typeof(Nullable<bool>) in C#, by Nullable<Boolean>::typeid in C++, and by GetType(Nullable(Of Boolean)) in Visual Basic.

В следующей таблице показан синтаксис, используемый с GetType для различных типов.The following table shows the syntax you use with GetType for various types.

Для полученияTo Get ИспользоватьUse
Допускает значения NULLInt32A nullable Int32 Type.GetType("System.Nullable`1[System.Int32]")
Неуправляемый указатель наMyTypeAn unmanaged pointer to MyType Type.GetType("MyType*")
Неуправляемый указатель на указатель наMyTypeAn unmanaged pointer to a pointer to MyType Type.GetType("MyType**")
Управляемый указатель или ссылка наMyTypeA managed pointer or reference to MyType Type.GetType("MyType&").Type.GetType("MyType&"). Обратите внимание, что ссылки, в отличие от указателей, ограничены одним уровнем.Note that unlike pointers, references are limited to one level.
Родительский класс и вложенный классA parent class and a nested class Type.GetType("MyParentClass+MyNestedClass")
Одномерный массив с нижней границей 0A one-dimensional array with a lower bound of 0 Type.GetType("MyArray[]")
Одномерный массив с неизвестной нижней границейA one-dimensional array with an unknown lower bound Type.GetType("MyArray[*]")
N-мерный массивAn n-dimensional array Запятая (,) внутри квадратных скобок, всего n – 1 раз.A comma (,) inside the brackets a total of n-1 times. Например, System.Object[,,] представляет трехмерный Object массив.For example, System.Object[,,] represents a three-dimensional Object array.
Массив двумерных массивовA two-dimensional array's array Type.GetType("MyArray[][]")
Прямоугольный двухмерный массив с неизвестными нижними границамиA rectangular two-dimensional array with unknown lower bounds Type.GetType("MyArray[,]")
Универсальный тип с одним аргументом типаA generic type with one type argument Type.GetType("MyGenericType`1[MyType]")
Универсальный тип с двумя аргументами типаA generic type with two type arguments Type.GetType("MyGenericType`2[MyType,AnotherType]")
Универсальный тип с двумя аргументами типа с указанием сборкиA generic type with two assembly-qualified type arguments Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Квалифицированный в сборке универсальный тип с аргументом типа сборкиAn assembly-qualified generic type with an assembly-qualified type argument Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
Универсальный тип, аргумент типа которого является универсальным типом с двумя аргументами типаA generic type whose type argument is a generic type with two type arguments Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")
Дополнительно

GetType(String, Boolean, Boolean) GetType(String, Boolean, Boolean) GetType(String, Boolean, Boolean) GetType(String, Boolean, Boolean)

Возвращает объект Type с указанным именем, позволяющий определить, будет ли создаваться исключение в случае невозможности найти тип и будет ли учитываться регистр при поиске.Gets the Type with the specified name, specifying whether to throw an exception if the type is not found and whether to perform a case-sensitive search.

public:
 static Type ^ GetType(System::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 String String String

Имя искомого типа с указанием сборки.The assembly-qualified name of the type to get. См. раздел AssemblyQualifiedName.See AssemblyQualifiedName. Если тип находится в выполняемой в данный момент сборке или библиотеке Mscorlib.dll, достаточно предоставить имя типа с указанием пространства имен.If the type is in the currently executing assembly or in Mscorlib.dll, it is sufficient to supply the type name qualified by its namespace.

throwOnError
Boolean Boolean Boolean Boolean

Значение true, чтобы создать исключение, если тип не удается найти; значение false, чтобы вернуть значение null.true to throw an exception if the type cannot be found; false to return null. Кроме того, при указании значения false подавляются некоторые другие условия возникновения исключений, но не все из них.Specifying false also suppresses some other exception conditions, but not all of them. См. раздел "Исключения".See the Exceptions section.

ignoreCase
Boolean Boolean Boolean Boolean

Значение true, чтобы не учитывать регистр при поиске typeName, значение false, чтобы учитывать регистр при поиске typeName.true to perform a case-insensitive search for typeName, false to perform a case-sensitive search for typeName.

Возвраты

Тип с указанным именем.The type with the specified name. Если тип не найден, параметр throwOnError определяет дальнейшее действие — возврат значения null или создание исключения.If the type is not found, the throwOnError parameter specifies whether null is returned or an exception is thrown. В некоторых случаях исключение создается независимо от значения параметра throwOnError.In some cases, an exception is thrown regardless of the value of throwOnError. См. раздел "Исключения".See the Exceptions section.

Исключения

Свойство typeName имеет значение null.typeName is null.

Инициализатор класса вызывается и создает исключение.A class initializer is invoked and throws an exception.

throwOnError имеет значение true, и тип не найден.throwOnError is true and the type is not found.

- или --or- throwOnError имеет значение true, и typeName содержит недопустимые знаки, например внедренные табуляции.throwOnError is true and typeName contains invalid characters, such as an embedded tab. - или --or- throwOnError имеет значение true, и typeName является пустой строкой.throwOnError is true and typeName is an empty string.

- или --or- throwOnError имеет значение true, и typeName представляет тип массива с недопустимым размером.throwOnError is true and typeName represents an array type with an invalid size.

-или--or- typeName представляет массив TypedReference.typeName represents an array of TypedReference.

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

- или --or- typeName представляет универсальный тип, имеющий тип указателя, тип ByRef или Void в качестве одного из его аргументов типа.typeName represents a generic type that has a pointer type, a ByRef type, or Void as one of its type arguments.

-или--or- typeName представляет универсальный тип, который содержит неправильное количество аргументов типа.typeName represents a generic type that has an incorrect number of type arguments.

- или --or- typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.typeName represents a generic type, and one of its type arguments does not satisfy the constraints for the corresponding type parameter.

throwOnError имеет значение true, и не удалось найти сборку либо одну из ее зависимостей.throwOnError is true and the assembly or one of its dependencies was not found.

Сборка или одна из ее зависимостей найдена, но не может быть загружена.The assembly or one of its dependencies was found, but could not be loaded.

Сборка или одна из ее зависимостей является недопустимой.The assembly or one of its dependencies is not valid.

- или --or-

В текущий момент загружена среда CLR версии 2.0 или более поздней версии. Сборка была скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded, and the assembly was compiled with a later version.

Комментарии

GetType Метод можно использовать для Type получения объекта для типа в другой сборке, если известно его полное имя, которое можно получить из AssemblyQualifiedName.You can use the GetType method to obtain a Type object for a type in another assembly if you know its assembly-qualified name, which can be obtained from AssemblyQualifiedName. GetTypeвызывает загрузку сборки, указанной в параметре typeName.GetType causes loading of the assembly specified in typeName. Можно также загрузить сборку с Assembly.Load помощью метода, а затем Assembly.GetType использовать метод или Assembly.GetTypes для получения Type объектов.You can also load an assembly using the Assembly.Load method, and then use the Assembly.GetType or Assembly.GetTypes method to get Type objects. Если тип находится в сборке, известной для программы во время компиляции, более эффективно использовать typeof в C# или GetType оператор в Visual Basic.If a type is in an assembly known to your program at compile time, it is more efficient to use typeof in C# or the GetType operator in Visual Basic.

GetTypeработает только с сборками, загруженными с диска.GetType only works on assemblies loaded from disk. При вызове GetType для поиска типа, определенного в динамической сборке, определенной System.Reflection.Emit с помощью служб, может возникнуть несоответствие поведения.If you call GetType to look up a type defined in a dynamic assembly defined using the System.Reflection.Emit services, you might get inconsistent behavior. Поведение зависит от того, является ли динамическая сборка постоянной, то есть, созданной с RunAndSave помощью Save режимов System.Reflection.Emit.AssemblyBuilderAccess доступа или перечисления.The behavior depends on whether the dynamic assembly is persistent, that is, created using the RunAndSave or Save access modes of the System.Reflection.Emit.AssemblyBuilderAccess enumeration. Если динамическая сборка является постоянной и записывается на диск перед GetType вызовом, загрузчик находит сохраненную сборку на диске, загружает эту сборку и получает тип из этой сборки.If the dynamic assembly is persistent and has been written to disk before GetType is called, the loader finds the saved assembly on disk, loads that assembly, and retrieves the type from that assembly. Если сборка не была сохранена на диск при GetType вызове метода, метод возвращает nullзначение.If the assembly has not been saved to disk when GetType is called, the method returns null. GetTypeне распознает временные динамические сборки; Таким образом, GetType вызов для получения типа во временной динамической сборке возвращает. nullGetType does not understand transient dynamic assemblies; therefore, calling GetType to retrieve a type in a transient dynamic assembly returns null.

Для использования GetType в динамическом модуле Подпишитесь на AppDomain.AssemblyResolve событие и вызовите GetType его перед сохранением.To use GetType on a dynamic module, subscribe to the AppDomain.AssemblyResolve event and call GetType before saving. В противном случае в памяти будут выводится две копии сборки.Otherwise, you will get two copies of the assembly in memory.

throwOnError Параметр указывает, что происходит, если тип не найден, а также подавляет некоторые другие условия исключения, как описано в разделе "исключения".The throwOnError parameter specifies what happens when the type is not found, and also suppresses certain other exception conditions, as described in the Exceptions section. Некоторые исключения создаются независимо от значения throwOnError.Some exceptions are thrown regardless of the value of throwOnError. Например, если тип найден, но не может быть загружен, создается исключение TypeLoadException , даже если throwOnError имеет значение false.For example, if the type is found but cannot be loaded, a TypeLoadException is thrown even if throwOnError is false.

В следующей таблице показано, какие члены базового класса возвращаются Get методами при отражении в типе.The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

Тип членаMember Type StaticStatic Не статическийNon-Static
КонструкторConstructor НетNo НетNo
ПолеField НетNo Да.Yes. Поле всегда скрывается по имени и сигнатуре.A field is always hide-by-name-and-signature.
событиеEvent НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
МетодMethod НетNo Да.Yes. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
Вложенный типNested Type НетNo НетNo
Свойство.Property НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
  1. При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах.Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. Это двоичное сравнение.This is a binary comparison.

  2. Для отражения свойства и события скрываются по имени и сигнатуре.For reflection, properties and events are hide-by-name-and-signature. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. Настраиваемые атрибуты не являются частью системы общих типов.Custom attributes are not part of the common type system.

Поиск в массивах или типах COM не выполняется, если они еще не загружены в таблицу доступных классов.Arrays or COM types are not searched for unless they have already been loaded into the table of available classes.

typeNameможет быть именем типа, дополненным его пространством имен или именем сборки, которое включает спецификацию имени сборки.typeName can be the type name qualified by its namespace or an assembly-qualified name that includes an assembly name specification. См. раздел AssemblyQualifiedName.See AssemblyQualifiedName.

Если typeName включает пространство имен, но не имя сборки, этот метод выполняет поиск только в сборке вызывающего объекта и mscorlib. dll в указанном порядке.If typeName includes the namespace but not the assembly name, this method searches only the calling object's assembly and Mscorlib.dll, in that order. Если typeName имеет полное имя с частичным или полным именем сборки, этот метод выполняет поиск в указанной сборке.If typeName is fully qualified with the partial or complete assembly name, this method searches in the specified assembly. Если сборка имеет строгое имя, требуется полное имя сборки.If the assembly has a strong name, a complete assembly name is required.

AssemblyQualifiedName Свойство возвращает полное имя типа, включая вложенные типы, имя сборки и аргументы типа.The AssemblyQualifiedName property returns a fully qualified type name including nested types, the assembly name, and type arguments. Все компиляторы, поддерживающие среду CLR, будут выдавать простое имя вложенного класса, а отражение при запросе создает искаженное имя в соответствии со следующими соглашениями.All compilers that support the common language runtime will emit the simple name of a nested class, and reflection constructs a mangled name when queried, in accordance with the following conventions.

Примечание

В .NET Framework версии 2,0 архитектура процессора добавляется в удостоверение сборки и может быть указана в качестве части строк имен сборок.In the .NET Framework version 2.0, processor architecture is added to assembly identity, and can be specified as part of assembly name strings. Например, "ProcessorArchitecture = MSIL".For example, "ProcessorArchitecture=msil". Однако он не включается в строку, возвращаемую AssemblyQualifiedName свойством, по причинам совместимости.However, it is not included in the string returned by the AssemblyQualifiedName property, for compatibility reasons. Можно также загрузить типы, создав AssemblyName объект и передав его в соответствующую перегрузку Load метода.You can also load types by creating an AssemblyName object and passing it to an appropriate overload of the Load method. Затем можно использовать Assembly.GetType метод для загрузки типов из сборки.You can then use the Assembly.GetType method to load types from the assembly. См. также раздел AssemblyName.ProcessorArchitecture.See also AssemblyName.ProcessorArchitecture.

РазделительDelimiter ЗначениеMeaning
Обратная косая черта (\)Backslash (\) Escape-символ.Escape character.
Обратная кавычка (')Backtick (`) Предшествует одной или нескольким цифрам, представляющим количество параметров типа, расположенных в конце имени универсального типа.Precedes one or more digits representing the number of type parameters, located at the end of the name of a generic type.
Квадратные скобки ([])Brackets ([]) Заключите список аргументов универсального типа для сконструированного универсального типа. в списке аргументов типа заключите тип, квалифицированный сборкой.Enclose a generic type argument list, for a constructed generic type; within a type argument list, enclose an assembly-qualified type.
Запятая (,)Comma (,) Предшествует имени сборки.Precedes the Assembly name.
Точка (.)Period (.) Обозначает идентификаторы пространства имен.Denotes namespace identifiers.
Знак плюса (+)Plus sign (+) Предшествует вложенному классу.Precedes a nested class.

Например, полное имя класса может выглядеть следующим образом:For example, the fully qualified name for a class might look like this:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly  

Если пространство имен было топнамеспаце. Re+ Namespace, строка должна предшествовать знаку плюс (+) с escape-символом (\), чтобы предотвратить его интерпретацию как разделитель вложения.If the namespace were TopNamespace.Sub+Namespace, then the string would have to precede the plus sign (+) with an escape character (\) to prevent it from being interpreted as a nesting separator. Отражение выдает эту строку следующим образом:Reflection emits this string as follows:

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

"+ +" Преобразуется в\"\\+\+", а "" преобразуется в "\".A "++" becomes "\+\+", and a "\" becomes "\\".

Это полное имя можно сохранить, а затем использовать для загрузки Type.This qualified name can be persisted and later used to load the Type. Чтобы найти и загрузить Type, используйте GetType либо с именем типа, либо с полным именем типа сборки.To search for and load a Type, use GetType either with the type name only or with the assembly qualified type name. GetTypeс именем типа будет искать Type только в сборке вызывающего объекта, а затем в сборке системы.GetType with the type name only will look for the Type in the caller's assembly and then in the System assembly. GetTypeс полным именем типа сборки будет искать Type в любой сборке.GetType with the assembly qualified type name will look for the Type in any assembly.

Имена типов могут содержать конечные символы, которые обозначают дополнительные сведения о типе, например, является ли тип ссылочным типом, типом указателя или типом массива.Type names may include trailing characters that denote additional information about the type, such as whether the type is a reference type, a pointer type or an array type. Чтобы получить имя типа без этих замыкающих символов, используйте t.GetElementType().ToString(), где t — это тип.To retrieve the type name without these trailing characters, use t.GetElementType().ToString(), where t is the type.

Пробелы учитываются во всех компонентах имени типа, за исключением имени сборки.Spaces are relevant in all type name components except the assembly name. В имени сборки учитываются пробелы перед разделителем ",", но пробелы после разделителя "," игнорируются.In the assembly name, spaces before the ',' separator are relevant, but spaces after the ',' separator are ignored.

Имя универсального типа заканчивается обратной кавычкой (`), за которой следуют цифры, представляющие число аргументов универсального типа.The name of a generic type ends with a backtick (`) followed by digits representing the number of generic type arguments. Такое искажение имени позволяет компиляторам поддерживать универсальные типы с тем же именем, но с разными числами параметров типа, происходящих в одной области.The purpose of this name mangling is to allow compilers to support generic types with the same name but with different numbers of type parameters, occurring in the same scope. TupleНапример, отражение возвращает кортежand ``2 с искаженными именами 1 из универсальных методов Tuple(Of T0, T1) Tuple<T> Tuple(Of T) , в Visual Basic или и кортеж\<T0, T1> в Visual. C#For example, reflection returns the mangled names Tuple1andTuple2 from the generic methods Tuple(Of T) and Tuple(Of T0, T1) in Visual Basic, or Tuple<T> and Tuple\<T0, T1> in Visual C#.

Для универсальных типов список аргументов типа заключается в квадратные скобки, а аргументы типа разделяются запятыми.For generic types, the type argument list is enclosed in brackets, and the type arguments are separated by commas. Например, универсальный Dictionary<TKey,TValue> тип имеет два параметра типа.For example, a generic Dictionary<TKey,TValue> has two type parameters. Тип с ключами типа String может быть представлен следующим образом: MyType Dictionary<TKey,TValue>A Dictionary<TKey,TValue> of MyType with keys of type String might be represented as follows:

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

Чтобы указать тип с указанием сборки в списке аргументов типа, заключите тип сборки в квадратные скобки.To specify an assembly-qualified type within a type argument list, enclose the assembly-qualified type within brackets. В противном случае запятые, разделяющие части имени с указанием сборки, будут интерпретироваться как разделители дополнительных аргументов типа.Otherwise, the commas that separate the parts of the assembly-qualified name are interpreted as delimiting additional type arguments. Например, объект Dictionary<TKey,TValue> MyType из myAssembly. dll с ключами типа Stringможет быть указан следующим образом:For example, a Dictionary<TKey,TValue> of MyType from MyAssembly.dll, with keys of type String, might be specified as follows:

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

Примечание

Тип с указанием сборки может быть заключен в квадратные скобки только в том случае, если он присутствует в списке параметров типа.An assembly-qualified type can be enclosed in brackets only when it appears within a type parameter list. Правила поиска сборок для полных и неквалифицированных типов в списках параметров типов совпадают с правилами для полных и неполных неуниверсальных типов.The rules for searching assemblies for qualified and unqualified types in type parameter lists are the same as the rules for qualified and unqualified nongeneric types.

Типы, допускающие значение null, являются особым случаем универсальных типов.Nullable types are a special case of generic types. Например, значение NULL Int32 представлено строкой "System. Nullable" 1 [System. Int32] ".For example, a nullable Int32 is represented by the string "System.Nullable`1[System.Int32]".

Примечание

В C#, C++и Visual Basic можно также получить типы, допускающие значение null, с помощью операторов типа.In C#, C++, and Visual Basic you can also get nullable types using type operators. Например, тип, допускающий значение NULL Boolean , typeof(Nullable<bool>) возвращается в C#, Nullable<Boolean>::typeid by C++в и GetType(Nullable(Of Boolean)) в Visual Basic.For example, the nullable Boolean type is returned by typeof(Nullable<bool>) in C#, by Nullable<Boolean>::typeid in C++, and by GetType(Nullable(Of Boolean)) in Visual Basic.

В следующей таблице показан синтаксис, используемый с GetType для различных типов.The following table shows the syntax you use with GetType for various types.

Для полученияTo Get ИспользоватьUse
Допускает значения NULLInt32A nullable Int32 Type.GetType("System.Nullable`1[System.Int32]")
Неуправляемый указатель наMyTypeAn unmanaged pointer to MyType Type.GetType("MyType*")
Неуправляемый указатель на указатель наMyTypeAn unmanaged pointer to a pointer to MyType Type.GetType("MyType**")
Управляемый указатель или ссылка наMyTypeA managed pointer or reference to MyType Type.GetType("MyType&").Type.GetType("MyType&"). Обратите внимание, что ссылки, в отличие от указателей, ограничены одним уровнем.Note that unlike pointers, references are limited to one level.
Родительский класс и вложенный классA parent class and a nested class Type.GetType("MyParentClass+MyNestedClass")
Одномерный массив с нижней границей 0A one-dimensional array with a lower bound of 0 Type.GetType("MyArray[]")
Одномерный массив с неизвестной нижней границейA one-dimensional array with an unknown lower bound Type.GetType("MyArray[*]")
N-мерный массивAn n-dimensional array Запятая (,) внутри квадратных скобок, всего n – 1 раз.A comma (,) inside the brackets a total of n-1 times. Например, System.Object[,,] представляет трехмерный Object массив.For example, System.Object[,,] represents a three-dimensional Object array.
Массив двумерных массивовA two-dimensional array's array Type.GetType("MyArray[][]")
Прямоугольный двухмерный массив с неизвестными нижними границамиA rectangular two-dimensional array with unknown lower bounds Type.GetType("MyArray[,]")
Универсальный тип с одним аргументом типаA generic type with one type argument Type.GetType("MyGenericType`1[MyType]")
Универсальный тип с двумя аргументами типаA generic type with two type arguments Type.GetType("MyGenericType`2[MyType,AnotherType]")
Универсальный тип с двумя аргументами типа с указанием сборкиA generic type with two assembly-qualified type arguments Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Квалифицированный в сборке универсальный тип с аргументом типа сборкиAn assembly-qualified generic type with an assembly-qualified type argument Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
Универсальный тип, аргумент типа которого является универсальным типом с двумя аргументами типаA generic type whose type argument is a generic type with two type arguments Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")
Дополнительно

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

Получает тип с указанным именем; дополнительно может предоставлять настраиваемые методы для разрешения сборки и типа.Gets the type with the specified name, optionally providing custom methods to resolve the assembly and the 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);
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 String String String

Имя получаемого типа.The name of the type to get. Если задан параметр typeResolver, имя типа может быть любой строкой, которую может разрешить объект typeResolver.If the typeResolver parameter is provided, the type name can be any string that typeResolver is capable of resolving. Если задан параметр assemblyResolver или если используется стандартное разрешение типов, параметр typeName должен быть именем с указанием сборки (см. описание свойства AssemblyQualifiedName), кроме случаев, когда этот тип находится в текущей выполняемой сборке или в библиотеке Mscorlib.dll — тогда достаточно задать имя типа с указанием пространства имен.If the assemblyResolver parameter is provided or if standard type resolution is used, typeName must be an assembly-qualified name (see AssemblyQualifiedName), unless the type is in the currently executing assembly or in Mscorlib.dll, in which case it is sufficient to supply the type name qualified by its namespace.

assemblyResolver
Func<AssemblyName,Assembly>

Метод, находящий и возвращающий сборку, заданную в параметре typeName.A method that locates and returns the assembly that is specified in typeName. Имя сборки передается методу assemblyResolver в виде объекта AssemblyName.The assembly name is passed to assemblyResolver as an AssemblyName object. Если объект typeName не содержит имя сборки, метод assemblyResolver не вызывается.If typeName does not contain the name of an assembly, assemblyResolver is not called. Если метод assemblyResolver не указан, выполняется стандартное разрешение сборки.If assemblyResolver is not supplied, standard assembly resolution is performed.

Внимание. Не передавайте методы от неизвестных или недоверенных вызывающих модулей.Caution Do not pass methods from unknown or untrusted callers. В противном случае возможно повышение привилегий для вредоносного кода.Doing so could result in elevation of privilege for malicious code. Рекомендуется использовать только методы, предоставленные пользователями или знакомые им.Use only methods that you provide or that you are familiar with.

typeResolver
Func<Assembly,String,Boolean,Type>

Метод, находящий и возвращающий тип, заданный в параметре typeName, из сборки, возвращенной методом assemblyResolver или стандартным методом разрешения сборки.A method that locates and returns the type that is specified by typeName from the assembly that is returned by assemblyResolver or by standard assembly resolution. Если сборка не предоставлена, ее может предоставить метод typeResolver.If no assembly is provided, the typeResolver method can provide one. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; этому параметру передается значение false.The method also takes a parameter that specifies whether to perform a case-insensitive search; false is passed to that parameter.

Внимание. Не передавайте методы от неизвестных или недоверенных вызывающих модулей.Caution Do not pass methods from unknown or untrusted callers.

Возвраты

Тип с указанным именем или значение null, если тип не найден.The type with the specified name, or null if the type is not found.

Исключения

Свойство typeName имеет значение null.typeName is null.

Инициализатор класса вызывается и создает исключение.A class initializer is invoked and throws an exception.

Произошла ошибка при интерпретации typeName в имя типа и имя сборки (например, если имя простого типа содержит неэкранированный специальный знак).An error occurs when typeName is parsed into a type name and an assembly name (for example, when the simple type name includes an unescaped special character).

- или --or- typeName представляет универсальный тип, имеющий тип указателя, тип ByRef или Void в качестве одного из его аргументов типа.typeName represents a generic type that has a pointer type, a ByRef type, or Void as one of its type arguments.

- или --or- typeName представляет универсальный тип, который содержит неправильное количество аргументов типа.typeName represents a generic type that has an incorrect number of type arguments.

- или --or- typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.typeName represents a generic type, and one of its type arguments does not satisfy the constraints for the corresponding type parameter.

typeName представляет массив TypedReference.typeName represents an array of TypedReference.

Сборка или одна из ее зависимостей найдена, но не может быть загружена.The assembly or one of its dependencies was found, but could not be loaded.

- или --or- typeName содержит недопустимое имя сборки.typeName contains an invalid assembly name.

- или --or- typeName является допустимым именем сборки без имени типа.typeName is a valid assembly name without a type name.

Сборка или одна из ее зависимостей является недопустимой.The assembly or one of its dependencies is not valid.

- или --or-

Сборка была скомпилирована в более поздней версии среды CLR, чем версия, загруженная в текущий момент.The assembly was compiled with a later version of the common language runtime than the version that is currently loaded.

Комментарии

Сценарии использования для этого метода и сведения о assemblyResolver параметрах и typeResolver GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) можно найти в перегрузке метода.Usage scenarios for this method and details about the assemblyResolver and typeResolver parameters can be found in the GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) method overload.

Примечание

Если typeName не удается найти, вызов GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) метода возвращает null.If typeName cannot be found, the call to the GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) method returns null. Исключение не создается.It does not throw an exception. Чтобы управлять тем, возникает ли исключение, вызовите перегрузку GetType метода, throwOnError имеющего параметр.To control whether an exception is thrown, call an overload of the GetType method that has a throwOnError parameter.

Вызов этой перегрузки метода аналогичен вызову GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) перегрузки метода false и указанию ignoreCase для throwOnError параметров и.Calling this method overload is the same as calling the GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) method overload and specifying false for the throwOnError and ignoreCase parameters.

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

Возвращает тип с заданным именем и указывает, следует ли создавать исключение в случае невозможности найти тип, а также может предоставлять настраиваемые методы для разрешения сборки и типа.Gets the type with the specified name, specifying whether to throw an exception if the type is not found, and optionally providing custom methods to resolve the assembly and the 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, 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 String String String

Имя получаемого типа.The name of the type to get. Если задан параметр typeResolver, имя типа может быть любой строкой, которую может разрешить объект typeResolver.If the typeResolver parameter is provided, the type name can be any string that typeResolver is capable of resolving. Если задан параметр assemblyResolver или если используется стандартное разрешение типов, параметр typeName должен быть именем с указанием сборки (см. описание свойства AssemblyQualifiedName), кроме случаев, когда этот тип находится в текущей выполняемой сборке или в библиотеке Mscorlib.dll — тогда достаточно задать имя типа с указанием пространства имен.If the assemblyResolver parameter is provided or if standard type resolution is used, typeName must be an assembly-qualified name (see AssemblyQualifiedName), unless the type is in the currently executing assembly or in Mscorlib.dll, in which case it is sufficient to supply the type name qualified by its namespace.

assemblyResolver
Func<AssemblyName,Assembly>

Метод, находящий и возвращающий сборку, заданную в параметре typeName.A method that locates and returns the assembly that is specified in typeName. Имя сборки передается методу assemblyResolver в виде объекта AssemblyName.The assembly name is passed to assemblyResolver as an AssemblyName object. Если объект typeName не содержит имя сборки, метод assemblyResolver не вызывается.If typeName does not contain the name of an assembly, assemblyResolver is not called. Если метод assemblyResolver не указан, выполняется стандартное разрешение сборки.If assemblyResolver is not supplied, standard assembly resolution is performed.

Внимание. Не передавайте методы от неизвестных или недоверенных вызывающих модулей.Caution Do not pass methods from unknown or untrusted callers. В противном случае возможно повышение привилегий для вредоносного кода.Doing so could result in elevation of privilege for malicious code. Рекомендуется использовать только методы, предоставленные пользователями или знакомые им.Use only methods that you provide or that you are familiar with.

typeResolver
Func<Assembly,String,Boolean,Type>

Метод, находящий и возвращающий тип, заданный в параметре typeName, из сборки, возвращенной методом assemblyResolver или стандартным методом разрешения сборки.A method that locates and returns the type that is specified by typeName from the assembly that is returned by assemblyResolver or by standard assembly resolution. Если сборка не предоставлена, этот метод может предоставить ее.If no assembly is provided, the method can provide one. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; этому параметру передается значение false.The method also takes a parameter that specifies whether to perform a case-insensitive search; false is passed to that parameter.

Внимание. Не передавайте методы от неизвестных или недоверенных вызывающих модулей.Caution Do not pass methods from unknown or untrusted callers.

throwOnError
Boolean Boolean Boolean Boolean

Значение true, чтобы создать исключение, если тип не удается найти; значение false, чтобы вернуть значение null.true to throw an exception if the type cannot be found; false to return null. Кроме того, при указании значения false подавляются некоторые другие условия возникновения исключений, но не все из них.Specifying false also suppresses some other exception conditions, but not all of them. См. раздел "Исключения".See the Exceptions section.

Возвраты

Тип с указанным именем.The type with the specified name. Если тип не найден, параметр throwOnError определяет дальнейшее действие — возврат значения null или создание исключения.If the type is not found, the throwOnError parameter specifies whether null is returned or an exception is thrown. В некоторых случаях исключение создается независимо от значения параметра throwOnError.In some cases, an exception is thrown regardless of the value of throwOnError. См. раздел "Исключения".See the Exceptions section.

Исключения

Свойство typeName имеет значение null.typeName is null.

Инициализатор класса вызывается и создает исключение.A class initializer is invoked and throws an exception.

throwOnError имеет значение true, и тип не найден.throwOnError is true and the type is not found.

- или --or- throwOnError имеет значение true, и typeName содержит недопустимые знаки, например внедренные табуляции.throwOnError is true and typeName contains invalid characters, such as an embedded tab. - или --or- throwOnError имеет значение true, и typeName является пустой строкой.throwOnError is true and typeName is an empty string.

- или --or- throwOnError имеет значение true, и typeName представляет тип массива с недопустимым размером.throwOnError is true and typeName represents an array type with an invalid size.

- или --or- typeName представляет массив TypedReference.typeName represents an array of TypedReference.

Произошла ошибка при интерпретации typeName в имя типа и имя сборки (например, если имя простого типа содержит неэкранированный специальный знак).An error occurs when typeName is parsed into a type name and an assembly name (for example, when the simple type name includes an unescaped special character).

- или --or- throwOnError имеет значение true, и typeName содержит недопустимый синтаксис (например "MyType[,*,]").throwOnError is true and typeName contains invalid syntax (for example, "MyType[,*,]").

- или --or- typeName представляет универсальный тип, имеющий тип указателя, тип ByRef или Void в качестве одного из его аргументов типа.typeName represents a generic type that has a pointer type, a ByRef type, or Void as one of its type arguments.

-или--or- typeName представляет универсальный тип, который содержит неправильное количество аргументов типа.typeName represents a generic type that has an incorrect number of type arguments.

- или --or- typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.typeName represents a generic type, and one of its type arguments does not satisfy the constraints for the corresponding type parameter.

throwOnError имеет значение true, и не удалось найти сборку либо одну из ее зависимостей.throwOnError is true and the assembly or one of its dependencies was not found.

- или --or- typeName содержит недопустимое имя сборки.typeName contains an invalid assembly name.

-или--or- typeName является допустимым именем сборки без имени типа.typeName is a valid assembly name without a type name.

Сборка или одна из ее зависимостей найдена, но не может быть загружена.The assembly or one of its dependencies was found, but could not be loaded.

Сборка или одна из ее зависимостей является недопустимой.The assembly or one of its dependencies is not valid.

- или --or-

Сборка была скомпилирована в более поздней версии среды CLR, чем версия, загруженная в текущий момент.The assembly was compiled with a later version of the common language runtime than the version that is currently loaded.

Комментарии

Сценарии использования для этого метода и сведения о assemblyResolver параметрах и typeResolver GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) можно найти в перегрузке метода.Usage scenarios for this method and details about the assemblyResolver and typeResolver parameters can be found in the GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) method overload.

Вызов этой перегрузки метода аналогичен вызову GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) перегрузки метода false и указанию для ignoreCase параметра.Calling this method overload is the same as calling the GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) method overload and specifying false for the ignoreCase parameter.

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

Получает тип с заданным именем и указывает, следует ли выполнять поиск без учета регистра и следует ли создавать исключение в случае невозможности найти тип, а также может предоставлять настраиваемые методы для разрешения сборки и типа.Gets the type with the specified name, specifying whether to perform a case-sensitive search and whether to throw an exception if the type is not found, and optionally providing custom methods to resolve the assembly and the 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, 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 String String String

Имя получаемого типа.The name of the type to get. Если задан параметр typeResolver, имя типа может быть любой строкой, которую может разрешить объект typeResolver.If the typeResolver parameter is provided, the type name can be any string that typeResolver is capable of resolving. Если задан параметр assemblyResolver или если используется стандартное разрешение типов, параметр typeName должен быть именем с указанием сборки (см. описание свойства AssemblyQualifiedName), кроме случаев, когда этот тип находится в текущей выполняемой сборке или в библиотеке Mscorlib.dll — тогда достаточно задать имя типа с указанием пространства имен.If the assemblyResolver parameter is provided or if standard type resolution is used, typeName must be an assembly-qualified name (see AssemblyQualifiedName), unless the type is in the currently executing assembly or in Mscorlib.dll, in which case it is sufficient to supply the type name qualified by its namespace.

assemblyResolver
Func<AssemblyName,Assembly>

Метод, находящий и возвращающий сборку, заданную в параметре typeName.A method that locates and returns the assembly that is specified in typeName. Имя сборки передается методу assemblyResolver в виде объекта AssemblyName.The assembly name is passed to assemblyResolver as an AssemblyName object. Если объект typeName не содержит имя сборки, метод assemblyResolver не вызывается.If typeName does not contain the name of an assembly, assemblyResolver is not called. Если метод assemblyResolver не указан, выполняется стандартное разрешение сборки.If assemblyResolver is not supplied, standard assembly resolution is performed.

Внимание. Не передавайте методы от неизвестных или недоверенных вызывающих модулей.Caution Do not pass methods from unknown or untrusted callers. В противном случае возможно повышение привилегий для вредоносного кода.Doing so could result in elevation of privilege for malicious code. Рекомендуется использовать только методы, предоставленные пользователями или знакомые им.Use only methods that you provide or that you are familiar with.

typeResolver
Func<Assembly,String,Boolean,Type>

Метод, находящий и возвращающий тип, заданный в параметре typeName, из сборки, возвращенной методом assemblyResolver или стандартным методом разрешения сборки.A method that locates and returns the type that is specified by typeName from the assembly that is returned by assemblyResolver or by standard assembly resolution. Если сборка не предоставлена, этот метод может предоставить ее.If no assembly is provided, the method can provide one. Метод также принимает параметр, указывающий, следует ли выполнять поиск без учета регистра; этому параметру передается значение ignoreCase.The method also takes a parameter that specifies whether to perform a case-insensitive search; the value of ignoreCase is passed to that parameter.

Внимание. Не передавайте методы от неизвестных или недоверенных вызывающих модулей.Caution Do not pass methods from unknown or untrusted callers.

throwOnError
Boolean Boolean Boolean Boolean

Значение true, чтобы создать исключение, если тип не удается найти; значение false, чтобы вернуть значение null.true to throw an exception if the type cannot be found; false to return null. Кроме того, при указании значения false подавляются некоторые другие условия возникновения исключений, но не все из них.Specifying false also suppresses some other exception conditions, but not all of them. См. раздел "Исключения".See the Exceptions section.

ignoreCase
Boolean Boolean Boolean Boolean

Значение true, чтобы не учитывать регистр при поиске typeName, значение false, чтобы учитывать регистр при поиске typeName.true to perform a case-insensitive search for typeName, false to perform a case-sensitive search for typeName.

Возвраты

Тип с указанным именем.The type with the specified name. Если тип не найден, параметр throwOnError определяет дальнейшее действие — возврат значения null или создание исключения.If the type is not found, the throwOnError parameter specifies whether null is returned or an exception is thrown. В некоторых случаях исключение создается независимо от значения параметра throwOnError.In some cases, an exception is thrown regardless of the value of throwOnError. См. раздел "Исключения".See the Exceptions section.

Исключения

Свойство typeName имеет значение null.typeName is null.

Инициализатор класса вызывается и создает исключение.A class initializer is invoked and throws an exception.

throwOnError имеет значение true, и тип не найден.throwOnError is true and the type is not found.

-или--or- throwOnError имеет значение true, и typeName содержит недопустимые знаки, например внедренные табуляции.throwOnError is true and typeName contains invalid characters, such as an embedded tab. -или--or- throwOnError имеет значение true, и typeName является пустой строкой.throwOnError is true and typeName is an empty string.

- или --or- throwOnError имеет значение true, и typeName представляет тип массива с недопустимым размером.throwOnError is true and typeName represents an array type with an invalid size.

- или --or- typeName представляет массив TypedReference.typeName represents an array of TypedReference.

Произошла ошибка при интерпретации typeName в имя типа и имя сборки (например, если имя простого типа содержит неэкранированный специальный знак).An error occurs when typeName is parsed into a type name and an assembly name (for example, when the simple type name includes an unescaped special character).

- или --or- throwOnError имеет значение true, и typeName содержит недопустимый синтаксис (например "MyType[,*,]").throwOnError is true and typeName contains invalid syntax (for example, "MyType[,*,]").

- или --or- typeName представляет универсальный тип, имеющий тип указателя, тип ByRef или Void в качестве одного из его аргументов типа.typeName represents a generic type that has a pointer type, a ByRef type, or Void as one of its type arguments.

- или --or- typeName представляет универсальный тип, который содержит неправильное количество аргументов типа.typeName represents a generic type that has an incorrect number of type arguments.

- или --or- typeName представляет универсальный тип, и один из его аргументов типа не удовлетворяет ограничениям для соответствующего параметра типа.typeName represents a generic type, and one of its type arguments does not satisfy the constraints for the corresponding type parameter.

throwOnError имеет значение true, и не удалось найти сборку либо одну из ее зависимостей.throwOnError is true and the assembly or one of its dependencies was not found.

Сборка или одна из ее зависимостей найдена, но не может быть загружена.The assembly or one of its dependencies was found, but could not be loaded.

- или --or- typeName содержит недопустимое имя сборки.typeName contains an invalid assembly name.

- или --or- typeName является допустимым именем сборки без имени типа.typeName is a valid assembly name without a type name.

Сборка или одна из ее зависимостей является недопустимой.The assembly or one of its dependencies is not valid.

-или--or-

Сборка была скомпилирована в более поздней версии среды CLR, чем версия, загруженная в текущий момент.The assembly was compiled with a later version of the common language runtime than the version that is currently loaded.

Комментарии

Используйте эту перегрузку метода и связанные с ней перегрузки (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) и GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)), чтобы заменить реализацию GetType метода по умолчанию более гибкими реализациями.Use this method overload and its associated overloads (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) and GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)) to replace the default implementation of the GetType method with more flexible implementations. Предоставляя собственные методы, которые разрешают имена типов и имена сборок, содержащих их, можно выполнить следующие действия.By providing your own methods that resolve type names and the names of the assemblies that contain them, you can do the following:

  • Управление версией сборки, из которой загружается тип.Control which version of an assembly a type is loaded from.

  • Укажите другое место для поиска имени типа, не включающего в себя имя сборки.Provide another place to look for a type name that does not include an assembly name.

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

  • Возвращают подклассы System.Type , которые не создаются средой CLR.Return subclasses of System.Type that are not created by the common language runtime (CLR).

Например, при сериализации с поддержкой версий этот метод позволяет выполнять поиск "наилучшего" сборки с помощью частичного имени.For example, in version-tolerant serialization this method enables you to search for a "best fit" assembly by using a partial name. Для других перегрузок GetType метода требуется имя типа с указанием сборки, которое включает номер версии.Other overloads of the GetType method require an assembly-qualified type name, which includes the version number.

Альтернативным реализациям системы типов может потребоваться возврат подклассов System.Type , которые не создаются средой CLR; все типы, возвращаемые другими перегрузками GetType метода, являются типами среды выполнения.Alternate implementations of the type system may need to return subclasses of System.Type that are not created by the CLR; all types that are returned by other overloads of the GetType method are runtime types.

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

Этот перегруженный метод и связанные с ним перегрузки анализируются typeName на имя типа и имя сборки, а затем разрешают имена.This method overload and its associated overloads parse typeName into the name of a type and the name of an assembly, and then resolve the names. Разрешение имени сборки происходит до разрешения имени типа, так как имя типа должно быть разрешено в контексте сборки.Resolution of the assembly name occurs before resolution of the type name, because a type name must be resolved in the context of an assembly.

Примечание

Если вы не знакомы с концепцией имен типов с указанием сборки, см AssemblyQualifiedName . свойство.If you are unfamiliar with the concept of assembly-qualified type names, see the AssemblyQualifiedName property.

Если typeName не является именем с указанием сборки, разрешение сборки пропускается.If typeName is not an assembly-qualified name, assembly resolution is skipped. Неполные имена типов могут быть разрешены в контексте mscorlib. dll или выполняющейся в данный момент сборки. Кроме того, можно указать сборку в typeResolver параметре.Unqualified type names can be resolved in the context of Mscorlib.dll or the currently executing assembly, or you can optionally provide an assembly in the typeResolver parameter. Влияние включения или пропущения имени сборки для различных типов разрешения имен отображается в виде таблицы в разделе Разрешение смешанных имен .The effects of including or omitting the assembly name for different kinds of name resolution are displayed as a table in the Mixed Name Resolution section.

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

  • Не передавайте методы в assemblyResolver или typeResolver , если они поступают от неизвестных или ненадежных вызывающих объектов.Do not pass methods to assemblyResolver or typeResolver if they come from unknown or untrusted callers. Рекомендуется использовать только методы, предоставленные пользователями или знакомые им.Use only methods that you provide or that you are familiar with.

    Внимание!

    Использование методов от неизвестных или ненадежных вызывающих объектов может привести к повышению привилегий для вредоносного кода.Using methods from unknown or untrusted callers could result in elevation of privilege for malicious code.

  • Если параметры assemblyResolver и/или typeResolver не заданы throwOnError , значение параметра передается методам, которые выполняют разрешение по умолчанию.If you omit the assemblyResolver and/or typeResolver parameters, the value of the throwOnError parameter is passed to the methods that perform the default resolution.

  • Если throwOnError имеет trueзначение null typeResolver null assemblyResolver , этот метод выдает исключение FileNotFoundException при возвращении, а при возврате. TypeLoadExceptionIf throwOnError is true, this method throws a TypeLoadException when typeResolver returns null, and a FileNotFoundException when assemblyResolver returns null.

  • Этот метод не перехватывает исключения, assemblyResolver создаваемые и. typeResolverThis method does not catch exceptions thrown by assemblyResolver and typeResolver. Вы несете ответственность за любые исключения, вызываемые методами сопоставителя.You are responsible for any exceptions that are thrown by the resolver methods.

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

Метод получает объект, который создается путем анализа имени строковой сборки, включенной в typeName. assemblyResolver AssemblyNameThe assemblyResolver method receives an AssemblyName object, which is produced by parsing the string assembly name that is included in typeName. Если typeName не содержит имя сборки, assemblyResolver не вызывается и null передается в typeResolver.If typeName does not contain an assembly name, assemblyResolver is not called and null is passed to typeResolver.

Если assemblyResolver не указан, для поиска сборки используется стандартная сборка.If assemblyResolver is not supplied, standard assembly probing is used to locate the assembly. Если assemblyResolver указан assemblyResolver , метод не выполняет стандартную проверку. в этом случае необходимо убедиться, что можно обрабатывать все передаваемые ей сборки. GetTypeIf assemblyResolver is provided, the GetType method does not do standard probing; in that case you must ensure that your assemblyResolver can handle all the assemblies you pass to it.

Метод должен возвращать null значение, если сборка не может быть разрешена. assemblyResolverThe assemblyResolver method should return null if the assembly cannot be resolved. Если assemblyResolver метод nullвозвращает typeResolver значение, не вызывается и дальнейшая обработка не FileNotFoundException выполняется. throwOnError кроме trueтого, если имеет значение, создается исключение.If assemblyResolver returns null, typeResolver is not called and no further processing occurs; additionally, if throwOnError is true, a FileNotFoundException is thrown.

Если передаваемое значение nullявляется частичным именем, то один или несколько его частей имеют значение. assemblyResolver AssemblyNameIf the AssemblyName that is passed to assemblyResolver is a partial name, one or more of its parts are null. Например, если у него нет версии, Version свойство имеет nullзначение.For example, if it has no version, the Version property is null. Если свойство, свойство и GetPublicKeyToken метод возвращают null, то было указано только простое имя сборки. CultureInfo VersionIf the Version property, the CultureInfo property, and the GetPublicKeyToken method all return null, then only the simple name of the assembly was supplied. assemblyResolver Метод может использовать или игнорировать все части имени сборки.The assemblyResolver method can use or ignore all parts of the assembly name.

Влияние различных параметров разрешения сборки отображается в виде таблицы в разделе разрешения смешанных имен для простых и имен типов с указанием сборки.The effects of different assembly resolution options are displayed as a table in the Mixed Name Resolution section, for simple and assembly-qualified type names.

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

Если typeName не указывает имя сборки, typeResolver всегда вызывается.If typeName does not specify an assembly name, typeResolver is always called. Если typeName указывает имя сборки, typeResolver вызывается только в том случае, если имя сборки успешно разрешено.If typeName specifies an assembly name, typeResolver is called only when the assembly name is successfully resolved. Если assemblyResolver или стандартная сборка вернула null, typeResolver то метод не вызывается.If assemblyResolver or standard assembly probing returns null, typeResolver is not called.

typeResolver Метод получает три аргумента:The typeResolver method receives three arguments:

  • Сборка для поиска или null , если typeName не содержит имя сборки.The assembly to search or null if typeName does not contain an assembly name.

  • Простое имя типа.The simple name of the type. В случае вложенного типа это самый внешний вмещающий тип.In the case of a nested type, this is the outermost containing type. В случае универсального типа это простое имя универсального типа.In the case of a generic type, this is the simple name of the generic type.

  • Логическое значение, равное true , если регистр имен типов должен игнорироваться.A Boolean value that is true if the case of type names is to be ignored.

Реализация определяет способ использования этих аргументов.The implementation determines the way these arguments are used. Метод должен возвращать null значение, если он не может разрешить тип. typeResolverThe typeResolver method should return null if it cannot resolve the type. Если typeResolver возвращает GetType TypeLoadExceptionзначение и throwOnError равноtrue, эта перегрузка метода создает исключение. nullIf typeResolver returns null and throwOnError is true, this overload of GetType throws a TypeLoadException.

Эффекты различных параметров разрешения типов отображаются в виде таблицы в разделе " Разрешение смешанных имен " для простых и имен типов с указанием сборки.The effects of different type resolution options are displayed as a table in the Mixed Name Resolution section, for simple and assembly-qualified type names.

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

Если typeName является вложенным типом, typeResolverпередается только имя самого внешнего вмещающего типа.If typeName is a nested type, only the name of the outermost containing type is passed to typeResolver. Если typeResolver возвращает этот тип GetNestedType , метод вызывается рекурсивно до тех пор, пока не будет разрешен самый внутренний вложенный тип.When typeResolver returns this type, the GetNestedType method is called recursively until the innermost nested type has been resolved.

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

GetType Метод вызывается рекурсивно для разрешения универсальных типов: Сначала разрешите сам универсальный тип, а затем разрешите его аргументы типа.The GetType is called recursively to resolve generic types: First to resolve the generic type itself, and then to resolve its type arguments. Если аргумент типа является универсальным, GetType вызывается рекурсивно для разрешения его аргументов типа и т. д.If a type argument is generic, GetType is called recursively to resolve its type arguments, and so on.

Сочетание assemblyResolver иtypeResolver , которое вы предоставляете, должны иметь возможность разрешения всех уровней этой рекурсии.The combination of assemblyResolver and typeResolver that you provide must be capable of resolving all levels of this recursion. Например, предположим, assemblyResolver что вы предоставляете, который управляет MyAssemblyзагрузкой.For example, suppose you supply an assemblyResolver that controls the loading of MyAssembly. Предположим, что требуется разрешить универсальный тип Dictionary<string, MyType> (Dictionary(Of String, MyType) в Visual Basic).Suppose you want to resolve the generic type Dictionary<string, MyType> (Dictionary(Of String, MyType) in Visual Basic). Вы можете передать следующее имя универсального типа:You might pass the following generic type name:

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

Обратите MyType внимание, что является единственным аргументом типа с указанием сборки.Notice that MyType is the only assembly-qualified type argument. Имена Dictionary<TKey,TValue> классов и String не являются полными сборками.The names of the Dictionary<TKey,TValue> and String classes are not assembly-qualified. null null String Dictionary<TKey,TValue> Необходимо иметь возможность обрабатывать либо сборку, либо, так как она будет получать и. typeResolverYour typeResolver must be able handle either an assembly or null, because it will receive null for Dictionary<TKey,TValue> and String. Это можно сделать, вызвав перегрузку GetType метода, который принимает строку, так как оба неполных имени типа находятся в mscorlib. dll:It can handle that case by calling an overload of the GetType method that takes a string, because both of the unqualified type names are in Mscorlib.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 Метод не вызывается для типа словаря и строкового типа, так как эти имена типов не являются полными сборками.The assemblyResolver method is not called for the dictionary type and the string type, because those type names are not assembly-qualified.

Теперь предположим, что вместо System.Stringпервым типом универсального аргумента является YourType, от YourAssembly:Now suppose that instead of System.String, the first generic argument type is YourType, from YourAssembly:

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

Так как эта сборка не является ни mscorlib. dll, ни выполняющейся сборкой, невозможно YourType разрешить без имени сборки.Because this assembly is neither Mscorlib.dll nor the currently executing assembly, you cannot resolve YourType without an assembly-qualified name. Так как метод будет вызываться рекурсивно, он должен иметь возможность обрабатывать этот случай. assemblyResolveBecause your assemblyResolve will be called recursively, it must be able to handle this case. Вместо того чтобы null возвращать сборки, MyAssemblyотличные от, она теперь выполняет загрузку сборки с помощью AssemblyName предоставляемого объекта.Instead of returning null for assemblies other than MyAssembly, it now performs an assembly load using the supplied AssemblyName object.

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
                      ); 

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

Разрешение имен типов с помощью специальных символовResolving Type Names with Special Characters

Некоторые символы имеют особое значение в именах с указанием сборки.Certain characters have special meanings in assembly-qualified names. Если простое имя типа содержит эти символы, то символы приводят к ошибкам синтаксического анализа, если простое имя является частью имени с указанием сборки.If a simple type name contains these characters, the characters cause parsing errors when the simple name is part of an assembly-qualified name. Чтобы избежать ошибок синтаксического анализа, необходимо экранировать специальные символы с помощью обратной косой черты, прежде чем можно будет передать полное имя GetType сборки в метод.To avoid the parsing errors, you must escape the special characters with a backslash before you can pass the assembly-qualified name to the GetType method. Например, если тип имеет имя Strange]Type, escape-символ должен быть добавлен впереди квадратной скобки следующим образом:. Strange\]TypeFor example, if a type is named Strange]Type, the escape character must be added ahead of the square bracket as follows: Strange\]Type.

Примечание

Имена с такими специальными символами не могут быть созданы C#в Visual Basic или, но могут быть созданы с помощью языка MSIL или путем выпуска динамических сборок.Names with such special characters cannot be created in Visual Basic or C#, but can be created by using Microsoft intermediate language (MSIL) or by emitting dynamic assemblies.

В следующей таблице приведены специальные символы для имен типов.The following table shows the special characters for type names.

ЗнакCharacter ЗначениеMeaning
,символа, (comma) Разделитель для имен, соответствующих сборке.Delimiter for assembly-qualified names.
[](квадратные скобки)[] (square brackets) В качестве пары суффиксов указывает тип массива; в качестве пары разделителей заключите списки универсальных аргументов и имена с указанием сборки.As a suffix pair, indicates an array type; as a delimiter pair, encloses generic argument lists and assembly-qualified names.
&знаки& (ampersand) В качестве суффикса указывает, что тип является ссылочным типом.As a suffix, indicates that a type is a reference type.
*** (asterisk) В качестве суффикса указывает, что тип является типом указателя.As a suffix, indicates that a type is a pointer type.
+плюс+ (plus) Разделитель для вложенных типов.Delimiter for nested types.
\знака\ (backslash) Escape-символ.Escape character.

Такие свойства, AssemblyQualifiedName как возврат правильно экранированных строк.Properties such as AssemblyQualifiedName return correctly escaped strings. Необходимо передать правильно экранированные строки в GetType метод.You must pass correctly escaped strings to the GetType method. В свою очередь, GetType метод передает правильно экранированные имена typeResolver в методы разрешения типов по умолчанию.In turn, the GetType method passes correctly escaped names to typeResolver and to the default type resolution methods. Если необходимо сравнить имя с неэкранированным именем в typeResolver, необходимо удалить escape-символы.If you need to compare a name to an unescaped name in typeResolver, you must remove the escape characters.

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

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

В следующей таблице приведена сводка взаимодействий assemblyResolverмежду typeResolver, и разрешением имен по умолчанию для всех сочетаний имени типа и имени сборки typeNameв.The following table summarizes the interactions between assemblyResolver, typeResolver, and default name resolution, for all combinations of type name and assembly name in typeName:

Содержимое типа NameContents of type name Метод сопоставителя сборокAssembly resolver method Метод распознавателя типовType resolver method РезультатResult
тип, сборкаtype, assembly nullnull nullnull Эквивалентно вызову Type.GetType(String, Boolean, Boolean) перегрузки метода.Equivalent to calling the Type.GetType(String, Boolean, Boolean) method overload.
тип, сборкаtype, assembly предоставляетсяprovided nullnull assemblyResolverВозвращает сборку или возвращает null , если не удается разрешить сборку.assemblyResolver returns the assembly or returns null if it cannot resolve the assembly. Если сборка разрешается, Assembly.GetType(String, Boolean, Boolean) перегрузка метода используется для загрузки типа из сборки; в противном случае не пытайтесь разрешить тип.If the assembly is resolved, the Assembly.GetType(String, Boolean, Boolean) method overload is used to load the type from the assembly; otherwise, there is no attempt to resolve the type.
тип, сборкаtype, assembly nullnull предоставляетсяprovided Эквивалентно преобразованию имени сборки в AssemblyName объект и Assembly.Load(AssemblyName) вызову перегрузки метода для получения сборки.Equivalent to converting the assembly name to an AssemblyName object and calling the Assembly.Load(AssemblyName) method overload to get the assembly. Если сборка разрешается, она передается typeResolver; typeResolver в противном случае — не вызывается и дальнейшая попытка разрешения этого типа не выполняется.If the assembly is resolved, it is passed to typeResolver; otherwise, typeResolver is not called and there is no further attempt to resolve the type.
тип, сборкаtype, assembly предоставляетсяprovided предоставляетсяprovided assemblyResolverВозвращает сборку или возвращает null , если не удается разрешить сборку.assemblyResolver returns the assembly or returns null if it cannot resolve the assembly. Если сборка разрешается, она передается typeResolver; typeResolver в противном случае — не вызывается и дальнейшая попытка разрешения этого типа не выполняется.If the assembly is resolved, it is passed to typeResolver; otherwise, typeResolver is not called and there is no further attempt to resolve the type.
typetype NULL, указаноnull, provided nullnull Эквивалентно вызову Type.GetType(String, Boolean, Boolean) перегрузки метода.Equivalent to calling the Type.GetType(String, Boolean, Boolean) method overload. Так как имя сборки не указано, поиск выполняется только в mscorlib. dll и в выполняющейся сборке.Because the assembly name is not provided, only Mscorlib.dll and the currently executing assembly are searched. Если assemblyResolver указан, он игнорируется.If assemblyResolver is provided, it is ignored.
typetype NULL, указаноnull, provided предоставляетсяprovided typeResolverвызывается и null передается для сборки.typeResolver is called, and null is passed for the assembly. typeResolverможет предоставлять тип из любой сборки, включая сборки, которые она загружает для назначения.typeResolver can provide a type from any assembly, including assemblies it loads for the purpose. Если assemblyResolver указан, он игнорируется.If assemblyResolver is provided, it is ignored.
сборкаassembly NULL, указаноnull, provided NULL, указаноnull, provided FileLoadException Создается исключение, так как имя сборки анализируется так, как если бы оно было именем типа с указанием сборки.A FileLoadException is thrown, because the assembly name is parsed as if it were an assembly-qualified type name. В результате получается недопустимое имя сборки.This results in an invalid assembly name.

Вернуться к: Примечания об использовании, разрешение сборок, Разрешение типов.Back to: Usage Notes, Resolving Assemblies, Resolving Types.

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