クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
.NET 開発
以前のバージョン
.NET Framework SDK 2.0
System
Type クラス
Type メソッド
GetType メソッド
 GetType メソッド (String)

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2005/.NET Framework 2.0

その他のバージョンについては、以下の情報を参照してください。
.NET Framework クラス ライブラリ
Type.GetType メソッド (String)

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

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)

Visual Basic (宣言)
Public Shared Function GetType ( _
    typeName As String _
) As Type
Visual Basic (使用法)
Dim typeName As String
Dim returnValue As Type

returnValue = Type.GetType(typeName)
C#
public static Type GetType (
    string typeName
)
C++
public:
static Type^ GetType (
    String^ typeName
)
J#
public static Type GetType (
    String typeName
)
JScript
public static function GetType (
    typeName : String
) : Type

パラメータ

typeName

取得する AssemblyQualifiedName の名前。

戻り値

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

ArgumentNullException

typeName が null 参照 (Visual Basic では Nothing) です。

TargetInvocationException

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

ArgumentException

typeName が無効です。たとえば、無効な文字が含まれているか、長さが 0 の文字列です。

TypeLoadException

typeName は、TypedReference の配列を表します。これは、.NET Framework Version 1.0 および 1.1 における null 参照を返すための動作からの変更です。

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

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

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

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

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

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

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

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

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

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

取得対象

使用方法

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[*,*]") または 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]]")

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

Visual Basic
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 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}.", 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 );
   }

}

J#
package MyTypeNameSpace; 

import System.*;

class MyClass
{
    public static void main(String[] args)
    {
        try {
            // Get the type of a specified class.
            Type myType1 = Type.GetType("System.Int32");
            Console.WriteLine("The full name is {0}.", myType1.get_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.get_FullName());
        }
        catch (TypeLoadException e) {
            Console.WriteLine(e.get_Message());
        }
        catch (System.Exception e) {
            Console.WriteLine(e.get_Message());
        }
    } //main
} //MyClass
  • ReflectionPermission  (非パブリック オブジェクトをリフレクション操作するために必要なアクセス許可)。ReflectionPermissionFlag.TypeInformation (関連する列挙体)

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。

.NET Framework

サポート対象 : 2.0、1.1、1.0

.NET Compact Framework

サポート対象 : 2.0、1.0
コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
Page view tracker