Type.GetType 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得代表指定類型的 Type 物件。
多載
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
取得具有指定名稱的類型,指定是否執行區分大小寫的搜尋以及找不到類型時是否擲回例外狀況,同時選擇性提供自訂方法來解析組件和類型。 |
GetType() |
取得目前的 Type。 |
GetType(String) |
取得具有指定名稱的 Type,執行區分大小寫的搜尋。 |
GetType(String, Boolean) |
取得具有指定名稱的 Type,執行區分大小寫的搜尋,並設定找不到該類型時,是否應擲回例外狀況。 |
GetType(String, Boolean, Boolean) |
取得具有指定名稱的 Type,指定找不到類型時是否要擲回例外狀況,以及是否要執行區分大小寫的搜尋。 |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
取得具有指定名稱的類型,並選擇性提供自訂方法來解析組件和類型。 |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
取得具有指定名稱的類型,指定找不到類型時是否擲回例外狀況,同時選擇性提供自訂方法來解析組件和類型。 |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
取得具有指定名稱的類型,指定是否執行區分大小寫的搜尋以及找不到類型時是否擲回例外狀況,同時選擇性提供自訂方法來解析組件和類型。
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
參數
- typeName
- String
要取得之類型的名稱。 如果已提供 typeResolver
參數,則類型名稱可為 typeResolver
能解析的任何字串。
assemblyResolver
如果提供 參數,或是使用標準型別解析,typeName
必須是元件限定名稱, (請參閱 AssemblyQualifiedName) ,除非類型位於目前執行的元件或 mscorlib.dll/System.Private.CoreLib.dll 中,在此情況下,它足以提供其命名空間限定的類型名稱。
- assemblyResolver
- Func<AssemblyName,Assembly>
方法,會找出並傳回 typeName
中指定的組件。 組件名稱做為 assemblyResolver
物件傳遞至 AssemblyName。 如果 typeName
不包含組件名稱,則不會呼叫 assemblyResolver
。 如果未提供 assemblyResolver
,則會執行標準組件解析。
注意:請勿從未知或不受信任的呼叫端傳遞方法。 這樣做可能會提高惡意程式碼的權限。 只使用您所提供或熟悉的方法。
從 typeName
或標準組件解析傳回的組件,找出並傳回由 assemblyResolver
指定之類型的方法。 如果未提供任何組件,方法會提供一個組件。 這個方法也使用參數來指定是否執行不區分大小寫的搜尋。會傳遞 ignoreCase
的值至該參數。
注意:請勿從未知或不受信任的呼叫端傳遞方法。
- throwOnError
- Boolean
true
表示找不到該類型時擲回例外狀況,而 false
則表示傳回 null
。 指定 false
也會隱藏其他某些例外狀況條件,但並不是全部。 請參閱<例外狀況>一節。
- ignoreCase
- Boolean
為 typeName
執行不區分大小寫的搜尋,則為 true
;為 typeName
執行區分大小寫的搜尋,則為 false
。
傳回
具有指定名稱的類型。 如果找不到該類型,throwOnError
參數會指定是要傳回 null
或是擲回例外狀況。 在某些情況下,不論 throwOnError
的值為何,都會擲回例外狀況。 請參閱<例外狀況>一節。
例外狀況
typeName
為 null
。
叫用類別初始設定式並擲回例外狀況。
throwOnError
為 true
,而且找不到類型。
-或-
throwOnError
為 true
,而且 typeName
包含無效字元,例如內嵌的定位字元。
-或-
throwOnError
為 true
,而且 typeName
是空字串。
-或-
throwOnError
為 true
,而且 typeName
代表大小無效的陣列類型。
-或-
typeName
表示 TypedReference 的陣列。
將 typeName
剖析成類型名稱和組件名稱 (例如簡單類型名稱包含未逸出的特殊字元) 時發生錯誤。
-或-
throwOnError
為 true
,且 typeName
包含無效的語法 (例如 "MyType[,*,]")。
-或-
typeName
代表的泛型類型以指標類型、 ByRef
類型或 Void 做為其中一個類型引數。
-或-
typeName
代表的泛型類型具有不正確的類型引數數目。
-或-
typeName
代表泛型類型,其中一個類型引數不符合對應類型參數的條件約束。
throwOnError
為 true
,且找不到此組件或它的一個相依項目。
元件或其其中一個相依性不是目前載入運行時間的有效元件。
備註
如需此 API 的詳細資訊,請參閱 Type.GetType 的補充 API 備註。
適用於
GetType()
GetType(String)
取得具有指定名稱的 Type,執行區分大小寫的搜尋。
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
public static Type? GetType (string typeName);
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
參數
- typeName
- String
要取得之類型的組件限定名稱。 請參閱 AssemblyQualifiedName。 如果類型位於目前正在執行的元件或 mscorlib.dll/System.Private.CoreLib.dll 中,就足以提供其命名空間限定的類型名稱。
傳回
具有指定名稱的類型 (如有找到),否則為 null
。
例外狀況
typeName
為 null
。
叫用類別初始設定式並擲回例外狀況。
typeName
代表泛型型別,其具有指標型別、ByRef
型別或 Void 做為其中一個型別引數。
-或-
typeName
代表的泛型類型具有不正確的類型引數數目。
-或-
typeName
代表泛型類型,其中一個類型引數不符合對應類型參數的條件約束。
typeName
表示無效的類型,例如的 TypedReference陣列。
找到組件或其相依性的其中一個,但無法載入。
注意:在 適用於 Windows 市集應用程式的 .NET 或 可攜式類別庫中,改為攔截基類例外狀況 IOException。
元件對目前載入的運行時間無效。
範例
下列範例會擷取的 System.Int32
型別,並使用該類型對象來顯示 FullName 的 System.Int32
屬性。
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
備註
如果您知道其元件限定名稱,則可以使用 GetType 方法來取得另一個 Type 元件中類型的物件,這可從取得 AssemblyQualifiedName。
GetType 會導致載入 中指定的 typeName
元件。 您也可以使用 Assembly.Load 方法載入元件,然後使用 Assembly.GetType 或 Assembly.GetTypes 方法來取得 Type 物件。 如果類型是在編譯時期程式已知的元件中,在 C# 或 GetType
Visual Basic 中的 運算符中使用typeof
會更有效率。
注意
如果 typeName
找不到 ,則呼叫 方法會 GetType(String) 傳 null
回 。 它不會擲回例外狀況。 若要控制是否擲回例外狀況,請呼叫具有 throwOnError
參數之方法的多GetType載。
GetType 僅適用於從磁碟載入的元件。 如果您呼叫 GetType 來查閱使用 System.Reflection.Emit 服務定義之動態元件中定義的類型,可能會產生不一致的行為。 行為取決於動態元件是持續性的,也就是使用 RunAndSave
列舉的 System.Reflection.Emit.AssemblyBuilderAccess 或 Save
存取模式所建立。 如果動態元件是持續性的,而且在呼叫之前 GetType
已寫入磁碟,載入磁碟,載入磁碟上尋找已儲存的元件、載入該元件,並從該元件擷取類型。 如果呼叫 時 GetType
元件尚未儲存到磁碟,則方法會傳 null
回 。
GetType
不瞭解暫時性動態元件;因此,呼叫 GetType
以擷取暫時性動態元件中的類型會傳 null
回 。
若要在 GetType
動態模組上使用,請在儲存之前訂閱 AppDomain.AssemblyResolve 事件並呼叫 GetType
。 否則,您會在記憶體中取得兩份元件的複本。
下表顯示當反映類型時,方法會 Get
傳回的基類成員。
成員類型 | Static | 非靜態 |
---|---|---|
建構函式 | 否 | 否 |
欄位 | 否 | 可以。 欄位一律會依名稱與簽章隱藏。 |
事件 | 不適用 | 常見的型別系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為 hide-by-name-and-signature。 請參閱下面的附註 2。 |
方法 | 否 | 可以。 (虛擬和非虛擬) 的方法可以是依名稱隱藏或依名稱隱藏和簽章。 |
巢狀類型 | 否 | 否 |
屬性 | 不適用 | 常見的型別系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為 hide-by-name-and-signature。 請參閱下面的附註 2。 |
依名稱與簽章隱藏會考慮簽章的所有部分,包括自定義修飾詞、傳回類型、參數類型、sentinels 和 Unmanaged 呼叫慣例。 這是二進位比較。
針對反映,屬性和事件會依名稱與簽章隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,衍生類別屬性會隱藏基類屬性,而且您將無法在基類上存取 setter。
自訂屬性不是通用類型系統的一部分。
除非陣列或 COM 類型已經載入到可用類別的數據表中,否則不會搜尋這些陣列或 COM 類型。
typeName
可以是依其命名空間限定的類型名稱,或是包含元件名稱規格的元件限定名稱。 請參閱 AssemblyQualifiedName。
如果 typeName
包含命名空間,但不包含元件名稱,這個方法只會依該順序搜尋呼叫物件的元件,並 mscorlib.dll/System.Private.CoreLib.dll。 如果 typeName 具有部分或完整元件名稱的完整名稱,這個方法會在指定的元件中搜尋。 如果元件具有強名稱,則需要完整的元件名稱。
屬性 AssemblyQualifiedName 會傳回完整的型別名稱,包括巢狀類型、元件名稱和泛型型別自變數。 所有支援 Common Language Runtime 的編譯程式都會發出巢狀類別的簡單名稱,而反映會根據下列慣例,在查詢時建構管理的名稱。
注意
處理器架構是元件識別的一部分,而且可以指定為元件名稱字串的一部分。 例如,“ProcessorArchitecture=msil”。 不過,基於相容性考慮,它不會包含在 屬性所傳回的 AssemblyQualifiedName 字串中。 您也可以藉由建立 AssemblyName 物件,並將它傳遞至方法的適當多載 Load ,以載入類型。 然後 Assembly.GetType ,您可以使用 方法從元件載入類型。 另請參閱 AssemblyName.ProcessorArchitecture。
分隔符號 | 意義 |
---|---|
反斜線 (\) | 逸出字元。 |
倒引號 (') | 在代表類型參數數目的一或多個數位之前,位於泛型類型名稱的結尾。 |
方括弧 ([]) | 針對建構的泛型型別,括住泛型型別自變數清單;在類型自變數清單中,括住元件限定型別。 |
逗號 (,) | 在元件名稱前面。 |
Period (.) | 表示命名空間標識碼。 |
加號 (+) | 在巢狀類別之前。 |
例如,類別的完整名稱可能如下所示:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
如果命名空間是 TopNamespace.Sub+Namespace,則字串必須在加號 (+) 前面加上逸出字元 (\) ,以防止其解譯為巢狀分隔符。 反映會發出此字串,如下所示:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
“++” 會變成 “\+\+”,而 “\” 會變成 “\\”。
這個限定名稱可以儲存,稍後用來載入 Type。 若要搜尋並載入 Type,請只搭配 GetType 類型名稱或元件限定型別名稱使用。 GetType 型別名稱只會在 Type 呼叫端的元件中尋找 ,然後在 [系統] 元件中尋找 。 GetType 具有元件限定型別名稱的 ,將會在任何元件中尋找 Type 。
類型名稱可能包含代表類型其他資訊的尾端字元,例如類型是否為引用類型、指標類型或數位類型。 若要擷取不含這些尾端字元的類型名稱,請使用 t.GetElementType().ToString()
,其中 t
是類型。
除了元件名稱以外,所有類型名稱元件都與空格相關。 在元件名稱中,『,』 分隔符之前的空格是相關的,但在 『,『 分隔符後面的空格會被忽略。
泛型類型的名稱結尾為倒引號 (') 後面接著代表泛型類型自變數數目的數位。 此名稱管理的目的是允許編譯程序支援具有相同名稱但具有不同類型參數數目的泛型類型,並發生在相同的範圍中。 例如,反映會從泛型方法和 Tuple(Of T)
Visual Basic 或 Tuple<T>
Visual C# 中傳回受管理的名稱Tuple`2
Tuple`1
和 Tuple<T0, T1>
。Tuple(Of T0, T1)
針對泛型類型,類型自變數清單會以方括弧括住,而且類型自變數會以逗號分隔。 例如,泛型 Dictionary<TKey,TValue> 有兩個型別參數。
Dictionary<TKey,TValue>
MyType
具有 型String別索引鍵的 ,可能以下列方式表示:
System.Collections.Generic.Dictionary`2[System.String,MyType]
若要在類型自變數清單中指定元件限定型別,請在方括弧內括住元件限定型別。 否則,分隔元件限定名稱部分的逗號會解譯為分隔其他類型自變數。 例如,Dictionary<TKey,TValue>具有 型String別索引鍵的 MyType
fromMyAssembly.dll ,可能會指定如下:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
注意
只有在元件限定類型出現在類型參數清單中時,才能以方括弧括住。 在類型參數清單中搜尋限定型別和未限定型別之元件的規則,與限定和非限定非泛型型別的規則相同。
可為 Null 的型別是泛型型別的特殊案例。 例如,可為 Null 的 Int32 字串為 “System.Nullable'1[System.Int32]”。
注意
在 C#、C++ 和 Visual Basic 中,您也可以使用類型運算符來取得可為 Null 的類型。 例如,在 C# 中、Nullable<Boolean>::typeid
在 C++ 中,以及在 GetType(Nullable(Of Boolean))
Visual Basic 中傳回typeof(Nullable<bool>)
可為 Boolean Null 的型別。
下表顯示您用於 GetType
各種類型的語法。
取得 | 使用 |
---|---|
可為 Null 的 Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Unmanaged 指標 MyType |
Type.GetType("MyType*") |
指向指標的 Unmanaged 指標 MyType |
Type.GetType("MyType**") |
的Managed指標或參考 MyType |
Type.GetType("MyType&") . 請注意,參考與指標不同,僅限一個層級。 |
父類別和巢狀類別 | Type.GetType("MyParentClass+MyNestedClass") |
下限為 0 的一維陣列 | Type.GetType("MyType[]") |
具有未知下限的一維陣列 | Type.GetType("MyType[*]") |
n 維陣組 | 括弧內的逗號 (,) 總計為 n-1 次。 例如, System.Object[,,] 表示三維 Object 陣列。 |
一維數位的陣列 | Type.GetType("MyType[][]") |
具有未知下限的矩形二維陣列 | Type.GetType("MyType[,]") |
具有一個型別自變數的泛型型別 | Type.GetType("MyGenericType`1[MyType]") |
具有兩個型別自變數的泛型型別 | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
具有兩個元件限定型別自變數的泛型型別 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
具有元件限定型別自變數的元件限定泛型型別 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
泛型型別,其型別自變數是具有兩個型別自變數的泛型型別 | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
另請參閱
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- 指定完整的類型名稱
適用於
GetType(String, Boolean)
取得具有指定名稱的 Type,執行區分大小寫的搜尋,並設定找不到該類型時,是否應擲回例外狀況。
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
參數
- typeName
- String
要取得之類型的組件限定名稱。 請參閱 AssemblyQualifiedName。 如果類型位於目前執行的元件或 mscorlib.dll/System.Private.CoreLib.dll 中,就足以提供其命名空間限定的類型名稱。
- throwOnError
- Boolean
true
表示找不到該類型時擲回例外狀況,而 false
則表示傳回 null
。 指定 false
也會隱藏其他某些例外狀況條件,但並不是全部。 請參閱<例外狀況>一節。
傳回
具有指定名稱的類型。 如果找不到該類型,throwOnError
參數會指定是要傳回 null
或是擲回例外狀況。 在某些情況下,不論 throwOnError
的值為何,都會擲回例外狀況。 請參閱<例外狀況>一節。
例外狀況
typeName
為 null
。
叫用類別初始設定式並擲回例外狀況。
throwOnError
為 true
,而且找不到類型。
-或-
throwOnError
為 true
,而且 typeName
包含無效字元,例如內嵌的定位字元。
-或-
throwOnError
為 true
,而且 typeName
是空字串。
-或-
throwOnError
為 true
,而且 typeName
代表大小無效的陣列類型。
-或-
typeName
代表 TypedReference 的陣列。
throwOnError
為 true
,而且 typeName
包含無效的語法。 例如,"MyType[,*,]"。
-或-
typeName
代表的泛型類型以指標類型、 ByRef
類型或 Void 做為其中一個類型引數。
-或-
typeName
代表的泛型類型具有不正確的類型引數數目。
-或-
typeName
代表泛型類型,其中一個類型引數不符合對應類型參數的條件約束。
throwOnError
為 true
,且找不到此組件或它的一個相依項目。
找到組件或其相依性的其中一個,但無法載入。
注意:在 適用於 Windows 市集應用程式的 .NET 或 可攜式類別庫中,改為攔截基類例外狀況 IOException。
元件或其其中一個相依性對目前載入的運行時間無效。
範例
下列範例會擷取的 System.Int32
型別,並使用該型別對象來顯示 FullName 的 System.Int32
屬性。 如果類型對象參考不存在的元件,這個範例會擲回例外狀況。
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
備註
如果您知道其元件限定名稱,則可以使用 GetType 方法來取得 Type 另一個元件中類型的物件,這可從取得 AssemblyQualifiedName。
GetType 會導致載入 中指定的 typeName
元件。 您也可以使用 Assembly.Load 方法來載入元件,然後使用 Assembly.GetType 或 Assembly.GetTypes 方法來取得 Type 物件。 如果在編譯時期,程式已知的元件中有類型,在 C# 中使用 或 GetType
Visual Basic 中的 運算子會更有效率typeof
。
GetType
僅適用於從磁碟載入的元件。 如果您呼叫 GetType
來查閱使用 System.Reflection.Emit 服務定義之動態元件中定義的類型,您可能會得到不一致的行為。 此行為取決於動態元件是否持續存在,也就是使用 RunAndSave
列舉的 System.Reflection.Emit.AssemblyBuilderAccess 或 Save
存取模式所建立。 如果動態元件是持續性的,而且已在呼叫之前 GetType
寫入磁碟,載入磁碟,載入磁碟上尋找已儲存的元件、載入該元件,並從該元件擷取類型。 如果在呼叫 時 GetType
,元件尚未儲存至磁碟,此方法會傳 null
回 。
GetType
不瞭解暫時性動態元件;因此,呼叫 GetType
以擷取暫時性動態元件中的類型會傳 null
回 。
若要在 GetType
動態模組上使用,請在儲存之前訂閱 AppDomain.AssemblyResolve 事件並呼叫 GetType
。 否則,您會在記憶體中取得兩份元件的複本。
參數 throwOnError
會指定找不到類型時會發生什麼情況,也會隱藏某些其他例外狀況狀況,如例外狀況一節中所述。 不論的值 throwOnError
為何,都會擲回某些例外狀況。 例如,如果找到型別但無法載入,即使 為 false
,TypeLoadException也會throwOnError
擲回 。
下表顯示當反映類型時,方法會 Get
傳回的基類成員。
成員類型 | Static | 非靜態 |
---|---|---|
建構函式 | 否 | 否 |
欄位 | 否 | 可以。 欄位一律會依名稱與簽章隱藏。 |
事件 | 不適用 | 常見的型別系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為 hide-by-name-and-signature。 請參閱下面的附註 2。 |
方法 | 否 | 可以。 (虛擬和非虛擬) 的方法可以是依名稱隱藏或依名稱隱藏和簽章。 |
巢狀類型 | 否 | 否 |
屬性 | 不適用 | 常見的型別系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為 hide-by-name-and-signature。 請參閱下面的附註 2。 |
依名稱與簽章隱藏會考慮簽章的所有部分,包括自定義修飾詞、傳回類型、參數類型、sentinels 和 Unmanaged 呼叫慣例。 這是二進位比較。
針對反映,屬性和事件會依名稱與簽章隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,衍生類別屬性會隱藏基類屬性,而且您將無法在基類上存取 setter。
自訂屬性不是通用類型系統的一部分。
除非陣列或 COM 類型已經載入到可用類別的數據表中,否則不會搜尋這些陣列或 COM 類型。
typeName
可以是依其命名空間限定的類型名稱,或是包含元件名稱規格的元件限定名稱。 請參閱 AssemblyQualifiedName。
如果 typeName
包含命名空間,但不包含元件名稱,這個方法只會依該順序搜尋呼叫物件的元件,並 mscorlib.dll/System.Private.CoreLib.dll。 如果 typeName 具有部分或完整元件名稱的完整名稱,這個方法會在指定的元件中搜尋。 如果元件具有強名稱,則需要完整的元件名稱。
屬性 AssemblyQualifiedName 會傳回完整的型別名稱,包括巢狀類型、元件名稱和泛型自變數。 所有支援 Common Language Runtime 的編譯程式都會發出巢狀類別的簡單名稱,而反映會根據下列慣例在查詢時建構管理的名稱。
注意
處理器架構是元件識別的一部分,而且可以指定為元件名稱字串的一部分。 例如,“ProcessorArchitecture=msil”。 不過,基於相容性考慮,它不會包含在 屬性傳回的 AssemblyQualifiedName 字串中。 您也可以藉由建立 AssemblyName 物件並將它傳遞至方法的適當 Load 多載來載入類型。 然後 Assembly.GetType ,您可以使用 方法來從元件載入類型。 另請參閱 AssemblyName.ProcessorArchitecture。
分隔符號 | 意義 |
---|---|
反斜線 (\) | 逸出字元。 |
倒引號 (') | 在代表類型參數數目的一或多個數位之前,位於泛型型別名稱的結尾。 |
括號 ([]) | 針對建構的泛型型別,封入泛型型別自變數清單;在類型自變數清單中,括住元件限定型別。 |
逗號 (,) | 在元件名稱前面。 |
Period (.) | 表示命名空間標識碼。 |
加號 (+) | 在巢狀類別之前。 |
例如,類別的完整名稱可能如下所示:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
如果命名空間是 TopNamespace.Sub+Namespace,則字串必須在加號 (+) 前面加上逸出字元 (\) ,以防止其解譯為巢狀分隔符。 反映會發出此字串,如下所示:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
“++” 會變成 “\+\+”,而 “\” 會變成 “\\”。
這個限定名稱可以儲存,稍後用來載入 Type。 若要搜尋並載入 Type,請只搭配類型名稱或元件限定型別名稱使用 GetType 。 GetType 具有型別名稱的 只會在呼叫端的元件中尋找 Type ,然後在 [系統] 元件中尋找 。 GetType 具有元件限定型別名稱的 ,將會在任何元件中尋找 Type 。
類型名稱可能包含尾端字元,代表類型的其他資訊,例如類型是否為參考型別、指標類型或數位類型。 若要擷取不含這些尾端字元的類型名稱,請使用 t.GetElementType().ToString()
,其中 t
是類型。
空格與元件名稱以外的所有類型名稱元件有關。 在元件名稱中,『,』 分隔符之前的空格是相關的,但在 『,『 分隔符之後的空格會被忽略。
泛型型別的名稱結尾是反引號 (') 後面接著代表泛型類型自變數數目的數位。 此名稱管理的目的是要允許編譯程序支援具有相同名稱但類型參數數目不同的泛型型別,發生在相同範圍中。 例如,反映會從泛型方法和 Tuple(Of T)
Tuple(Of T0, T1)
Visual Basic 或 Tuple<T>
Visual C# 中傳Tuple`2
回受管理的名稱Tuple`1
和 Tuple<T0, T1>
。
針對泛型類型,類型自變數清單會以括弧括住,而類型自變數會以逗號分隔。 例如,泛型 Dictionary<TKey,TValue> 有兩個類型參數。
Dictionary<TKey,TValue>
MyType
具有 型String別索引鍵的 ,可能如下所示:
System.Collections.Generic.Dictionary`2[System.String,MyType]
若要在類型自變數清單中指定元件限定類型,請將元件限定型別括在括弧內。 否則,分隔元件限定名稱部分的逗號會解譯為分隔其他類型自變數。 例如,Dictionary<TKey,TValue>MyType
從 MyAssembly.dll 的 ,具有 類型的String索引鍵,可能指定如下:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
注意
只有當元件限定型別出現在類型參數清單中時,才能以括弧括住。 在型別參數清單中搜尋限定和未限定型別之元件的規則,與限定和未限定的非泛型型別規則相同。
可為 Null 的類型是泛型型別的特殊案例。 例如,可為 Null 的 Int32 表示方式是字串 「System.Nullable』1[System.Int32]」。。
注意
在 C#、C++和 Visual Basic 中,您也可以使用類型運算子取得可為 Null 的類型。 例如,在 C# 中、Nullable<Boolean>::typeid
在 C++ 中,以及 GetType(Nullable(Of Boolean))
Visual Basic 中傳回typeof(Nullable<bool>)
可為 Boolean Null 的類型。
下表顯示您用於 GetType
各種類型的語法。
若要取得 | 使用 |
---|---|
可為 Null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
的 Unmanaged 指標 MyType |
Type.GetType("MyType*") |
指標的 Unmanaged 指標 MyType |
Type.GetType("MyType**") |
的Managed指標或參考 MyType |
Type.GetType("MyType&") . 請注意,參考與指標不同,僅限一個層級。 |
父類別和巢狀類別 | Type.GetType("MyParentClass+MyNestedClass") |
下限為 0 的一維陣列 | Type.GetType("MyArray[]") |
具有未知下限的一維陣列 | Type.GetType("MyArray[*]") |
n 維陣組 | 括弧內的逗號 (,) 總計 n-1 次。 例如, System.Object[,,] 表示三維 Object 陣列。 |
二維數位的陣列 | Type.GetType("MyArray[][]") |
具有未知下限的矩形二維陣列 | Type.GetType("MyArray[,]") |
具有一個型別自變數的泛型型別 | Type.GetType("MyGenericType`1[MyType]") |
具有兩個型別自變數的泛型型別 | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
具有兩個元件限定型別自變數的泛型類型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
具有元件限定型別自變數的元件限定泛型型別 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
泛型類型,其型別自變數是具有兩個型別自變數的泛型型別 | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
另請參閱
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- 指定完整的類型名稱
適用於
GetType(String, Boolean, Boolean)
取得具有指定名稱的 Type,指定找不到類型時是否要擲回例外狀況,以及是否要執行區分大小寫的搜尋。
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
參數
- typeName
- String
要取得之類型的組件限定名稱。 請參閱 AssemblyQualifiedName。 如果類型位於目前正在執行的元件或 mscorlib.dll/System.Private.CoreLib.dll 中,就足以提供其命名空間限定的類型名稱。
- throwOnError
- Boolean
true
表示找不到該類型時擲回例外狀況,而 false
則表示傳回 null
。 指定 false
也會隱藏其他某些例外狀況條件,但並不是全部。 請參閱<例外狀況>一節。
- ignoreCase
- Boolean
為 typeName
執行不區分大小寫的搜尋,則為 true
;為 typeName
執行區分大小寫的搜尋,則為 false
。
傳回
具有指定名稱的類型。 如果找不到該類型,throwOnError
參數會指定是要傳回 null
或是擲回例外狀況。 在某些情況下,不論 throwOnError
的值為何,都會擲回例外狀況。 請參閱<例外狀況>一節。
例外狀況
typeName
為 null
。
叫用類別初始設定式並擲回例外狀況。
throwOnError
為 true
,而且找不到類型。
-或-
throwOnError
為 true
,而且 typeName
包含無效字元,例如內嵌的定位字元。
-或-
throwOnError
為 true
,而且 typeName
是空字串。
-或-
throwOnError
為 true
,而且 typeName
代表大小無效的陣列類型。
-或-
typeName
代表 TypedReference 的陣列。
throwOnError
為 true
,而且 typeName
包含無效的語法。 例如,"MyType[,*,]"。
-或-
typeName
代表的泛型類型以指標類型、 ByRef
類型或 Void 做為其中一個類型引數。
-或-
typeName
代表的泛型類型具有不正確的類型引數數目。
-或-
typeName
代表泛型類型,其中一個類型引數不符合對應類型參數的條件約束。
throwOnError
為 true
,且找不到此組件或它的一個相依項目。
找到組件或其相依性的其中一個,但無法載入。
元件對目前載入的運行時間無效。
備註
如果您知道其元件限定名稱,則可以使用 GetType 方法來取得另一個 Type 元件中類型的物件,這可從取得 AssemblyQualifiedName。
GetType 會導致載入 中指定的 typeName
元件。 您也可以使用 Assembly.Load 方法載入元件,然後使用 Assembly.GetType 或 Assembly.GetTypes 方法來取得 Type 物件。 如果類型是在編譯時期程式已知的元件中,在 C# 或 GetType
Visual Basic 中的 運算符中使用typeof
會更有效率。
GetType
僅適用於從磁碟載入的元件。 如果您呼叫 GetType
來查閱使用 System.Reflection.Emit 服務定義之動態元件中定義的類型,可能會產生不一致的行為。 行為取決於動態元件是持續性的,也就是使用 RunAndSave
列舉的 System.Reflection.Emit.AssemblyBuilderAccess 或 Save
存取模式所建立。 如果動態元件是持續性的,而且在呼叫之前 GetType
已寫入磁碟,載入磁碟,載入磁碟上尋找已儲存的元件、載入該元件,並從該元件擷取類型。 如果呼叫 時 GetType
元件尚未儲存到磁碟,則方法會傳 null
回 。
GetType
不瞭解暫時性動態元件;因此,呼叫 GetType
以擷取暫時性動態元件中的類型會傳 null
回 。
GetType
若要在動態模組上使用,請在儲存之前訂閱 AppDomain.AssemblyResolve 事件並呼叫 GetType
。 否則,您會在記憶體中取得兩份元件複本。
參數 throwOnError
會指定找不到類型時會發生什麼情況,也會隱藏某些其他例外狀況,如例外狀況一節中所述。 不論的值 throwOnError
為何,都會擲回某些例外狀況。 例如,如果找到類型但無法載入,即使 throwOnError
是 false
,TypeLoadException也會擲回 。
下表顯示反映類型時,方法會傳 Get
回基類的成員。
成員類型 | Static | 非靜態 |
---|---|---|
建構函式 | 否 | 否 |
欄位 | 否 | 可以。 欄位一律會依名稱與簽章隱藏。 |
事件 | 不適用 | 常見的類型系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為依名稱與簽章隱藏。 請參閱下面的附註 2。 |
方法 | 否 | 可以。 (虛擬和非虛擬) 的方法可以是依名稱隱藏或依名稱隱藏和簽章。 |
巢狀類型 | 否 | 否 |
屬性 | 不適用 | 常見的類型系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為依名稱與簽章隱藏。 請參閱下面的附註 2。 |
隱藏名稱與簽章會考慮簽章的所有部分,包括自定義修飾詞、傳回型別、參數類型、sentinels 和 Unmanaged 呼叫慣例。 這是二進位比較。
對於反映,屬性和事件會依名稱與簽章隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,則衍生類別屬性會隱藏基類屬性,而且您將無法存取基類上的 setter。
自訂屬性不是通用類型系統的一部分。
除非陣列或 COM 類型已經載入到可用類別的數據表,否則不會搜尋。
typeName
可以是依其命名空間限定的類型名稱,或是包含元件名稱規格的元件限定名稱。 請參閱 AssemblyQualifiedName。
如果 typeName
包含命名空間,但不包含元件名稱,這個方法只會依該順序搜尋呼叫物件的元件,並 mscorlib.dll/System.Private.CoreLib.dll。 如果 typeName 具有部分或完整元件名稱的完整名稱,這個方法會在指定的元件中搜尋。 如果元件具有強名稱,則需要完整的元件名稱。
屬性 AssemblyQualifiedName 會傳回完整的類型名稱,包括巢狀類型、元件名稱和類型自變數。 所有支援 Common Language Runtime 的編譯程式都會發出巢狀類別的簡單名稱,而反映會根據下列慣例在查詢時建構管理的名稱。
注意
處理器架構是元件識別的一部分,而且可以指定為元件名稱字串的一部分。 例如,“ProcessorArchitecture=msil”。 不過,基於相容性考慮,它不會包含在 屬性傳回的 AssemblyQualifiedName 字串中。 您也可以藉由建立 AssemblyName 物件並將它傳遞至方法的適當 Load 多載來載入類型。 然後 Assembly.GetType ,您可以使用 方法來從元件載入類型。 另請參閱 AssemblyName.ProcessorArchitecture。
分隔符號 | 意義 |
---|---|
反斜線 (\) | 逸出字元。 |
倒引號 (') | 在代表類型參數數目的一或多個數位之前,位於泛型型別名稱的結尾。 |
括號 ([]) | 針對建構的泛型型別,封入泛型型別自變數清單;在類型自變數清單中,括住元件限定型別。 |
逗號 (,) | 在元件名稱前面。 |
Period (.) | 表示命名空間標識碼。 |
加號 (+) | 在巢狀類別之前。 |
例如,類別的完整名稱可能如下所示:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
如果命名空間是 TopNamespace.Sub+Namespace,則字串必須在加號 (+) 前面加上逸出字元 (\) ,以防止其解譯為巢狀分隔符。 反映會發出此字串,如下所示:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
“++” 會變成 “\+\+”,而 “\” 會變成 “\\”。
這個限定名稱可以儲存,稍後用來載入 Type。 若要搜尋並載入 Type,請只搭配類型名稱或元件限定型別名稱使用 GetType 。 GetType 具有型別名稱的 只會在呼叫端的元件中尋找 Type ,然後在 [系統] 元件中尋找 。 GetType 具有元件限定型別名稱的 ,將會在任何元件中尋找 Type 。
類型名稱可能包含尾端字元,代表類型的其他資訊,例如類型是否為參考型別、指標類型或數位類型。 若要擷取不含這些尾端字元的類型名稱,請使用 t.GetElementType().ToString()
,其中 t
是類型。
空格與元件名稱以外的所有類型名稱元件有關。 在元件名稱中,『,』 分隔符之前的空格是相關的,但在 『,『 分隔符之後的空格會被忽略。
泛型型別的名稱結尾是反引號 (') 後面接著代表泛型類型自變數數目的數位。 此名稱管理的目的是要允許編譯程序支援具有相同名稱但類型參數數目不同的泛型型別,發生在相同範圍中。 例如,反映會從泛型方法和 Tuple(Of T)
Tuple(Of T0, T1)
Visual Basic 或 Tuple<T>
Visual C# 中傳Tuple`2
回受管理的名稱Tuple`1
和 Tuple<T0, T1>
。
針對泛型類型,類型自變數清單會以括弧括住,而類型自變數會以逗號分隔。 例如,泛型 Dictionary<TKey,TValue> 有兩個類型參數。
Dictionary<TKey,TValue>
MyType
具有 型String別索引鍵的 ,可能如下所示:
System.Collections.Generic.Dictionary`2[System.String,MyType]
若要在類型自變數清單中指定元件限定類型,請將元件限定型別括在括弧內。 否則,分隔元件限定名稱部分的逗號會解譯為分隔其他類型自變數。 例如,Dictionary<TKey,TValue>MyType
從 MyAssembly.dll 的 ,具有 類型的String索引鍵,可能指定如下:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
注意
只有當元件限定型別出現在類型參數清單中時,才能以括弧括住。 在型別參數清單中搜尋限定和未限定型別之元件的規則,與限定和未限定的非泛型型別規則相同。
可為 Null 的類型是泛型型別的特殊案例。 例如,可為 Null 的 Int32 表示方式是字串 「System.Nullable』1[System.Int32]」。。
注意
在 C#、C++和 Visual Basic 中,您也可以使用類型運算子取得可為 Null 的類型。 例如,在 C# 中、Nullable<Boolean>::typeid
在 C++ 中,以及 GetType(Nullable(Of Boolean))
Visual Basic 中傳回typeof(Nullable<bool>)
可為 Boolean Null 的類型。
下表顯示您用於 GetType
各種類型的語法。
若要取得 | 使用 |
---|---|
可為 Null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
的 Unmanaged 指標 MyType |
Type.GetType("MyType*") |
指標的 Unmanaged 指標 MyType |
Type.GetType("MyType**") |
的Managed指標或參考 MyType |
Type.GetType("MyType&") . 請注意,參考與指標不同,僅限一個層級。 |
父類別和巢狀類別 | Type.GetType("MyParentClass+MyNestedClass") |
下限為 0 的一維陣列 | Type.GetType("MyArray[]") |
具有未知下限的一維陣列 | Type.GetType("MyArray[*]") |
n 維陣組 | 括弧內的逗號 (,) 總計 n-1 次。 例如, System.Object[,,] 表示三維 Object 陣列。 |
二維數位的陣列 | Type.GetType("MyArray[][]") |
具有未知下限的矩形二維陣列 | Type.GetType("MyArray[,]") |
具有一個型別自變數的泛型型別 | Type.GetType("MyGenericType`1[MyType]") |
具有兩個型別自變數的泛型型別 | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
具有兩個元件限定型別自變數的泛型類型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
具有元件限定型別自變數的元件限定泛型型別 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
泛型類型,其型別自變數是具有兩個型別自變數的泛型型別 | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
另請參閱
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- 指定完整的類型名稱
適用於
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
取得具有指定名稱的類型,並選擇性提供自訂方法來解析組件和類型。
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
參數
- typeName
- String
要取得之類型的名稱。 如果已提供 typeResolver
參數,則類型名稱可為 typeResolver
能解析的任何字串。
assemblyResolver
如果提供 參數,或是使用標準型別解析,typeName
必須是元件限定名稱, (請參閱 AssemblyQualifiedName) ,除非類型位於目前執行的元件或 mscorlib.dll/System.Private.CoreLib.dll 中,在此情況下,它足以提供其命名空間限定的類型名稱。
- assemblyResolver
- Func<AssemblyName,Assembly>
方法,會找出並傳回 typeName
中指定的組件。 組件名稱做為 assemblyResolver
物件傳遞至 AssemblyName。 如果 typeName
不包含組件名稱,則不會呼叫 assemblyResolver
。 如果未提供 assemblyResolver
,則會執行標準組件解析。
注意:請勿從未知或不受信任的呼叫端傳遞方法。 這樣做可能會提高惡意程式碼的權限。 只使用您所提供或熟悉的方法。
從 typeName
或標準組件解析傳回的組件,找出並傳回由 assemblyResolver
指定之類型的方法。 如果未提供任何組件,typeResolver
方法會提供一個組件。 這個方法也使用參數來指定是否執行不區分大小寫的搜尋。會傳遞 false
至該參數。
注意:請勿從未知或不受信任的呼叫端傳遞方法。
傳回
具有指定名稱的類型;如果找不到類型,則為 null
。
例外狀況
typeName
為 null
。
叫用類別初始設定式並擲回例外狀況。
將 typeName
剖析成類型名稱和組件名稱 (例如簡單類型名稱包含未逸出的特殊字元) 時發生錯誤。
-或-
typeName
代表的泛型類型以指標類型、 ByRef
類型或 Void 做為其中一個類型引數。
-或-
typeName
代表的泛型類型具有不正確的類型引數數目。
-或-
typeName
代表泛型類型,其中一個類型引數不符合對應類型參數的條件約束。
typeName
表示無效的類型,例如的 TypedReference陣列。
元件或其其中一個相依性對目前載入的運行時間無效。
備註
這個方法的使用案例以及 和 參數的詳細assemblyResolver
數據,可以在方法多載中找到GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)。typeResolver
注意
如果 typeName
找不到 ,則呼叫 方法會 GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) 傳 null
回 。 它不會擲回例外狀況。 若要控制是否擲回例外狀況,請呼叫具有 throwOnError
參數之方法的多GetType載。
呼叫這個方法多載與呼叫 GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) 方法多載和指定 false
throwOnError
和 ignoreCase
參數相同。
適用於
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
取得具有指定名稱的類型,指定找不到類型時是否擲回例外狀況,同時選擇性提供自訂方法來解析組件和類型。
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
參數
- typeName
- String
要取得之類型的名稱。 如果已提供 typeResolver
參數,則類型名稱可為 typeResolver
能解析的任何字串。
assemblyResolver
如果提供 參數,或是使用標準類型解析,typeName
必須是元件限定名稱, (請參閱 AssemblyQualifiedName) ,除非類型位於目前執行的元件或 mscorlib.dll/System.Private.CoreLib.dll 中,在此情況下,就足以提供其命名空間限定的類型名稱。
- assemblyResolver
- Func<AssemblyName,Assembly>
方法,會找出並傳回 typeName
中指定的組件。 組件名稱做為 assemblyResolver
物件傳遞至 AssemblyName。 如果 typeName
不包含組件名稱,則不會呼叫 assemblyResolver
。 如果未提供 assemblyResolver
,則會執行標準組件解析。
注意:不要從未知或未受信任的呼叫端傳遞方法。 這樣做可能會提高惡意程式碼的權限。 只使用您所提供或熟悉的方法。
從 typeName
或標準組件解析傳回的組件,找出並傳回由 assemblyResolver
指定之類型的方法。 如果未提供任何組件,方法會提供一個組件。 這個方法也使用參數來指定是否執行不區分大小寫的搜尋。會傳遞 false
至該參數。
注意:不要從未知或未受信任的呼叫端傳遞方法。
- throwOnError
- Boolean
true
表示找不到該類型時擲回例外狀況,而 false
則表示傳回 null
。 指定 false
也會隱藏其他某些例外狀況條件,但並不是全部。 請參閱<例外狀況>一節。
傳回
具有指定名稱的類型。 如果找不到該類型,throwOnError
參數會指定是要傳回 null
或是擲回例外狀況。 在某些情況下,不論 throwOnError
的值為何,都會擲回例外狀況。 請參閱<例外狀況>一節。
例外狀況
typeName
為 null
。
叫用類別初始設定式並擲回例外狀況。
throwOnError
為 true
,而且找不到類型。
-或-
throwOnError
為 true
,而且 typeName
包含無效字元,例如內嵌的定位字元。
-或-
throwOnError
為 true
,而且 typeName
是空字串。
-或-
throwOnError
為 true
,而且 typeName
代表大小無效的陣列類型。
-或-
typeName
表示 TypedReference 的陣列。
將 typeName
剖析成類型名稱和組件名稱 (例如簡單類型名稱包含未逸出的特殊字元) 時發生錯誤。
-或-
throwOnError
為 true
,且 typeName
包含無效的語法 (例如 "MyType[,*,]")。
-或-
typeName
代表的泛型類型以指標類型、 ByRef
類型或 Void 做為其中一個類型引數。
-或-
typeName
代表的泛型類型具有不正確的類型引數數目。
-或-
typeName
代表泛型類型,其中一個類型引數不符合對應類型參數的條件約束。
throwOnError
為 true
,且找不到此組件或它的一個相依項目。
-或-
typeName
包含無效的組件名稱。
-或-
typeName
是有效的組件名稱,沒有型別名稱。
找到組件或其相依性的其中一個,但無法載入。
元件或其其中一個相依性對目前載入的運行時間無效。
備註
您可以在 方法多載中找到GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)此方法的使用案例,以及 和 typeResolver
參數的詳細assemblyResolver
數據。
呼叫這個方法多載與呼叫 GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) 方法多載和為 ignoreCase
參數指定false
相同。