Type.GetNestedTypes Type.GetNestedTypes Type.GetNestedTypes Type.GetNestedTypes Method

定義

現在の Type 内で入れ子になっている型を取得します。Gets the types nested within the current Type.

オーバーロード

GetNestedTypes() GetNestedTypes() GetNestedTypes() GetNestedTypes()

現在の Type 内で入れ子になっているすべてのパブリック型を返します。Returns the public types nested in the current Type.

GetNestedTypes(BindingFlags) GetNestedTypes(BindingFlags) GetNestedTypes(BindingFlags) GetNestedTypes(BindingFlags)

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type 内で入れ子になっている型を検索します。When overridden in a derived class, searches for the types nested in the current Type, using the specified binding constraints.

GetNestedTypes() GetNestedTypes() GetNestedTypes() GetNestedTypes()

現在の Type 内で入れ子になっているすべてのパブリック型を返します。Returns the public types nested in the current Type.

public:
 virtual cli::array <Type ^> ^ GetNestedTypes();
public Type[] GetNestedTypes ();
abstract member GetNestedTypes : unit -> Type[]
override this.GetNestedTypes : unit -> Type[]
Public Function GetNestedTypes () As Type()

戻り値

Type[]

現在の Type 内で入れ子になっているパブリック型を表す Type オブジェクトの配列 (検索は非再帰的)。または、現在の Type で入れ子になっているパブリック型がない場合は、Type 型の空の配列。An array of Type objects representing the public types nested in the current Type (the search is not recursive), or an empty array of type Type if no public types are nested in the current Type.

実装

次の例では、入れ子にstruct MyClassなったクラスとのを定義し、のMyClass型を使用して、入れ子にされた型のオブジェクトを取得します。The following example defines a nested class and a struct in MyClass, and then obtains objects of the nested types using the type of MyClass.

using namespace System;
using namespace System::Reflection;
public ref class MyClass
{
public:
   ref class NestClass
   {
      public:
         static int myPublicInt = 0;
   };

   ref struct NestStruct
   {
      public:
         static int myPublicInt = 0;
   };
};

int main()
{
   try
   {
      // Get the Type object corresponding to MyClass.
      Type^ myType = MyClass::typeid;
      
      // Get an array of nested type objects in MyClass.
      array<Type^>^nestType = myType->GetNestedTypes();
      Console::WriteLine( "The number of nested types is {0}.", nestType->Length );
      System::Collections::IEnumerator^ myEnum = nestType->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Type^ t = safe_cast<Type^>(myEnum->Current);
         Console::WriteLine( "Nested type is {0}.", t );
      }
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Error {0}", e->Message );
   }
}

using System;
using System.Reflection;
public class MyClass 
{
    public class NestClass 
    {
        public static int myPublicInt=0;
    }
    public struct NestStruct
    {
        public static int myPublicInt=0;
    }
}

public class MyMainClass 
{
    public static void Main() 
    {
        try
        {
            // Get the Type object corresponding to MyClass.
            Type myType=typeof(MyClass);
            // Get an array of nested type objects in MyClass. 
            Type[] nestType=myType.GetNestedTypes();
            Console.WriteLine("The number of nested types is {0}.", nestType.Length);
            foreach(Type t in nestType)
                Console.WriteLine("Nested type is {0}.", t.ToString());
        }
        catch(Exception e)
        {
            Console.WriteLine("Error"+e.Message);  
        }         
    }
}
Imports System.Reflection

Public Class MyClass1
    Public Class NestClass
        Public Shared myPublicInt As Integer = 0
    End Class 'NestClass

    Public Structure NestStruct
        Public myPublicInt As Integer
    End Structure 'NestStruct
End Class 'MyClass1

Public Class MyMainClass
    Public Shared Sub Main()
        Try
            ' Get the Type object corresponding to MyClass.
            Dim myType As Type = GetType(MyClass1)
            ' Get an array of nested type objects in MyClass.                 
            Dim nestType As Type() = myType.GetNestedTypes()
            Console.WriteLine("The number of nested types is {0}.", nestType.Length)
            Dim t As Type
            For Each t In nestType
                Console.WriteLine("Nested type is {0}.", t.ToString())
            Next t
        Catch e As Exception
            Console.WriteLine("Error", e.Message.ToString())
        End Try
    End Sub
End Class 'MyMainClass

注釈

GetNestedTypesメソッドは、アルファベットまたは宣言の順序など、特定の順序で型を返しません。The GetNestedTypes method does not return types in a particular order, such as alphabetical or declaration order. コードは、型が返される順序に依存しないようにする必要があります。これは、その順序が異なるためです。Your code must not depend on the order in which types are returned, because that order varies.

現在の型ですぐに入れ子になっているパブリック型のみが返されます。検索は再帰的ではありません。Only the public types immediately nested in the current type are returned; the search is not recursive.

次の表は、型に対してリフレクションを行うときにGet 、メソッドによって返される基底クラスのメンバーを示しています。The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

メンバーの型Member Type スタティックStatic 非静的Non-Static
コンストラクターConstructor いいえNo いいえNo
フィールドField いいえNo はい。Yes. フィールドは、常に名前と署名で隠ぺいされます。A field is always hide-by-name-and-signature.
eventEvent 利用不可Not applicable 共通型システムの規則は、継承が、プロパティを実装するメソッドと同じであることを示します。The common type system rule is that the inheritance is the same as that of the methods that implement the property. リフレクションは、プロパティを名前で隠す、署名として扱います。Reflection treats properties as hide-by-name-and-signature. 下記のメモ2を参照してください。See note 2 below.
メソッドMethod いいえNo はい。Yes. メソッド (仮想と非仮想の両方) は、非表示にするか、名前と署名を隠すことができます。A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
入れ子にされた型Nested Type いいえNo いいえNo
プロパティProperty 利用不可Not applicable 共通型システムの規則は、継承が、プロパティを実装するメソッドと同じであることを示します。The common type system rule is that the inheritance is the same as that of the methods that implement the property. リフレクションは、プロパティを名前で隠す、署名として扱います。Reflection treats properties as hide-by-name-and-signature. 下記のメモ2を参照してください。See note 2 below.
  1. 名前による隠ぺいと署名では、カスタム修飾子、戻り値の型、パラメーターの型、sentinel、アンマネージ呼び出し規約を含む、シグネチャのすべての部分が考慮されます。Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. これは、バイナリ比較です。This is a binary comparison.

  2. リフレクションの場合、プロパティとイベントは、名前とシグネチャが隠ぺいされます。For reflection, properties and events are hide-by-name-and-signature. 基底クラスに get と set の両方のアクセサーを持つプロパティがあり、派生クラスに get アクセサーのみがある場合、派生クラスのプロパティは基底クラスのプロパティを非表示にします。基底クラスの setter にアクセスすることはできません。If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. カスタム属性は、共通型システムの一部ではありません。Custom attributes are not part of the common type system.

現在Typeのがジェネリック型またはジェネリックメソッドの定義の型パラメーターを表している場合、このメソッドは、クラス制約の入れ子にされた型を検索します。If the current Type represents a type parameter in the definition of a generic type or generic method, this method searches the nested types of the class constraint.

入れ子にされた型がジェネリックの場合、このメソッドはそのジェネリック型定義を返します。If a nested type is generic, this method returns its generic type definition. これは、外側のジェネリック型が構築されたクローズ型である場合にも当てはまります。This is true even if the enclosing generic type is a closed constructed type.

注意

現在Typeのが、、Visual Basic、またはC# C++で定義されているジェネリック型を表している場合、その入れ子になった型は、独自のジェネリックパラメーターがない場合でも、すべてジェネリックになります。If the current Type represents a generic type defined in C#, Visual Basic, or C++, its nested types are all generic even if they have no generic parameters of their own. これは、動的アセンブリで定義されている入れ子になった型や、 Ilasm (IL アセンブラー)でコンパイルされた型には必ずしも当てはまりません。This is not necessarily true of nested types defined in dynamic assemblies or compiled with the Ilasm.exe (IL Assembler).

入れ子になったジェネリック型の詳細、およびジェネリック型定義から入れ子になったジェネリック型MakeGenericTypeを構築する方法については、「」を参照してください。For information on nested generic types, and on constructing nested generic types from their generic type definitions, see MakeGenericType.

こちらもご覧ください

GetNestedTypes(BindingFlags) GetNestedTypes(BindingFlags) GetNestedTypes(BindingFlags) GetNestedTypes(BindingFlags)

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type 内で入れ子になっている型を検索します。When overridden in a derived class, searches for the types nested in the current Type, using the specified binding constraints.

public:
 abstract cli::array <Type ^> ^ GetNestedTypes(System::Reflection::BindingFlags bindingAttr);
public abstract Type[] GetNestedTypes (System.Reflection.BindingFlags bindingAttr);
abstract member GetNestedTypes : System.Reflection.BindingFlags -> Type[]
Public MustOverride Function GetNestedTypes (bindingAttr As BindingFlags) As Type()

パラメーター

bindingAttr
BindingFlags BindingFlags BindingFlags BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。A bitwise combination of the enumeration values that specify how the search is conducted.

- または --or- null を返す場合は DefaultDefault to return null.

戻り値

Type[]

指定したバインディング制約と一致する現在の Type で入れ子にされたすべての型を表す Type オブジェクトの配列 (検索は非再帰的)。または、バインディング制約と一致する入れ子にされた型が見つからない場合は、Type 型の空の配列。An array of Type objects representing all the types nested in the current Type that match the specified binding constraints (the search is not recursive), or an empty array of type Type, if no nested types are found that match the binding constraints.

実装

次の例では、2つの入れ子になったパブリッククラスと2つの入れ子になったプロテクトクラスを作成し、指定されたバインディング制約に一致するクラスの情報を表示します。The following example creates two nested public classes and two nested protected classes, and displays information for classes that match the specified binding constraints.

using namespace System;
using namespace System::Reflection;

// Create a class with two nested public classes and two nested protected classes.
public ref class MyTypeClass
{
   public:
      ref class Myclass1{};
   
   public:
      ref class Myclass2{};
   
   protected:
      ref class MyClass3{};
   
   protected:
      ref class MyClass4{};
};

void DisplayTypeInfo(array<Type^>^ myArrayType)
{
   // Display the information for all the nested classes.
   for each (Type^ t in myArrayType)
      Console::WriteLine( "The name of the nested class is {0}.", t->FullName);
}

int main()
{
   Type^ myType = MyTypeClass::typeid;
   
   // Get the public nested classes.
   array<Type^>^myTypeArray = myType->GetNestedTypes( static_cast<BindingFlags>(BindingFlags::Public));
   Console::WriteLine( "The number of nested public classes is {0}.", myTypeArray->Length );
  
   // Display all the public nested classes.
   DisplayTypeInfo( myTypeArray );
   Console::WriteLine();
   
   // Get the nonpublic nested classes.
   array<Type^>^myTypeArray1 = myType->GetNestedTypes( static_cast<BindingFlags>(BindingFlags::NonPublic));
   Console::WriteLine( "The number of nested protected classes is {0}.", myTypeArray1->Length );
   
   // Display all the nonpublic nested classes.
   DisplayTypeInfo( myTypeArray1 );
}
// The example displays the following output:
//       The number of public nested classes is 2.
//       The name of the nested class is MyTypeClass+Myclass1.
//       The name of the nested class is MyTypeClass+Myclass2.
//       
//       The number of protected nested classes is 2.
//       The name of the nested class is MyTypeClass+MyClass3.
//       The name of the nested class is MyTypeClass+MyClass4.
using System;
using System.Reflection;

// Create a class with 2 nested public and 2 nested protected classes.
public class MyTypeClass
{
    public class Myclass1
    {
    }

    public class Myclass2 
    {
    }

    protected class MyClass3
    {
    }

    protected class MyClass4
    {
    }
}

public class TypeMain
{
    public static void Main() 
    {
        Type myType = (typeof(MyTypeClass));
        // Get the public nested classes.
        Type[] myTypeArray = myType.GetNestedTypes(BindingFlags.Public);
        Console.WriteLine("The number of nested public classes is {0}.", myTypeArray.Length);
        // Display all the public nested classes.
        DisplayTypeInfo(myTypeArray);
        Console.WriteLine();
        
        // Get the nonpublic nested classes.
        Type[] myTypeArray1 = myType.GetNestedTypes(BindingFlags.NonPublic|BindingFlags.Instance);
        Console.WriteLine("The number of nested protected classes is {0}.", myTypeArray1.Length);
        // Display all the nonpublic nested classes.
        DisplayTypeInfo(myTypeArray1);		
    }

    public static void DisplayTypeInfo(Type[] myArrayType)
    {
        // Display the information for all the nested classes.
        foreach (var t in myArrayType)
            Console.WriteLine("The name of the nested class is {0}.", t.FullName);
    }
}
// The example displays the following output:
//       The number of public nested classes is 2.
//       The name of the nested class is MyTypeClass+Myclass1.
//       The name of the nested class is MyTypeClass+Myclass2.
//       
//       The number of protected nested classes is 2.
//       The name of the nested class is MyTypeClass+MyClass3.
//       The name of the nested class is MyTypeClass+MyClass4.
Imports System.Reflection

' Create a class with three properties.
Public Class MyTypeClass
    Public Class Myclass1
    End Class 

    Public Class Myclass2
    End Class 

    Protected Class MyClass3
    End Class 

    Protected Class MyClass4
    End Class 
End Class 

Public Class TypeMain
    Public Shared Sub Main()
        Dim myType As Type = GetType(MyTypeClass)

        ' Get the public nested classes.
        Dim myTypeArray As Type() = myType.GetNestedTypes((BindingFlags.Public))
        Console.WriteLine("The number of public nested classes is {0}.", myTypeArray.Length.ToString())
        ' Display all the public nested classes.
        DisplayTypeInfo(myTypeArray)
        Console.WriteLine()
        
        ' Get the nonpublic nested classes.
        Dim myTypeArray1 As Type() = myType.GetNestedTypes((BindingFlags.NonPublic))
        Console.WriteLine("The number of protected nested classes is {0}.", myTypeArray1.Length.ToString())
        ' Display  the information for all nested classes.
        DisplayTypeInfo(myTypeArray1)
    End Sub 

    Public Shared Sub DisplayTypeInfo(ByVal myArrayType() As Type)
        ' Display the information for all nested classes.
        For Each t In myArrayType
            Console.WriteLine("The name of the nested class is {0}.", t.FullName)
        Next 
    End Sub 
End Class  
' The example displays the following output:
'       The number of public nested classes is 2.
'       The name of the nested class is MyTypeClass+Myclass1.
'       The name of the nested class is MyTypeClass+Myclass2.
'       
'       The number of protected nested classes is 2.
'       The name of the nested class is MyTypeClass+MyClass3.
'       The name of the nested class is MyTypeClass+MyClass4.

注釈

入れ子になった型の検索は再帰的ではありません。The search for nested types is not recursive.

GetNestedTypesメソッドは、アルファベットまたは宣言の順序など、特定の順序で型を返しません。The GetNestedTypes method does not return types in a particular order, such as alphabetical or declaration order. コードは、型が返される順序に依存しないようにする必要があります。これは、その順序が異なるためです。Your code must not depend on the order in which types are returned, because that order varies.

検索にBindingFlags含める入れ子にされた型を定義するには、次のフィルターフラグを使用できます。The following BindingFlags filter flags can be used to define which nested types to include in the search:

このメソッドは、現在の型の入れ子にされた型のみを返します。This method returns only the nested types of the current type. 現在の型の基底クラスは検索されません。It does not search the base classes of the current type. 基底クラスで入れ子になっている型を見つけるには、継承階層についGetNestedTypesて説明し、各レベルでを呼び出します。To find types that are nested in base classes, you must walk the inheritance hierarchy, calling GetNestedTypes at each level.

BindingFlags.InstanceBindingFlags.Staticは無視されます。BindingFlags.Instance and BindingFlags.Static are ignored.

BindingFlags.Publicフラグだけを指定して、またはBindingFlags.NonPublicフラグだけを指定してこのメソッドを呼び出すと、指定した入れ子になった型が返され、他のフラグは必要ありません。Calling this method with only the BindingFlags.Public flag or only the BindingFlags.NonPublic flag will return the specified nested types and does not require any other flags.

詳細については、「System.Reflection.BindingFlags」を参照してください。See System.Reflection.BindingFlags for more information.

現在Typeのがジェネリック型またはジェネリックメソッドの定義の型パラメーターを表している場合、このメソッドは、クラス制約の入れ子にされた型を検索します。If the current Type represents a type parameter in the definition of a generic type or generic method, this method searches the nested types of the class constraint.

入れ子にされた型がジェネリックの場合、このメソッドはそのジェネリック型定義を返します。If a nested type is generic, this method returns its generic type definition. これは、外側のジェネリック型が構築されたクローズ型である場合にも当てはまります。This is true even if the enclosing generic type is a closed constructed type.

注意

現在Typeのが、、Visual Basic、またはC# C++で定義されているジェネリック型を表している場合、その入れ子になった型は、独自のジェネリックパラメーターがない場合でも、すべてジェネリックになります。If the current Type represents a generic type defined in C#, Visual Basic, or C++, its nested types are all generic even if they have no generic parameters of their own. これは、動的アセンブリで定義されている入れ子になった型や、 Ilasm (IL アセンブラー)でコンパイルされた型には必ずしも当てはまりません。This is not necessarily true of nested types defined in dynamic assemblies or compiled with the Ilasm.exe (IL Assembler).

入れ子になったジェネリック型の詳細、およびジェネリック型定義から入れ子になったジェネリック型MakeGenericTypeを構築する方法については、「」を参照してください。For information on nested generic types, and on constructing nested generic types from their generic type definitions, see MakeGenericType.

こちらもご覧ください

適用対象