Type.GetType メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定された型を表す Type オブジェクトを取得します。
オーバーロード
GetType() |
現在の Type を取得します。 |
GetType(String) |
大文字と小文字を区別する検索を実行して、指定した名前の Type を取得します。 |
GetType(String, Boolean) |
大文字と小文字を区別する検索を実行し、型が見つからない場合に例外をスローするかどうかを指定して、指定した名前の Type を取得します。 |
GetType(String, Boolean, Boolean) |
指定した名前を持つ Type を取得します。型が見つからない場合に例外をスローするかどうかと、大文字と小文字を区別する検索を実行するかどうかも指定します。 |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
指定した名前の型を取得します。オプションとして、アセンブリおよび型を解決するカスタム メソッドを指定できます。 |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
型が見つからない場合に例外をスローするかどうかを指定して、指定した名前の型を取得します。オプションとして、アセンブリおよび型を解決するカスタム メソッドを指定できます。 |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
大文字と小文字を区別せずに検索を実行するかどうか、および型が見つからない場合に例外をスローするかどうかを指定して、指定した名前の型を取得します。オプションとして、アセンブリおよび型を解決するカスタム メソッドを指定できます。 |
GetType()
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
が、型引数の 1 つとしてポインター型、ByRef
型、または Void を持つジェネリック型を表しています。
または
typeName
は型引数の数が正しくないジェネリック型を表します。
または
typeName
がジェネリック型を表し、型引数のいずれかが、対応する型パラメーターの制約を満たしていません。
typeName
が TypedReference の配列を表しています。
アセンブリまたはその依存関係のうちの 1 つが見つかりましたが、読み込むことができませんでした。
注: .NET for Windows ストア アプリ または ポータブル クラス ライブラリでは、代わりに基底クラスの例外 IOExceptionをキャッチします。
アセンブリまたはその依存関係のうちの 1 つが正しくありません。
または
共通言語ランタイムの Version 2.0 以降を現在読み込み中です。またアセンブリは新しいバージョンでコンパイルされました。
例
次の例では、 のSystem.Int32
型を取得し、その型オブジェクトを使用して の System.Int32
プロパティをFullName表示します。
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して、別のアセンブリ内の型のオブジェクトを取得TypeAssemblyQualifiedNameできます。 GetType では、 で typeName
指定されたアセンブリの読み込みが発生します。 メソッドを使用してAssembly.Loadアセンブリを読み込み、 メソッドまたは Assembly.GetTypes メソッドをAssembly.GetType使用してオブジェクトを取得Typeすることもできます。 型がコンパイル時にプログラムに認識されているアセンブリ内にある場合は、C# または Visual Basic の 演算子で使用 typeof
する方が GetType
効率的です。
注意
見つからない場合 typeName
、 メソッドの呼び出しは を GetType(String) 返します null
。 例外はスローされません。 例外がスローされるかどうかを制御するには、 パラメーターを持つ メソッドの GetType オーバーロードを throwOnError
呼び出します。
GetType は、ディスクから読み込まれたアセンブリでのみ機能します。 を呼び出 GetType して、サービスを使用して定義された動的アセンブリで定義されている型を System.Reflection.Emit 検索すると、動作が矛盾する可能性があります。 動作は、動的アセンブリが永続的かどうか、つまり列挙型の または Save
アクセス モードSystem.Reflection.Emit.AssemblyBuilderAccessを使用してRunAndSave
作成されたかどうかによって異なります。 動的アセンブリが永続的であり、 が呼び出される前に GetType
ディスクに書き込まれた場合、ローダーはディスク上の保存されたアセンブリを検索し、そのアセンブリを読み込み、そのアセンブリから型を取得します。 が呼び出されたときに GetType
アセンブリがディスクに保存されていない場合、 メソッドは を返します null
。 GetType
は、一時的な動的アセンブリを理解していません。したがって、 を呼び出 GetType
して一時的な動的アセンブリ内の型を取得すると、 が返されます null
。
動的モジュールで を使用 GetType
するには、イベントをサブスクライブし、保存する AppDomain.AssemblyResolve 前に を呼び出 GetType
します。 それ以外の場合は、メモリ内のアセンブリの 2 つのコピーを取得します。
次の表は、型に反映するときに メソッドによって Get
返される基底クラスのメンバーを示しています。
メンバーの型 | 静的 | 非静的 |
---|---|---|
コンストラクター | いいえ | いいえ |
フィールド | いいえ | はい。 フィールドは常に名前と署名で非表示になります。 |
Event | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
メソッド | いいえ | はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。 |
入れ子になった型 | いいえ | いいえ |
プロパティ | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。
リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
カスタム属性は、共通型システムの一部ではありません。
配列または COM 型は、使用可能なクラスのテーブルに既に読み込まれていない限り、検索されません。
typeName
には、その名前空間で修飾された型名、またはアセンブリ名の指定を含むアセンブリ修飾名を指定できます。 以下を参照してください。AssemblyQualifiedName
名前空間が含まれているがアセンブリ名が含まれていない場合 typeName
、このメソッドは呼び出し元のオブジェクトのアセンブリのみを検索し、その順序で /System.Private.CoreLib.dll をmscorlib.dllします。 typeName が部分アセンブリ名または完全アセンブリ名で完全修飾されている場合、このメソッドは指定されたアセンブリを検索します。 アセンブリに厳密な名前が付いている場合は、完全なアセンブリ名が必要です。
プロパティは AssemblyQualifiedName 、入れ子になった型、アセンブリ名、ジェネリック型引数を含む完全修飾型名を返します。 共通言語ランタイムをサポートするすべてのコンパイラは、入れ子になったクラスの単純な名前を出力し、リフレクションは、次の規則に従って、クエリ時にマングルされた名前を構築します。
注意
.NET Framework バージョン 2.0 では、プロセッサ アーキテクチャがアセンブリ ID に追加され、アセンブリ名文字列の一部として指定できます。 たとえば、"ProcessorArchitecture=msil" とします。 ただし、互換性上の理由から、 プロパティによって AssemblyQualifiedName 返される文字列には含まれません。 オブジェクトを AssemblyName 作成し、 メソッドの適切なオーバーロードに渡すことで、型を Load 読み込むこともできます。 その後、 メソッドを Assembly.GetType 使用して、アセンブリから型を読み込むことができます。 参照 AssemblyName.ProcessorArchitecture.
区切り記号 | 説明 |
---|---|
円記号 (\) | エスケープ文字。 |
Backtick (') | ジェネリック型の名前の末尾にある型パラメーターの数を表す 1 つ以上の数字の前に置きます。 |
角かっこ ([]) | 構築されたジェネリック型のジェネリック型引数リストを囲みます。型引数リスト内で、アセンブリ修飾型を囲みます。 |
コンマ (,) | アセンブリ名の前に置きます。 |
ピリオド (.) | 名前空間識別子を示します。 |
プラス記号 (+) | 入れ子になったクラスの前。 |
たとえば、クラスの完全修飾名は次のようになります。
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
名前空間が TopNamespace.Sub+Namespace の場合、文字列はプラス記号 (+) の前にエスケープ文字 (\) を付けて、入れ子の区切り記号として解釈されないようにする必要があります。 リフレクションでは、次のようにこの文字列が出力されます。
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" は "\+\+" になり、"\" は "\\" になります。
この修飾名を永続化し、後で を使用して を Type読み込むことができます。 を検索して読み込む Typeには、型名のみを指定するか、アセンブリ修飾型名を使用 GetType します。 GetType 型名のみを指定すると、呼び出し元のアセンブリ内の が検索 Type され、次に System アセンブリ内で が検索されます。 GetType アセンブリ修飾型名を使用すると、任意のアセンブリで が Type 検索されます。
型名には、型が参照型、ポインター型、配列型のいずれであるかなど、型に関する追加情報を示す末尾の文字が含まれる場合があります。 これらの末尾の文字を含まない型名を取得するには、 を使用 t.GetElementType().ToString()
します。ここで t
、 は 型です。
スペースは、アセンブリ名を除くすべての型名コンポーネントに関連します。 アセンブリ名では、',' 区切り記号の前のスペースが関連しますが、',' 区切り記号の後のスペースは無視されます。
ジェネリック型の名前は、バックティック (') の後にジェネリック型引数の数を表す数字で終わります。 この名前の管理の目的は、コンパイラが同じ名前を持ち、異なる数の型パラメーターを持ち、同じスコープで発生するジェネリック型をサポートできるようにすることです。 たとえば、リフレクションは、ジェネリック メソッドTuple(Of T)
Tuple(Of T0, T1)
および Tuple`2
Visual Basic、または Tuple<T>
Visual C# で、壊れた名前Tuple`1
と Tuple<T0, T1>
を返します。
ジェネリック型の場合、型引数リストは角かっこで囲まれており、型引数はコンマで区切られます。 たとえば、ジェネリック Dictionary<TKey,TValue> には 2 つの型パラメーターがあります。 Dictionary<TKey,TValue>型Stringのキーを持つ の MyType
は、次のように表される場合があります。
System.Collections.Generic.Dictionary`2[System.String,MyType]
型引数リスト内でアセンブリ修飾型を指定するには、アセンブリ修飾型を角かっこで囲みます。 それ以外の場合、アセンブリ修飾名の部分を区切るコンマは、追加の型引数を区切るものとして解釈されます。 たとえば、 型StringのMyType
キーをDictionary<TKey,TValue>持つ 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 許容型を取得することもできます。 たとえば、null 許容 Boolean 型は、C# では によって typeof(Nullable<bool>)
、C++ では によって Nullable<Boolean>::typeid
、Visual Basic では によって GetType(Nullable(Of Boolean))
返されます。
次の表は、さまざまな型に GetType
使用する構文を示しています。
取得するには | 使用 |
---|---|
null 許容 Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
へのアンマネージ ポインター MyType |
Type.GetType("MyType*") |
へのポインターへのアンマネージ ポインター MyType |
Type.GetType("MyType**") |
マネージド ポインターまたは への参照 MyType |
Type.GetType("MyType&") . ポインターとは異なり、参照は 1 つのレベルに制限されます。 |
親クラスと入れ子になったクラス | Type.GetType("MyParentClass+MyNestedClass") |
下限が 0 の 1 次元配列 | Type.GetType("MyType[]") |
下限が不明な 1 次元配列 | Type.GetType("MyType[*]") |
n 次元配列 | 角かっこ内のコンマ (,) は、合計 n から 1 回です。 たとえば、 System.Object[,,] は 3 次元 Object 配列を表します。 |
1 次元配列の配列 | Type.GetType("MyType[][]") |
下限が不明な四角形の 2 次元配列 | Type.GetType("MyType[,]") |
1 つの型引数を持つジェネリック型 | Type.GetType("MyGenericType`1[MyType]") |
2 つの型引数を持つジェネリック型 | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
2 つのアセンブリ修飾型引数を持つジェネリック型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
アセンブリ修飾型引数を持つアセンブリ修飾ジェネリック型 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
型引数が 2 つの型引数を持つジェネリック型であるジェネリック型 | 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
が、型引数の 1 つとしてポインター型、 ByRef
型、または Void を持つジェネリック型を表しています。
または
typeName
は型引数の数が正しくないジェネリック型を表します。
または
typeName
がジェネリック型を表し、型引数のいずれかが、対応する型パラメーターの制約を満たしていません。
throwOnError
が true
です。アセンブリ、またはその依存関係のうちの 1 つが見つかりませんでした。
アセンブリまたはその依存関係のうちの 1 つが見つかりましたが、読み込むことができませんでした。
注: .NET for Windows ストア アプリ または ポータブル クラス ライブラリでは、代わりに基底クラスの例外 IOExceptionをキャッチします。
アセンブリまたはその依存関係のうちの 1 つが正しくありません。
または
共通言語ランタイムの Version 2.0 以降を現在読み込み中です。またアセンブリは新しいバージョンでコンパイルされました。
例
次の例では、 のSystem.Int32
型を取得し、その型オブジェクトを使用して の System.Int32
プロパティをFullName表示します。 型オブジェクトが存在しないアセンブリを参照している場合、この例では例外をスローします。
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して、別のアセンブリ内の型のオブジェクトを取得TypeAssemblyQualifiedNameできます。 GetType では、 で typeName
指定されたアセンブリの読み込みが発生します。 メソッドを使用してAssembly.Loadアセンブリを読み込み、 メソッドまたは Assembly.GetTypes メソッドをAssembly.GetType使用してオブジェクトを取得Typeすることもできます。 型がコンパイル時にプログラムに認識されているアセンブリ内にある場合は、C# または Visual Basic の 演算子で使用 typeof
する方が GetType
効率的です。
GetType
は、ディスクから読み込まれたアセンブリでのみ機能します。 を呼び出 GetType
して、サービスを使用して定義された動的アセンブリで定義されている型を System.Reflection.Emit 検索すると、動作が矛盾する可能性があります。 動作は、動的アセンブリが永続的かどうか、つまり列挙型の または Save
アクセス モードSystem.Reflection.Emit.AssemblyBuilderAccessを使用してRunAndSave
作成されたかどうかによって異なります。 動的アセンブリが永続的であり、 が呼び出される前に GetType
ディスクに書き込まれた場合、ローダーはディスク上の保存されたアセンブリを検索し、そのアセンブリを読み込み、そのアセンブリから型を取得します。 が呼び出されたときに GetType
アセンブリがディスクに保存されていない場合、 メソッドは を返します null
。 GetType
は、一時的な動的アセンブリを理解していません。したがって、 を呼び出 GetType
して一時的な動的アセンブリ内の型を取得すると、 が返されます null
。
動的モジュールで を使用 GetType
するには、イベントをサブスクライブし、保存する AppDomain.AssemblyResolve 前に を呼び出 GetType
します。 それ以外の場合は、メモリ内のアセンブリの 2 つのコピーを取得します。
パラメーターは throwOnError
、型が見つからない場合の動作を指定し、「例外」セクションで説明されているように、他の特定の例外条件も抑制します。 の値に関係なく、一部の throwOnError
例外がスローされます。 たとえば、型が見つかったが読み込めない場合、 TypeLoadException が の場合throwOnError
false
でも がスローされます。
次の表は、型に反映するときに メソッドによって Get
返される基底クラスのメンバーを示しています。
メンバーの型 | 静的 | 非静的 |
---|---|---|
コンストラクター | いいえ | いいえ |
フィールド | いいえ | はい。 フィールドは常に名前と署名で非表示になります。 |
Event | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
メソッド | いいえ | はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。 |
入れ子になった型 | いいえ | いいえ |
プロパティ | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。
リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
カスタム属性は、共通型システムの一部ではありません。
配列または COM 型は、使用可能なクラスのテーブルに既に読み込まれていない限り、検索されません。
typeName
には、その名前空間で修飾された型名、またはアセンブリ名の指定を含むアセンブリ修飾名を指定できます。 以下を参照してください。AssemblyQualifiedName
名前空間が含まれているがアセンブリ名が含まれていない場合 typeName
、このメソッドは呼び出し元のオブジェクトのアセンブリのみを検索し、その順序で /System.Private.CoreLib.dll をmscorlib.dllします。 typeName が部分アセンブリ名または完全アセンブリ名で完全修飾されている場合、このメソッドは指定されたアセンブリを検索します。 アセンブリに厳密な名前が付いている場合は、完全なアセンブリ名が必要です。
プロパティは AssemblyQualifiedName 、入れ子になった型、アセンブリ名、ジェネリック引数を含む完全修飾型名を返します。 共通言語ランタイムをサポートするすべてのコンパイラは、入れ子になったクラスの単純な名前を出力し、リフレクションは、次の規則に従って、クエリ時にマングルされた名前を構築します。
注意
.NET Framework バージョン 2.0 では、プロセッサ アーキテクチャがアセンブリ ID に追加され、アセンブリ名文字列の一部として指定できます。 たとえば、"ProcessorArchitecture=msil" とします。 ただし、互換性上の理由から、 プロパティによって AssemblyQualifiedName 返される文字列には含まれません。 オブジェクトを AssemblyName 作成し、 メソッドの適切なオーバーロードに渡すことで、型を Load 読み込むこともできます。 その後、 メソッドを Assembly.GetType 使用して、アセンブリから型を読み込むことができます。 参照 AssemblyName.ProcessorArchitecture.
区切り記号 | 説明 |
---|---|
円記号 (\) | エスケープ文字。 |
Backtick (') | ジェネリック型の名前の末尾にある型パラメーターの数を表す 1 つ以上の数字の前に置きます。 |
角かっこ ([]) | 構築されたジェネリック型のジェネリック型引数リストを囲みます。型引数リスト内で、アセンブリ修飾型を囲みます。 |
コンマ (,) | アセンブリ名の前に置きます。 |
ピリオド (.) | 名前空間識別子を示します。 |
プラス記号 (+) | 入れ子になったクラスの前。 |
たとえば、クラスの完全修飾名は次のようになります。
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
名前空間が TopNamespace.Sub+Namespace の場合、文字列はプラス記号 (+) の前にエスケープ文字 (\) を付けて、入れ子の区切り記号として解釈されないようにする必要があります。 リフレクションでは、次のようにこの文字列が出力されます。
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" は "\+\+" になり、"\" は "\\" になります。
この修飾名を永続化し、後で を使用して を Type読み込むことができます。 を検索して読み込む Typeには、型名のみを指定するか、アセンブリ修飾型名を使用 GetType します。 GetType 型名のみを指定すると、呼び出し元のアセンブリ内の が検索 Type され、次に System アセンブリ内で が検索されます。 GetType アセンブリ修飾型名を使用すると、任意のアセンブリで が Type 検索されます。
型名には、型が参照型、ポインター型、配列型のいずれであるかなど、型に関する追加情報を示す末尾の文字が含まれる場合があります。 これらの末尾の文字を含まない型名を取得するには、 を使用 t.GetElementType().ToString()
します。ここで t
、 は 型です。
スペースは、アセンブリ名を除くすべての型名コンポーネントに関連します。 アセンブリ名では、',' 区切り記号の前のスペースが関連しますが、',' 区切り記号の後のスペースは無視されます。
ジェネリック型の名前は、バックティック (') の後にジェネリック型引数の数を表す数字で終わります。 この名前の管理の目的は、コンパイラが同じ名前を持ち、異なる数の型パラメーターを持ち、同じスコープで発生するジェネリック型をサポートできるようにすることです。 たとえば、リフレクションは、ジェネリック メソッドTuple(Of T)
Tuple(Of T0, T1)
および Tuple`2
Visual Basic、または Tuple<T>
Visual C# で、壊れた名前Tuple`1
と Tuple<T0, T1>
を返します。
ジェネリック型の場合、型引数リストは角かっこで囲まれており、型引数はコンマで区切られます。 たとえば、ジェネリック Dictionary<TKey,TValue> には 2 つの型パラメーターがあります。 Dictionary<TKey,TValue>型Stringのキーを持つ の MyType
は、次のように表される場合があります。
System.Collections.Generic.Dictionary`2[System.String,MyType]
型引数リスト内でアセンブリ修飾型を指定するには、アセンブリ修飾型を角かっこで囲みます。 それ以外の場合、アセンブリ修飾名の部分を区切るコンマは、追加の型引数を区切るものとして解釈されます。 たとえば、 型StringのMyType
キーをDictionary<TKey,TValue>持つ MyAssembly.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 許容型を取得することもできます。 たとえば、null 許容 Boolean 型は、C# では によって typeof(Nullable<bool>)
、C++ では によって Nullable<Boolean>::typeid
、Visual Basic では によって GetType(Nullable(Of Boolean))
返されます。
次の表は、さまざまな型に GetType
使用する構文を示しています。
取得するには | 使用 |
---|---|
null 許容 Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
へのアンマネージ ポインター MyType |
Type.GetType("MyType*") |
へのポインターへのアンマネージ ポインター MyType |
Type.GetType("MyType**") |
マネージド ポインターまたは への参照 MyType |
Type.GetType("MyType&") . ポインターとは異なり、参照は 1 つのレベルに制限されます。 |
親クラスと入れ子になったクラス | Type.GetType("MyParentClass+MyNestedClass") |
下限が 0 の 1 次元配列 | Type.GetType("MyArray[]") |
下限が不明な 1 次元配列 | Type.GetType("MyArray[*]") |
n 次元配列 | 角かっこ内のコンマ (,) は、合計 n から 1 回です。 たとえば、 System.Object[,,] は 3 次元 Object 配列を表します。 |
2 次元配列の配列 | Type.GetType("MyArray[][]") |
下限が不明な四角形の 2 次元配列 | Type.GetType("MyArray[,]") |
1 つの型引数を持つジェネリック型 | Type.GetType("MyGenericType`1[MyType]") |
2 つの型引数を持つジェネリック型 | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
2 つのアセンブリ修飾型引数を持つジェネリック型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
アセンブリ修飾型引数を持つアセンブリ修飾ジェネリック型 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
型引数が 2 つの型引数を持つジェネリック型であるジェネリック型 | 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
大文字と小文字を区別せずに true
の検索を実行するには typeName
。大文字と小文字を区別して false
の検索を実行するには typeName
。
戻り値
指定した名前を持つ型。 型が見つからない場合、throwOnError
パラメーターで null
を返すか例外をスローするかを指定します。 一部の場合は、throwOnError
の値に関係なく、例外がスローされます。 「例外」を参照してください。
例外
typeName
が null
です。
クラス初期化子が呼び出され、例外をスローします。
throwOnError
が true
です。型が見つかりません。
または
throwOnError
が true
です。 typeName
に埋め込まれたタブなどの正しくない文字が含まれています。
または
throwOnError
が true
です。 typeName
は空の文字列です。
または
throwOnError
が true
です。 typeName
は無効なサイズの配列型を表します。
または
typeName
が TypedReference の配列を表しています。
throwOnError
が true
で、 typeName
に正しくない構文が含まれています。 例: "MyType[,*,]"。
または
typeName
が、型引数の 1 つとしてポインター型、 ByRef
型、または Void を持つジェネリック型を表しています。
または
typeName
は型引数の数が正しくないジェネリック型を表します。
または
typeName
がジェネリック型を表し、型引数のいずれかが、対応する型パラメーターの制約を満たしていません。
throwOnError
が true
です。アセンブリ、またはその依存関係のうちの 1 つが見つかりませんでした。
アセンブリまたはその依存関係のうちの 1 つが見つかりましたが、読み込むことができませんでした。
アセンブリまたはその依存関係のうちの 1 つが正しくありません。
または
共通言語ランタイムの Version 2.0 以降を現在読み込み中です。またアセンブリは新しいバージョンでコンパイルされました。
注釈
から取得できるアセンブリ修飾名がわかっている場合は、 メソッドを使用GetTypeして、別のアセンブリ内の型のオブジェクトを取得TypeAssemblyQualifiedNameできます。 GetType では、 で typeName
指定されたアセンブリの読み込みが発生します。 メソッドを使用してAssembly.Loadアセンブリを読み込み、 メソッドまたは Assembly.GetTypes メソッドをAssembly.GetType使用してオブジェクトを取得Typeすることもできます。 型がコンパイル時にプログラムに認識されているアセンブリ内にある場合は、C# または Visual Basic の 演算子で使用 typeof
する方が GetType
効率的です。
GetType
は、ディスクから読み込まれたアセンブリでのみ機能します。 を呼び出 GetType
して、サービスを使用して定義された動的アセンブリで定義されている型を System.Reflection.Emit 検索すると、動作が矛盾する可能性があります。 動作は、動的アセンブリが永続的かどうか、つまり列挙型の または Save
アクセス モードSystem.Reflection.Emit.AssemblyBuilderAccessを使用してRunAndSave
作成されたかどうかによって異なります。 動的アセンブリが永続的であり、 が呼び出される前に GetType
ディスクに書き込まれた場合、ローダーはディスク上の保存されたアセンブリを検索し、そのアセンブリを読み込み、そのアセンブリから型を取得します。 が呼び出されたときに GetType
アセンブリがディスクに保存されていない場合、 メソッドは を返します null
。 GetType
は、一時的な動的アセンブリを理解していません。したがって、 を呼び出 GetType
して一時的な動的アセンブリ内の型を取得すると、 が返されます null
。
動的モジュールで を使用 GetType
するには、イベントをサブスクライブし、保存する AppDomain.AssemblyResolve 前に を呼び出 GetType
します。 それ以外の場合は、メモリ内のアセンブリの 2 つのコピーを取得します。
パラメーターは throwOnError
、型が見つからない場合の動作を指定し、「例外」セクションで説明されているように、他の特定の例外条件も抑制します。 の値に関係なく、一部の throwOnError
例外がスローされます。 たとえば、型が見つかったが読み込めない場合、 TypeLoadException が の場合throwOnError
false
でも がスローされます。
次の表は、型に反映するときに メソッドによって Get
返される基底クラスのメンバーを示しています。
メンバーの型 | 静的 | 非静的 |
---|---|---|
コンストラクター | いいえ | いいえ |
フィールド | いいえ | はい。 フィールドは常に名前と署名で非表示になります。 |
Event | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
メソッド | いいえ | はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。 |
入れ子になった型 | いいえ | いいえ |
プロパティ | 適用なし | 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。 |
名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。
リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
カスタム属性は、共通型システムの一部ではありません。
配列または COM 型は、使用可能なクラスのテーブルに既に読み込まれていない限り、検索されません。
typeName
には、その名前空間で修飾された型名、またはアセンブリ名の指定を含むアセンブリ修飾名を指定できます。 以下を参照してください。AssemblyQualifiedName
名前空間が含まれているがアセンブリ名が含まれていない場合 typeName
、このメソッドは呼び出し元のオブジェクトのアセンブリのみを検索し、その順序で /System.Private.CoreLib.dll をmscorlib.dllします。 typeName が部分アセンブリ名または完全アセンブリ名で完全修飾されている場合、このメソッドは指定されたアセンブリを検索します。 アセンブリに厳密な名前が付いている場合は、完全なアセンブリ名が必要です。
プロパティは AssemblyQualifiedName 、入れ子になった型、アセンブリ名、および型引数を含む完全修飾型名を返します。 共通言語ランタイムをサポートするすべてのコンパイラは、入れ子になったクラスの単純な名前を出力し、リフレクションは、次の規則に従って、クエリ時にマングルされた名前を構築します。
注意
.NET Framework バージョン 2.0 では、プロセッサ アーキテクチャがアセンブリ ID に追加され、アセンブリ名文字列の一部として指定できます。 たとえば、"ProcessorArchitecture=msil" とします。 ただし、互換性上の理由から、 プロパティによって AssemblyQualifiedName 返される文字列には含まれません。 オブジェクトを AssemblyName 作成し、 メソッドの適切なオーバーロードに渡すことで、型を Load 読み込むこともできます。 その後、 メソッドを Assembly.GetType 使用して、アセンブリから型を読み込むことができます。 参照 AssemblyName.ProcessorArchitecture.
区切り記号 | 説明 |
---|---|
円記号 (\) | エスケープ文字。 |
Backtick (') | ジェネリック型の名前の末尾にある型パラメーターの数を表す 1 つ以上の数字の前に置きます。 |
角かっこ ([]) | 構築されたジェネリック型のジェネリック型引数リストを囲みます。型引数リスト内で、アセンブリ修飾型を囲みます。 |
コンマ (,) | アセンブリ名の前に置きます。 |
ピリオド (.) | 名前空間識別子を示します。 |
プラス記号 (+) | 入れ子になったクラスの前。 |
たとえば、クラスの完全修飾名は次のようになります。
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
名前空間が TopNamespace.Sub+Namespace の場合、文字列はプラス記号 (+) の前にエスケープ文字 (\) を付けて、入れ子の区切り記号として解釈されないようにする必要があります。 リフレクションでは、次のようにこの文字列が出力されます。
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" は "\+\+" になり、"\" は "\\" になります。
この修飾名を永続化し、後で を使用して を Type読み込むことができます。 を検索して読み込む Typeには、型名のみを指定するか、アセンブリ修飾型名を使用 GetType します。 GetType 型名のみを指定すると、呼び出し元のアセンブリ内の が検索 Type され、次に System アセンブリ内で が検索されます。 GetType アセンブリ修飾型名を使用すると、任意のアセンブリで が Type 検索されます。
型名には、型が参照型、ポインター型、配列型のいずれであるかなど、型に関する追加情報を示す末尾の文字が含まれる場合があります。 これらの末尾の文字を含まない型名を取得するには、 を使用 t.GetElementType().ToString()
します。ここで t
、 は 型です。
スペースは、アセンブリ名を除くすべての型名コンポーネントに関連します。 アセンブリ名では、',' 区切り記号の前のスペースが関連しますが、',' 区切り記号の後のスペースは無視されます。
ジェネリック型の名前は、バックティック (') の後にジェネリック型引数の数を表す数字で終わります。 この名前の管理の目的は、コンパイラが同じ名前を持ち、異なる数の型パラメーターを持ち、同じスコープで発生するジェネリック型をサポートできるようにすることです。 たとえば、リフレクションは、ジェネリック メソッドTuple(Of T)
Tuple(Of T0, T1)
および Tuple`2
Visual Basic、または Tuple<T>
Visual C# で、壊れた名前Tuple`1
と Tuple<T0, T1>
を返します。
ジェネリック型の場合、型引数リストは角かっこで囲まれており、型引数はコンマで区切られます。 たとえば、ジェネリック Dictionary<TKey,TValue> には 2 つの型パラメーターがあります。 Dictionary<TKey,TValue>型Stringのキーを持つ の MyType
は、次のように表される場合があります。
System.Collections.Generic.Dictionary`2[System.String,MyType]
型引数リスト内でアセンブリ修飾型を指定するには、アセンブリ修飾型を角かっこで囲みます。 それ以外の場合、アセンブリ修飾名の部分を区切るコンマは、追加の型引数を区切るものとして解釈されます。 たとえば、 型StringのMyType
キーをDictionary<TKey,TValue>持つ MyAssembly.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 許容型を取得することもできます。 たとえば、null 許容 Boolean 型は、C# では によって typeof(Nullable<bool>)
、C++ では によって Nullable<Boolean>::typeid
、Visual Basic では によって GetType(Nullable(Of Boolean))
返されます。
次の表は、さまざまな型に GetType
使用する構文を示しています。
取得するには | 使用 |
---|---|
null 許容 Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
へのアンマネージ ポインター MyType |
Type.GetType("MyType*") |
へのポインターへのアンマネージ ポインター MyType |
Type.GetType("MyType**") |
マネージド ポインターまたは への参照 MyType |
Type.GetType("MyType&") . ポインターとは異なり、参照は 1 つのレベルに制限されます。 |
親クラスと入れ子になったクラス | Type.GetType("MyParentClass+MyNestedClass") |
下限が 0 の 1 次元配列 | Type.GetType("MyArray[]") |
下限が不明な 1 次元配列 | Type.GetType("MyArray[*]") |
n 次元配列 | 角かっこ内のコンマ (,) は、合計 n から 1 回です。 たとえば、 System.Object[,,] は 3 次元 Object 配列を表します。 |
2 次元配列の配列 | Type.GetType("MyArray[][]") |
下限が不明な四角形の 2 次元配列 | Type.GetType("MyArray[,]") |
1 つの型引数を持つジェネリック型 | Type.GetType("MyGenericType`1[MyType]") |
2 つの型引数を持つジェネリック型 | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
2 つのアセンブリ修飾型引数を持つジェネリック型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
アセンブリ修飾型引数を持つアセンブリ修飾ジェネリック型 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
型引数が 2 つの型引数を持つジェネリック型であるジェネリック型 | 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
が、型引数の 1 つとしてポインター型、 ByRef
型、または Void を持つジェネリック型を表しています。
または
typeName
は型引数の数が正しくないジェネリック型を表します。
または
typeName
がジェネリック型を表し、型引数のいずれかが、対応する型パラメーターの制約を満たしていません。
typeName
が TypedReference の配列を表しています。
アセンブリまたはその依存関係のうちの 1 つが見つかりましたが、読み込むことができませんでした。
または
typeName
に無効なアセンブリ名が含まれています。
または
typeName
が、型名のない有効なアセンブリ名です。
アセンブリまたはその依存関係のうちの 1 つが正しくありません。
または
現在読み込まれているバージョンよりも新しいバージョンの共通言語ランタイムで、アセンブリがコンパイルされました。
注釈
このメソッドの使用シナリオと、 パラメーターと typeResolver
パラメーターのassemblyResolver
詳細については、メソッドのオーバーロードに関するページをGetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)参照してください。
注意
見つからない場合 typeName
、 メソッドの呼び出しは を GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) 返します null
。 例外はスローされません。 例外がスローされるかどうかを制御するには、 パラメーターを持つ メソッドの GetType オーバーロードを throwOnError
呼び出します。
このメソッド オーバーロードの呼び出しは、メソッド オーバーロードのGetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)呼び出しと、 パラメーターと パラメーターのfalse
throwOnError
指定とignoreCase
同じです。
適用対象
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
型が見つからない場合に例外をスローするかどうかを指定して、指定した名前の型を取得します。オプションとして、アセンブリおよび型を解決するカスタム メソッドを指定できます。
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
パラメーター
- typeName
- String
取得する型の名前。 typeResolver
パラメーターを指定する場合は、typeResolver
が解決できる任意の文字列を型名として使用できます。 assemblyResolver
パラメーターを指定する場合、または標準の型解決を使用する場合は、typeName
をアセンブリ修飾名にする必要があります (AssemblyQualifiedNameを参照)。ただし、現在実行されているアセンブリ内または mscorlib.dll/System.Private.CoreLib.dll に型がある場合は、名前空間で修飾された型名を指定するだけで十分です。
- assemblyResolver
- Func<AssemblyName,Assembly>
で指定されたアセンブリを特定して返すメソッドtypeName
. assemblyResolver
には、アセンブリ名が AssemblyName オブジェクトとして渡されます。 typeName
にアセンブリの名前が含まれていない場合、assemblyResolver
は呼び出されません。 assemblyResolver
を指定しない場合は、標準のアセンブリ解決が実行されます。
注意 不明または信頼されていない呼び出し元からメソッドを渡さないでください。 渡した場合は、悪意のあるコードに対して特権が昇格される可能性があります。 指定したメソッドまたは使い慣れているメソッドだけを使用してください。
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
が、型引数の 1 つとしてポインター型、 ByRef
型、または Void を持つジェネリック型を表しています。
または
typeName
は型引数の数が正しくないジェネリック型を表します。
または
typeName
がジェネリック型を表し、型引数のいずれかが、対応する型パラメーターの制約を満たしていません。
throwOnError
が true
です。アセンブリ、またはその依存関係のうちの 1 つが見つかりませんでした。
または
typeName
に無効なアセンブリ名が含まれています。
または
typeName
が、型名のない有効なアセンブリ名です。
アセンブリまたはその依存関係のうちの 1 つが見つかりましたが、読み込むことができませんでした。
アセンブリまたはその依存関係のうちの 1 つが正しくありません。
または
現在読み込まれているバージョンよりも新しいバージョンの共通言語ランタイムで、アセンブリがコンパイルされました。
注釈
このメソッドの使用シナリオと、 パラメーターと typeResolver
パラメーターのassemblyResolver
詳細については、メソッドのオーバーロードに関するページをGetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)参照してください。
このメソッド オーバーロードの呼び出しは、メソッド のオーバーロードをGetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)呼び出し、 パラメーターにをignoreCase
指定するfalse
のと同じです。
適用対象
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
大文字と小文字を区別せずに true
の検索を実行するには typeName
。大文字と小文字を区別して false
の検索を実行するには typeName
。
戻り値
指定した名前を持つ型。 型が見つからない場合、throwOnError
パラメーターで null
を返すか例外をスローするかを指定します。 一部の場合は、throwOnError
の値に関係なく、例外がスローされます。 「例外」を参照してください。
例外
typeName
が null
です。
クラス初期化子が呼び出され、例外をスローします。
throwOnError
が true
です。型が見つかりません。
または
throwOnError
が true
です。 typeName
に埋め込まれたタブなどの正しくない文字が含まれています。
または
throwOnError
が true
です。 typeName
は空の文字列です。
または
throwOnError
が true
です。 typeName
は無効なサイズの配列型を表します。
または
typeName
が TypedReference の配列を表しています。
typeName
が型名とアセンブリ名に解析される際にエラーが発生します (たとえば、単純な型名にエスケープされていない特殊文字が含まれている場合など)。
または
throwOnError
が true
です。typeName
に無効な構文 ("MyType[,*,]" など) が含まれています。
または
typeName
が、型引数の 1 つとしてポインター型、 ByRef
型、または Void を持つジェネリック型を表しています。
または
typeName
は型引数の数が正しくないジェネリック型を表します。
または
typeName
がジェネリック型を表し、型引数のいずれかが、対応する型パラメーターの制約を満たしていません。
throwOnError
が true
です。アセンブリ、またはその依存関係のうちの 1 つが見つかりませんでした。
アセンブリまたはその依存関係のうちの 1 つが見つかりましたが、読み込むことができませんでした。
または
typeName
に無効なアセンブリ名が含まれています。
または
typeName
が、型名のない有効なアセンブリ名です。
アセンブリまたはその依存関係のうちの 1 つが正しくありません。
または
現在読み込まれているバージョンよりも新しいバージョンの共通言語ランタイムで、アセンブリがコンパイルされました。
注釈
メソッドの既定の実装をより柔軟な実装GetTypeに置き換えるには、このメソッド オーバーロードとそれに関連付けられているオーバーロード (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) と GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)) を使用します。 型名とその型を含むアセンブリの名前を解決する独自のメソッドを提供することで、次の操作を実行できます。
型の読み込み元のアセンブリのバージョンを制御します。
アセンブリ名を含まない型名を検索する別の場所を指定します。
部分アセンブリ名を使用してアセンブリを読み込みます。
共通言語ランタイム (CLR) によって作成されない のサブクラス System.Type を返します。
たとえば、バージョン トレラントなシリアル化では、このメソッドを使用すると、部分名を使用して "最適" アセンブリを検索できます。 メソッドの他の GetType オーバーロードには、バージョン番号を含むアセンブリ修飾型名が必要です。
型システムの代替実装では、CLR によって作成されない のサブクラスを返す必要がある場合があります。メソッドの System.Type 他の GetType オーバーロードによって返されるすべての型はランタイム型です。
使用状況に関するメモ
このメソッド オーバーロードとそれに関連付けられたオーバーロードは、型の名前とアセンブリの名前に解析 typeName
し、名前を解決します。 アセンブリ名の解決は、型名の解決前に行われます。型名はアセンブリのコンテキストで解決する必要があるためです。
注意
アセンブリ修飾型名の概念に慣れていない場合は、 プロパティを AssemblyQualifiedName 参照してください。
がアセンブリ修飾名でない場合 typeName
、アセンブリ解決はスキップされます。 非修飾型名は、mscorlib.dll/System.Private.CoreLib.dll または現在実行中のアセンブリのコンテキストで解決できます。また、必要に応じて、 パラメーターにアセンブリを typeResolver
指定することもできます。 異なる種類の名前解決のアセンブリ名を含めるか省略した場合の効果は、[名前解決の 混在 ] セクションにテーブルとして表示されます。
一般的な使用上の注意:
メソッドは
assemblyResolver
、不明な呼び出し元またはtypeResolver
信頼されていない呼び出し元に渡したり、信頼されていない呼び出し元に渡したりしないでください。 指定したメソッドまたは使い慣れているメソッドだけを使用してください。注意事項
不明な呼び出し元または信頼されていない呼び出し元のメソッドを使用すると、悪意のあるコードに対する特権が昇格される可能性があります。
パラメーターまたは
typeResolver
パラメーターをassemblyResolver
省略した場合、パラメーターの値は、既定のthrowOnError
解決を実行するメソッドに渡されます。が の場合
throwOnError
、このメソッドは を返null
すときtypeResolver
に をTypeLoadExceptionスローし、 が を返す場合assemblyResolver
は をFileNotFoundExceptionスローしますnull
。true
このメソッドは、 および によってスローされた例外を
assemblyResolver
typeResolver
キャッチしません。 リゾルバー メソッドによってスローされる例外は、ユーザーが担当します。
アセンブリの解決
メソッドは assemblyResolver
オブジェクトを AssemblyName 受け取ります。これは、 に含まれる typeName
文字列アセンブリ名を解析することによって生成されます。 がアセンブリ名を含まない場合 typeName
、 assemblyResolver
は呼び出 null
されず、 に typeResolver
渡されます。
が指定されていない場合 assemblyResolver
は、標準アセンブリプローブを使用してアセンブリを検索します。 が指定されている場合 assemblyResolver
、 GetType メソッドは標準のプローブを実行しません。その場合は、渡すすべてのアセンブリを assemblyResolver
確実に処理できることを確認する必要があります。
アセンブリを assemblyResolver
解決できない場合、メソッドは を返す null
必要があります。 が を返す typeResolver
null
場合assemblyResolver
は が呼び出されず、それ以上の処理は行われません。さらに、 が のtrue
場合throwOnError
は がFileNotFoundExceptionスローされます。
AssemblyNameにassemblyResolver
渡される が部分名の場合、その部分の 1 つ以上は になりますnull
。 たとえば、バージョンがない場合、 Version プロパティは です null
。 Versionプロパティ、プロパティ、CultureInfoおよび メソッドがすべて をGetPublicKeyToken返すnull
場合は、アセンブリの単純な名前のみが指定されました。 メソッドは assemblyResolver
、アセンブリ名のすべての部分を使用または無視できます。
さまざまなアセンブリ解決オプションの効果は、単純な型名とアセンブリ修飾型名の場合は、[ 名前解決の混在 ] セクションにテーブルとして表示されます。
型の解決
がアセンブリ名を指定しない場合 typeName
は、 typeResolver
が常に呼び出されます。 アセンブリ名を指定する場合 typeName
は、 typeResolver
アセンブリ名が正常に解決された場合にのみ が呼び出されます。 または標準アセンブリプローブが を返すnull
typeResolver
場合assemblyResolver
、 は呼び出されません。
メソッドは typeResolver
、次の 3 つの引数を受け取ります。
検索するアセンブリ。または
null
がアセンブリ名を含まない場合typeName
は 。型の単純な名前。 入れ子になった型の場合、これは最も外側の格納型です。 ジェネリック型の場合、これはジェネリック型の単純な名前です。
型名の大文字と小文字を無視する場合のブール値
true
。
実装によって、これらの引数の使用方法が決まります。 型を解決できない場合、メソッドは typeResolver
を返す null
必要があります。 が を返null
しthrowOnError
、 が のtrue
場合typeResolver
、 のGetTypeこのオーバーロードは をTypeLoadExceptionスローします。
異なる型解決オプションの効果は、単純型名とアセンブリ修飾型名の場合、[ 名前解決の混在 ] セクションにテーブルとして表示されます。
入れ子になった型の解決
が入れ子になった型の場合 typeName
、最も外側の格納型の名前のみが に typeResolver
渡されます。 この型を返すと typeResolver
、最も内側の GetNestedType 入れ子になった型が解決されるまで、 メソッドが再帰的に呼び出されます。
ジェネリック型の解決
GetTypeは、ジェネリック型を解決するために再帰的に呼び出されます。最初にジェネリック型自体を解決してから、その型引数を解決します。 型引数がジェネリックの場合、 GetType 型引数を解決するために 再帰的に が呼び出されます。
指定する と typeResolver
のassemblyResolver
組み合わせは、この再帰のすべてのレベルを解決できる必要があります。 たとえば、 の読み込みをMyAssembly
制御する を指定assemblyResolver
するとします。 ジェネリック型 Dictionary<string, MyType>
(Dictionary(Of String, MyType)
Visual Basic の場合) を解決するとします。 次のジェネリック型名を渡すことができます。
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
が唯一のアセンブリ修飾型引数であることに MyType
注意してください。 クラスと String クラスのDictionary<TKey,TValue>名前はアセンブリ修飾されません。 と typeResolver
を受け取null
Dictionary<TKey,TValue>Stringるため、アセンブリまたは null
を処理できる必要があります。 非修飾型名の両方が /System.Private.CoreLib.dll 内にあるため、文字列を受け取るメソッドのオーバーロード GetType を呼び出すことで、そのケース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)
);
let t =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else null),
fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr))
assemblyResolver
ディクショナリ型と文字列型に対して メソッドは呼び出されません。これらの型名はアセンブリ修飾されていないためです。
ここで、 の代わりに、 の最初のSystem.String
ジェネリック引数型が であるとYourType
YourAssembly
します。
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
このアセンブリは /System.Private.CoreLib.dllmscorlib.dllでも、現在実行中のアセンブリでもないため、アセンブリ修飾名がないと解決 YourType
できません。 assemblyResolve
は再帰的に呼び出されるため、このケースを処理できる必要があります。 以外MyAssembly
のアセンブリに対して を返すnull
代わりに、指定されたAssemblyNameオブジェクトを使用してアセンブリの読み込みを実行するようになりました。
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
let t2 =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else Assembly.Load aName),
(fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr)), true)
[使用状況に関するメモ] に戻ります。
特殊文字を使用した型名の解決
特定の文字は、アセンブリ修飾名に特別な意味を持ちます。 単純型名にこれらの文字が含まれている場合、単純名がアセンブリ修飾名の一部である場合、文字の解析エラーが発生します。 解析エラーを回避するには、アセンブリ修飾名を メソッドに渡す前に、特殊文字を円記号でエスケープする GetType 必要があります。 たとえば、型に という名前が付けられているStrange]Type
場合、エスケープ文字を角かっこの前に追加する必要があります。 Strange\]Type
注意
このような特殊文字を持つ名前は Visual Basic または C# では作成できませんが、Microsoft 中間言語 (MSIL) を使用するか、動的アセンブリを生成して作成できます。
次の表に、型名の特殊文字を示します。
文字 | 説明 |
---|---|
, (コンマ) |
アセンブリ修飾名の区切り記号。 |
[] (角かっこ) |
サフィックスペアとして、 は配列型を示します。は区切り記号のペアとして、ジェネリック引数リストとアセンブリ修飾名を囲みます。 |
& (アンパサンド) |
サフィックスとして、 は、型が参照型であることを示します。 |
* (アスタリスク) |
サフィックスとして、 は型がポインター型であることを示します。 |
+ (プラス) |
入れ子になった型の区切り記号。 |
\ (円記号) |
エスケープ文字。 |
などの AssemblyQualifiedName プロパティは、正しくエスケープされた文字列を返します。 正しくエスケープされた文字列を メソッドに GetType 渡す必要があります。 さらに、 メソッドは GetType 、正しくエスケープされた名前を typeResolver
既定の型解決メソッドに渡します。 の名前とエスケープされていない名前 typeResolver
を比較する必要がある場合は、エスケープ文字を削除する必要があります。
[使用状況に関するメモ] に戻ります。
名前解決の混在
次の表は、 の型名とアセンブリ名typeName
のすべての組み合わせに対する、、typeResolver
、および既定の名前解決の相互作用assemblyResolver
をまとめたものです。
型名の内容 | アセンブリ リゾルバー メソッド | 型リゾルバー メソッド | 結果 |
---|---|---|---|
型、アセンブリ | null | null | メソッド オーバーロードの呼び出しと Type.GetType(String, Boolean, Boolean) 同じです。 |
型、アセンブリ | 提供 | null | assemblyResolver はアセンブリを返すか、アセンブリを null 解決できない場合は を返します。 アセンブリが解決された場合、 Assembly.GetType(String, Boolean, Boolean) メソッド オーバーロードを使用してアセンブリから型を読み込みます。それ以外の場合は、型を解決しようとしません。 |
型、アセンブリ | null | 提供 | アセンブリ名を オブジェクトに AssemblyName 変換し、メソッド オーバーロードを呼び出してアセンブリを Assembly.Load(AssemblyName) 取得するのと同じです。 アセンブリが解決されると、 に typeResolver 渡されます。それ以外の場合 typeResolver は が呼び出されず、型の解決はこれ以上試行されません。 |
型、アセンブリ | 提供 | 提供 | assemblyResolver はアセンブリを返すか、アセンブリを null 解決できない場合は を返します。 アセンブリが解決されると、 に typeResolver 渡されます。それ以外の場合 typeResolver は が呼び出されず、型の解決はこれ以上試行されません。 |
型 | null、指定 | null | メソッド オーバーロードの呼び出しと Type.GetType(String, Boolean, Boolean) 同じです。 アセンブリ名が指定されていないため、/System.Private.CoreLib.dll と現在実行中のアセンブリmscorlib.dllのみが検索されます。 が指定されている場合 assemblyResolver は無視されます。 |
型 | null、指定 | 提供 | typeResolver が呼び出され null 、アセンブリに渡されます。 typeResolver は、目的のために読み込まれるアセンブリを含め、任意のアセンブリから型を提供できます。 が指定されている場合 assemblyResolver は無視されます。 |
アセンブリ | null、指定 | null、指定 | FileLoadExceptionアセンブリ名がアセンブリ修飾型名であるかのように解析されるため、 がスローされます。 これにより、アセンブリ名が無効になります。 |
戻る: 使用法に関するメモ、 アセンブリの解決、 型の解決。