Type.GetType メソッド (String, Boolean)

大文字と小文字を区別する検索を実行し、 Type の読み込み中にエラーが発生した場合に例外をスローするかどうかを指定して、指定した名前の Type を取得します。

Overloads Public Shared Function GetType( _
   ByVal typeName As String, _   ByVal throwOnError As Boolean _) As Type
[C#]
public static Type GetType(stringtypeName,boolthrowOnError);
[C++]
public: static Type* GetType(String* typeName,boolthrowOnError);
[JScript]
public static function GetType(
   typeName : String,throwOnError : Boolean) : Type;

パラメータ

  • typeName
    取得する Type の名前。

  • throwOnError
    発生した例外をすべてスローする場合は true

    または

    発生した例外をすべて無視する場合は false

戻り値

存在する場合は、指定した名前を持つ Type 。それ以外の場合は null 参照 (Visual Basic では Nothing) 。

例外

例外の種類 条件
ArgumentNullException typeName が null 参照 (Visual Basic では Nothing) です。
TargetInvocationException クラス初期化子が呼び出され、例外をスローしました。
TypeLoadException throwOnErrortrue で、 Type の読み込み中にエラーが発生しました。

解説

GetType は、ディスクから読み込まれたアセンブリ上だけで動作します。 System.Reflection.Emit サービスを使用して定義した動的アセンブリ内で定義した型を検索するために GetType を呼び出すと、矛盾する動作が発生する可能性があります。その動作は、動的アセンブリが永続的かどうかによって異なります。つまり、その動的アセンブリが System.Reflection.Emit.AssemblyBuilderAccess 列挙体の RunAndSave アクセス モードまたは Save アクセス モードのどちらを使用して作成されたかによって異なります。動的アセンブリが永続的で、 GetType が呼び出される前にディスクに書き込まれている場合、ローダーはディスク上に保存されているアセンブリを見つけて読み込み、そのアセンブリから型を取得します。 GetType が呼び出された時点でアセンブリがディスク上に保存されていない場合、このメソッドは null 参照 (Visual Basic では Nothing) を返します。 GetType は一時動的アセンブリを認識しないため、一時動的アセンブリ内の型を取得するために GetType を呼び出すと、 null 参照 (Nothing) が返されます。

動的モジュールの GetType を使用するには、 AppDomain.AssemblyResolve イベントをサブスクライブし、保存する前に GetType を呼び出します。保存する前に呼び出さないと、メモリに 2 つのコピーが作成されることになります。

要求された型がパブリックではなく、呼び出し元に現在のアセンブリ外の非パブリック オブジェクトをリフレクションするための ReflectionPermission がない場合、このメソッドは null 参照 (Nothing) を返します。

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

メンバ型 静的 非静的
コンストラクタ いいえ いいえ
フィールド いいえ はい。フィールドは常に名前と署名によって隠ぺいされます。
イベント 適用なし 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。
メソッド いいえ はい。メソッド (仮想メソッドと非仮想メソッドの両方) は、名前によって隠蔽することもできますし、名前と署名によって隠蔽することもできます。
入れ子になった型 いいえ いいえ
プロパティ 適用なし 共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。
  1. 名前と署名による隠ぺいでは、カスタム修飾子、戻り値の型、パラメータの型、sentinel、およびアンマネージ呼び出し規約を含めて、署名のすべての部分が判断の対象となります。これはバイナリ比較です。
  2. リフレクションの場合、プロパティおよびイベントは名前と署名によって隠ぺいされています。基本クラスに get アクセサと set アクセサの両方を持つプロパティがあり、派生クラスには get アクセサしかない場合、派生クラスのプロパティにより基本クラスのプロパティが隠ぺいされ、基本クラスの set アクセサにはアクセスできません。
  3. カスタム属性は、共通の型システムの一部ではありません。

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

typeName には、単純型名、名前空間を含む型名、またはアセンブリ名の指定を含む複合名を指定できます。

typeNameType の名前だけが含まれている場合、このメソッドは最初に呼び出し元のオブジェクトのアセンブリで検索を行い、次に mscorlib.dll アセンブリで検索を行います。typeName が部分アセンブリ名または完全アセンブリ名で完全限定されている場合、このメソッドは指定されたアセンブリで検索を行います。

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

区切り記号 意味
円記号 (\) エスケープ文字。
コンマ (,) アセンブリ名の前に置きます。
プラス記号 (+) 入れ子になったクラスの前に置きます。
ピリオド (.) 名前空間識別子を示します。

たとえば、クラスの完全限定名は次のようになります。

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 が型を示します。

アセンブリ名を除くすべての型名コンポーネントで、スペースには意味があります。アセンブリ名では、区切り記号 ',' の前のスペースには意味がありますが、区切り記号 ',' の後のスペースは無視されます。

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

取得対象 使用方法
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[*,*]") または Type.GetType("MyArray[,]")

使用例

[Visual Basic, C#, C++] System.Int32 の型を取得し、その型オブジェクトを使用して、 System.Int32FullName プロパティを表示する例を次に示します。型オブジェクトが存在しないアセンブリを参照している場合、この例では例外がスローされます。

 
Imports System
Namespace MyTypeNameSpace
    Class MyClass1
        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)
                ' 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(e.Message.ToString())
            Catch e As Exception
                Console.WriteLine(e.Message.ToString())
            End Try
        End Sub 'Main
    End Class 'MyClass1
End Namespace 'MyTypeNameSpace

[C#] 
using System;
namespace MyTypeNameSpace
{
    class MyClass
    {
        public static void Main(string[] arg)
        {
            try
            {
                // Get the type of a specified class.
                Type myType1 = Type.GetType("System.Int32");
                Console.WriteLine("The full name is {0}.", myType1.FullName);
                // 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(e.Message);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;

int main() {
   try {
      // Get the type of a specified class.
      Type*  myType1 = Type::GetType(S"System.Int32");
      Console::WriteLine(S"The full name is {0}.", myType1->FullName);
      // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
      Type*  myType2 = Type::GetType(S"NoneSuch", true);
      Console::WriteLine(S"The full name is {0}.", myType2->FullName);
   } catch (TypeLoadException* e) {
      Console::WriteLine(e->Message);
   } catch (Exception* e) {
      Console::WriteLine(e->Message);
   }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

.NET Framework セキュリティ:

参照

Type クラス | Type メンバ | System 名前空間 | Type.GetType オーバーロードの一覧 | String | TypeLoadException | ReflectionPermission | AssemblyQualifiedName | GetAssembly | GetType | AssemblyName | 完全限定型名の指定