情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Type.GetType メソッド (String)

2013/12/12

大文字と小文字を区別する検索を実行して、指定した名前の Type を取得します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public static Type GetType(
	string typeName
)

パラメーター

typeName
型: System.String
取得する型のアセンブリ修飾名。詳細については、AssemblyQualifiedName のトピックを参照してください。型が現在実行されているアセンブリ内または Mscorlib.dll にある場合は、名前空間で修飾された型名を提供するだけで十分です。

戻り値

型: System.Type
存在する場合は、指定した名前を持つ Type。それ以外の場合は null

例外条件
ArgumentNullException

typeNamenull です。

TargetInvocationException

クラス初期化子が呼び出され、例外をスローしました。

ArgumentException

typeName は、型引数の 1 つとしてポインター型、ByRef、または Void を持つジェネリック型を表しています。

または

typeName が、正しい数の型引数が格納されていないジェネリック型を表しています。

または

typeName がジェネリック型を表しており、その型引数の 1 つが対応する型パラメーターの制約を満たしていません。

FileNotFoundException

アセンブリまたはその依存関係の 1 つが見つかりません。

FileLoadException

アセンブリまたはその依存関係の 1 つが見つかりましたが、読み込むことができませんでした。

BadImageFormatException

アセンブリまたはその依存関係の 1 つが無効です。

または

アセンブリは、新しいバージョンの .NET Framework でコンパイルされました。

名前空間修飾名がわかっている場合は、GetType メソッドを使用して、別のアセンブリ内の型の Type オブジェクトを取得できます。GetType により、typeName で指定されたアセンブリが読み込まれます。また、Load メソッドを使用してアセンブリを読み込み、Assembly クラスの GetType メソッドまたは GetTypes メソッドを使用して Type オブジェクトを取得することもできます。型がコンパイル時にプログラムで認識されるアセンブリである場合は、typeof (C# の場合)、GetType (Visual Basic の場合)、または typeid (C++ の場合) を使用すると効率的です。

型に対するリフレクション時に Get メソッドによって返される基本クラスのメンバーを次の表に示します。

メンバー型

静的

非静的

コンストラクター

いいえ

いいえ

フィールド

いいえ

はい。フィールドは常に名前と署名によって隠ぺいされます。

イベント

該当なし

共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。

メソッド

いいえ

はい。メソッド (仮想メソッドと非仮想メソッドの両方) は、名前によって隠ぺいすることも、名前と署名によって隠ぺいすることもできます。

入れ子にされた型

いいえ

いいえ

プロパティ

該当なし

共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。

メモ:

  1. 名前と署名による隠ぺいでは、カスタム修飾子、戻り値の型、パラメーターの型、sentinel、およびアンマネージ呼び出し規約を含めて、署名のすべての部分が判断の対象となります。これはバイナリ比較です。

  2. リフレクションの場合、プロパティおよびイベントは名前と署名によって隠ぺいされています。基本クラスに get アクセサーと set アクセサーの両方を持つプロパティがあり、派生クラスには get アクセサーしかない場合、派生クラスのプロパティにより基本クラスのプロパティが隠ぺいされ、基本クラスの set アクセサーにはアクセスできません。

  3. カスタム属性は、共通型システムの一部ではありません。

使用できるクラスのテーブルに事前に読み込まれていない限り、配列や COM 型は検索対象になりません。

typeName は、名前空間で修飾された型名であるか、またはアセンブリ名の指定を含むアセンブリ修飾名である可能性があります。詳細については、AssemblyQualifiedName のトピックを参照してください。

typeName に名前空間が含まれていて、アセンブリでない場合、このメソッドは呼び出し元のオブジェクトのアセンブリと Mscorlib.dll のみをこの順序で検索します。typeName が部分アセンブリ名または完全アセンブリ名で完全限定されている場合、このメソッドは指定されたアセンブリで検索を行います。アセンブリが厳密な名前を持っている場合、完全なアセンブリ名を指定する必要があります。

AssemblyQualifiedName プロパティは、入れ子にされた型、アセンブリ名、およびジェネリック型引数を含む完全修飾型名を返します。入れ子になったクラスに対して、共通言語ランタイムをサポートするすべてのコンパイラは簡易名を生成し、リフレクションが、照会されたときに次の規則に従って完全限定名を生成します。

Delimiter

説明

円記号 (\)

エスケープ文字。

バックチック (`)

ジェネリック型の名前の最後に配置される、型パラメーターの数を表す 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) (Visual Basic の場合)、または Tuple<T> および Tuple<T0, T1> (Visual C# の場合) から、完全修飾名の Tuple`1 および Tuple`2 を返します。

ジェネリック型の場合、型引数リストは角かっこで囲まれ、型引数はコンマで区切られます。たとえば、ジェネリック型の Dictionary<TKey, TValue> には 2 種類のパラメーターがあります。型 String のキーを持つ MyTypeDictionary<TKey, TValue> は、次のように表されます。

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

型引数リスト内のアセンブリ修飾型を指定するには、アセンブリ修飾型を角かっこで囲みます。囲まなかった場合、アセンブリ修飾名の各部分を区切るコンマが追加の区切りの型引数として解釈されます。たとえば、型 String のキーを持つ、MyAssembly.dll からの MyTypeDictionary<TKey, TValue> は、次のように指定できます。

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

アセンブリ修飾型を角かっこで囲むことができるのは、型パラメーター リスト内に存在する場合のみです。修飾型および非修飾型のアセンブリを型パラメーター リストで検索する規則は、修飾および非修飾の非ジェネリック型を検索する規則と同じです。

Null 許容型は、ジェネリック型の特殊なケースです。たとえば、null 許容の Int32 は、文字列 "System.Nullable`1[System.Int32]" によって表されます。

メモメモ:

C#、C++、および Visual Basic では、型オペレーターを使用して Null 許容型を取得することもできます。たとえば、null 許容の Boolean 型は、typeof(Nullable<bool>) (C# の場合)、Nullable<Boolean>::typeid (C++ の場合)、および GetType(Nullable(Of Boolean)) (Visual Basic の場合) によって返されます。

さまざまな種類の GetType で使用する構文を次の表に示します。

取得対象

使用方法

null 許容の Int32

Type.GetType("System.Nullable`1[System.Int32]")

MyType へのアンマネージ ポインター

Type.GetType("MyType*")

MyType へのアンマネージ ポインター

Type.GetType("MyType**")

MyType へのマネージ ポインターまたは参照

Type.GetType("MyType&")。ポインターとは異なり、参照は、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]]")

バージョンについてのメモ

Windows Phone

無効なパラメーターを渡した場合に、GetType が常に ArgumentException 例外をスローするわけではありません。型 Exception の例外をキャッチして、予期しない例外をトラップします。

System.Int32 の型を取得し、その型オブジェクトを使用して、System.Int32FullName プロパティを表示する例を次に示します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
class Example
{
    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        try
        {
            // Get the type of a specified class.
            Type myType1 = Type.GetType("System.Int32");
            outputBlock.Text += String.Format("The full name is {0}.", myType1.FullName) + "\n";
            // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
            Type myType2 = Type.GetType("NoneSuch", true);
            outputBlock.Text += String.Format("The full name is {0}.", myType2.FullName) + "\n";
        }
        catch (TypeLoadException e)
        {
            outputBlock.Text += e.Message + "\n";
        }
        catch (Exception e)
        {
            outputBlock.Text += e.Message + "\n";
        }
    }
}

/* This example produces output similar to the following:

The full name is System.Int32.
Could not load type 'NoneSuch' from assembly 'SilverlightApplication, Version=0.0.0.0, Culture = neutral, PublicKeyToken=null'.
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: