Type.IsGenericType プロパティとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > Type.IsGenericType プロパティの意味・解説 

Type.IsGenericType プロパティ

メモ : このプロパティは、.NET Framework version 2.0新しく追加されたものです。

現在の型がジェネリック型かどうかを示す値を取得します

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

Public Overridable ReadOnly
 Property IsGenericType As Boolean
Dim instance As Type
Dim value As Boolean

value = instance.IsGenericType
public virtual bool IsGenericType { get;
 }
public:
virtual property bool IsGenericType {
    bool get ();
}
/** @property */
public boolean get_IsGenericType ()

プロパティ
現在の型がジェネリック型場合trueそれ以外場合 false

解説解説

IsGenericType プロパティ使用してType オブジェクトジェネリック型を表すかどうか決定します。ContainsGenericParameters プロパティ使用してType オブジェクトオープン構築型を表すか、またはクローズ構築型を表すかを決定します

メモメモ

直接の型がジェネリックない場合IsGenericType プロパティfalse返します。たとえば、配列要素の型が A<int> (Visual Basic の場合A(Of Integer)) である場合配列そのものジェネリック型ではありません。

ジェネリック リフレクション使われる一般的な用語に関する一定の条件次の表に示します

用語

一定の条件

ジェネリック型定義

IsGenericTypeDefinition プロパティtrue です。

ジェネリック型定義します構築型は、型引数配列指定しジェネリック型定義を表す Type オブジェクトで MakeGenericType メソッド呼び出すことにより作成されます。

MakeGenericType は、ジェネリック型定義でのみ呼び出すことができます

すべてのジェネリック型定義ジェネリック型ですが (IsGenericType プロパティtrue)、ジェネリック型がすべてジェネリック型定義というわけではありません。

ジェネリック型

IsGenericType プロパティtrue です。

ジェネリック型には、ジェネリック型定義オープン構築型、またはクローズ構築型があります

配列型要素型がジェネリックである場合に、配列型そのものジェネリック型でないことに注意してくださいジェネリック型へのポインタを表す Type オブジェクトも同様です

オープン構築

ContainsGenericParameters プロパティtrue です。

例は、未割り当て型パラメータを持つジェネリック型ジェネリック型定義またはオープン構築型に入れ子にされた型、あるいは ContainsGenericParameters プロパティtrue である型引数を持つジェネリック型です。

オープン構築型のインスタンス作成できません。

オープン構築型がすべてジェネリック型ではないことに注意してください。たとえば、要素型がジェネリック型定義である配列ジェネリック型ではなくオープン構築型へのポインタジェネリック型ではありません。

クローズ構築

ContainsGenericParameters プロパティfalse です。

再帰的調べた場合に、この型には未割り当てジェネリック パラメータはありません。

ジェネリック型パラメータ

IsGenericParameter プロパティtrue です。

ジェネリック型定義で、後から割り当てられる型のプレースホルダです。

ジェネリック型引数

ジェネリック型パラメータなど任意の型にすることができます

型引数は、構築ジェネリック型作成するときに、MakeGenericType メソッド渡される Type オブジェクト配列として指定されます。結果の型のインスタンス作成される場合ContainsGenericParameters プロパティすべての型引数に対して false にする必要があります

次のコード例および表には、これらの用語およびインバリアントが示されています。Derived クラス基本クラス構築型なので、特に興味深いクラスです。型引数リスト内にさまざまな型および型パラメータ混在してます。

Public Class Base(Of T,
 U)
End Class
Public Class Derived(Of
 V) 
    Inherits Base(Of String,
 V)
    Public F As G(Of Derived(Of
 V))
    Public Class Nested
    End Class
End Class
Public Class G(Of T)
End Class 
public class Base<T,U> {}
public class Derived<V> : Base<String,V>
 
{
    public G<Derived<V>> F;
    public class Nested {}
}
public class G<T> {}
generic <typename T> public ref class
 G {};
generic <typename T, typename U> public ref class
 Base {};
generic <typename V> public ref class
 Derived : Base<String^,V> {
public:
    G<Derived<V>^>^ F;
    ref class Nested {};
};

BaseDerived、および G の各クラス使用して構築する例を次の表に示しますC++ および C#コードが同じである場合は、1 つのエントリのみが示されています。

一定の条件

Derived(Of V)

Derived<V>

この型の場合

IsGenericTypetrue です。

IsGenericTypeDefinitiontrue です。

ContainsGenericParameterstrue です。

Base(Of String, V)

Base<String,V>

Base<String^,V>

この型の場合

IsGenericTypetrue です。

IsGenericTypeDefinitionfalse です。

ContainsGenericParameterstrue です。

Dim d() As Derived(Of Integer)

Derived<int>[] d;

array<Derived<int>^>^ d;

変数 d の型の場合

d配列なので IsGenericTypefalse です。

IsGenericTypeDefinitionfalse です。

ContainsGenericParametersfalse です。

TU、および V (出現するあらゆる箇所で)

IsGenericParametertrue です。

型パラメータジェネリック型制約する方法がないので、IsGenericTypefalse です。

IsGenericTypeDefinitionfalse です。

ContainsGenericParametersfalse です。

フィールド F の型

IsGenericTypetrue です。

型は G型パラメータ割り当てられているので、IsGenericTypeDefinitionfalse です。これは MakeGenericType メソッド呼び出した場合と同じであることに注意してください

フィールド F の型が持っている型引数オープン構築型なので、ContainsGenericParameterstrue です。構築型の型引数 (Base) はジェネリック型定義なので、構築型は開いた型です。これは、IsGenericType プロパティ再帰的性質示してます。

入れ子になっているクラス Nested

Nested クラス固有のジェネリック型パラメータがなくても、ジェネリック型入れ子になっているので、IsGenericTypetrue です。

IsGenericTypeDefinitiontrue です。つまり、MakeGenericType メソッド呼び出して包含する型の型パラメータを提供できます (Derived)。

包含するDerivedジェネリック型パラメータ持っているので、ContainsGenericParameterstrue です。これは、ContainsGenericParameters プロパティ再帰的性質示してます。

使用例使用例

次のコード例では、「解説」で説明している型に対して IsGenericTypeIsGenericTypeDefinitionIsGenericParameter、および ContainsGenericParameters の各プロパティの値を示しますプロパティ値の詳細については、「解説」の表を参照してください

Imports System
Imports System.Reflection

' 
Public Class Base(Of T,
 U)
End Class

Public Class Derived(Of
 V) 
    Inherits Base(Of String,
 V)

    Public F As G(Of Derived(Of
 V))

    Public Class Nested
    End Class
End Class

Public Class G(Of T)
End Class 

Module Example

    Sub Main

        ' Get the generic type definition for Derived, and the base
        ' type for Derived.
        '
        Dim tDerived As Type = GetType(Derived(Of
 ))
        Dim tDerivedBase As Type = tDerived.BaseType

        ' Declare an array of Derived(Of Integer), and get its type.
        '
        Dim d(0) As Derived(Of
 Integer)
        Dim tDerivedArray As Type = d.GetType()

        ' Get a generic type parameter, the type of a field, and a
        ' type that is nested in Derived. Notice that in order to
        ' get the nested type it is necessary to either (1) specify
        ' the generic type definition Derived(Of ), as shown here,
        ' or (2) specify a type parameter for Derived.
        '
        Dim tT As Type = GetType(Base(Of
 ,)).GetGenericArguments()(0)
        Dim tF As Type = tDerived.GetField("F").FieldType
        Dim tNested As Type = GetType(Derived(Of
 ).Nested)

        DisplayGenericType(tDerived, "Derived(Of V)")
        DisplayGenericType(tDerivedBase, "Base type of Derived(Of
 V)")
        DisplayGenericType(tDerivedArray, "Array of Derived(Of
 Integer)")
        DisplayGenericType(tT, "Type parameter T from Base(Of
 T)")
        DisplayGenericType(tF, "Field type, G(Of Derived(Of V))")
        DisplayGenericType(tNested, "Nested type in Derived(Of
 V)")

    End Sub

    Sub DisplayGenericType(ByVal t As
 Type, ByVal caption As String)

        Console.WriteLine(vbLf & caption)
        Console.WriteLine("    Type: {0}", t)

        Console.WriteLine(vbTab & "            IsGenericType:
 {0}", _
            t.IsGenericType)
        Console.WriteLine(vbTab & "  IsGenericTypeDefinition:
 {0}", _
            t.IsGenericTypeDefinition)
        Console.WriteLine(vbTab & "ContainsGenericParameters:
 {0}", _
            t.ContainsGenericParameters)
        Console.WriteLine(vbTab & "       IsGenericParameter:
 {0}", _
            t.IsGenericParameter)

    End Sub

End Module

' This code example produces the following output:
'
'Derived(Of V)
'    Type: Derived`1[V]
'                    IsGenericType: True
'          IsGenericTypeDefinition: True
'        ContainsGenericParameters: True
'               IsGenericParameter: False
'
'Base type of Derived(Of V)
'    Type: Base`2[System.String,V]
'                    IsGenericType: True
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: True
'               IsGenericParameter: False
'
'Array of Derived(Of Integer)
'    Type: Derived`1[System.Int32][]
'                    IsGenericType: False
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: False
'               IsGenericParameter: False
'
'Type parameter T from Base(Of T)
'    Type: T
'                    IsGenericType: False
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: True
'               IsGenericParameter: True
'
'Field type, G(Of Derived(Of V))
'    Type: G`1[Derived`1[V]]
'                    IsGenericType: True
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: True
'               IsGenericParameter: False
'
'Nested type in Derived(Of V)
'    Type: Derived`1+Nested[V]
'                    IsGenericType: True
'          IsGenericTypeDefinition: True
'        ContainsGenericParameters: True
'               IsGenericParameter: False
using System;
using System.Reflection;

public class Base<T, U> {}

public class Derived<V> : Base<string,
 V>
{
    public G<Derived <V>> F;

    public class Nested {}
}

public class G<T> {}

class Example
{
    public static void Main()
    {
        // Get the generic type definition for Derived, and the base
        // type for Derived.
        //
        Type tDerived = typeof(Derived<>);
        Type tDerivedBase = tDerived.BaseType;

        // Declare an array of Derived<int>, and get its type.
        //
        Derived<int>[] d = new Derived<int>[0];
        Type tDerivedArray = d.GetType();

        // Get a generic type parameter, the type of a field, and a
        // type that is nested in Derived. Notice that in order to
        // get the nested type it is necessary to either (1) specify
        // the generic type definition Derived<>, as shown here
,
        // or (2) specify a type parameter for Derived.
        //
        Type tT = typeof(Base<,>).GetGenericArguments()[0];
        Type tF = tDerived.GetField("F").FieldType;
        Type tNested = typeof(Derived<>.Nested);

        DisplayGenericType(tDerived, "Derived<V>");
        DisplayGenericType(tDerivedBase, "Base type of Derived<V>");
        DisplayGenericType(tDerivedArray, "Array of Derived<int>");
        DisplayGenericType(tT, "Type parameter T from Base<T>");
        DisplayGenericType(tF, "Field type, G<Derived<V>>");
        DisplayGenericType(tNested, "Nested type in Derived<V>");
    }

    public static void DisplayGenericType(Type
 t, string caption)
    {
        Console.WriteLine("\n{0}", caption);
        Console.WriteLine("    Type: {0}", t);

        Console.WriteLine("\t            IsGenericType: {0}", 
            t.IsGenericType);
        Console.WriteLine("\t  IsGenericTypeDefinition: {0}", 
            t.IsGenericTypeDefinition);
        Console.WriteLine("\tContainsGenericParameters: {0}", 
            t.ContainsGenericParameters);
        Console.WriteLine("\t       IsGenericParameter: {0}", 
            t.IsGenericParameter);
    }
}

/* This code example produces the following output:

Derived<V>
    Type: Derived`1[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False

Base type of Derived<V>
    Type: Base`2[System.String,V]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Array of Derived<int>
    Type: Derived`1[System.Int32][]
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: False
               IsGenericParameter: False

Type parameter T from Base<T>
    Type: T
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: True

Field type, G<Derived<V>>
    Type: G`1[Derived`1[V]]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Nested type in Derived<V>
    Type: Derived`1+Nested[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False
 */
using namespace System;
using namespace System::Reflection;

generic<typename T, typename U> public ref class
 Base {};

generic<typename T> public ref class
 G {};

generic<typename V> public ref class
 Derived : Base<String^, V>
{
public: 
    G<Derived<V>^>^ F;

    ref class Nested {};
};

void DisplayGenericType(Type^ t, String^ caption)
{
    Console::WriteLine("\n{0}", caption);
    Console::WriteLine("    Type: {0}", t);

    Console::WriteLine("\t            IsGenericType: {0}", 
        t->IsGenericType);
    Console::WriteLine("\t  IsGenericTypeDefinition: {0}", 
        t->IsGenericTypeDefinition);
    Console::WriteLine("\tContainsGenericParameters: {0}", 
        t->ContainsGenericParameters);
    Console::WriteLine("\t       IsGenericParameter: {0}", 
        t->IsGenericParameter);
}

void main()
{
    // Get the generic type definition for Derived, and the base
    // type for Derived.
    //
    Type^ tDerived = Derived::typeid;
    Type^ tDerivedBase = tDerived->BaseType;

    // Declare an array of Derived<int>, and get its type.
    //
    array<Derived<int>^>^ d = gcnew array<Derived<int>^>(0);
    Type^ tDerivedArray = d->GetType();

    // Get a generic type parameter, the type of a field, and a
    // type that is nested in Derived. Notice that in order to
    // get the nested type it is necessary to either (1) specify
    // the generic type definition Derived::typeid, as shown here,
    // or (2) specify a type parameter for Derived.
    //
    Type^ tT = Base::typeid->GetGenericArguments()[0];
    Type^ tF = tDerived->GetField("F")->FieldType;
    Type^ tNested = Derived::Nested::typeid;

    DisplayGenericType(tDerived, "generic<V> Derived");
    DisplayGenericType(tDerivedBase, "Base type of generic<V> Derived");
    DisplayGenericType(tDerivedArray, "Array of Derived<int>");
    DisplayGenericType(tT, "Type parameter T from generic<T> Base");
    DisplayGenericType(tF, "Field type, G<Derived<V>^>^");
    DisplayGenericType(tNested, "Nested type in generic<V>
 Derived");
}

/* This code example produces the following output:

generic<V> Derived
    Type: Derived`1[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False

Base type of generic<V> Derived
    Type: Base`2[System.String,V]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Array of Derived<int>
    Type: Derived`1[System.Int32][]
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: False
               IsGenericParameter: False

Type parameter T from generic<T> Base
    Type: T
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: True

Field type, G<Derived<V>^>^
    Type: G`1[Derived`1[V]]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Nested type in generic<V> Derived
    Type: Derived`1+Nested[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False
 */
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照


このページでは「.NET Framework クラス ライブラリ リファレンス」からType.IsGenericType プロパティを検索した結果を表示しています。
Weblioに収録されているすべての辞書からType.IsGenericType プロパティを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からType.IsGenericType プロパティ を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Type.IsGenericType プロパティ」の関連用語

Type.IsGenericType プロパティのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Type.IsGenericType プロパティのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS