MemberInfo.DeclaringType プロパティ

このメンバを宣言するクラスを取得します。

Public MustOverride ReadOnly Property DeclaringType As Type
[C#]
public abstract Type DeclaringType {get;}
[C++]
public: __property virtual Type* get_DeclaringType() = 0;
[JScript]
public abstract function get DeclaringType() : Type;

プロパティ値

このメンバを宣言するクラスの Type オブジェクト。

解説

DeclaringType プロパティは、このメンバを宣言する型を表す Type オブジェクトへの参照を取得します。クラス (またはインターフェイス) のメンバは、宣言されるか、基本クラス (またはインターフェイス) から継承されます。返されるクラスは、この MemberInfo オブジェクトを取得するために使用した Type オブジェクトと異なる場合があります。

  • この MemberInfo オブジェクトの取得元の Type オブジェクトでこのメンバが宣言されていない場合、 DeclaringType は基本型のいずれか 1 つを表します。
  • MemberInfo オブジェクトがグローバル メンバの場合 (モジュールでグローバル メソッドを返す Module.GetMethods から取得されたメンバの場合)、返される DeclaringType は null 参照 (Visual Basic では Nothing) になります。

使用例

DeclaringType がクラスとインターフェイスに対してどのように機能し、 System.IO.BufferedStream クラスのメンバ名と一緒に、これらのメンバを宣言しているクラスを取得する例を次に示します。また、B が仮想メソッド M を A からオーバーライドする場合、実質的に B がこのメソッドを再定義 (再宣言) しています。そのため、このメソッドを最初に宣言したのは A ですが、B.M の MethodInfo は、メソッドの宣言型が A ではなく B であると報告します。

 
Imports System
Imports System.IO
Imports System.Reflection
Imports Microsoft.VisualBasic

Namespace MyNamespace1

    Interface i
        Function MyVar() As Integer
    End Interface
    ' DeclaringType for MyVar is i.

    Class A
        Implements i
        Function MyVar() As Integer Implements i.MyVar
            Return 0
        End Function
    End Class
    ' DeclaringType for MyVar is A.

    Class B
        Inherits A
        Function MyVars() As Integer
            Return 0
        End Function
    End Class
    ' DeclaringType for MyVar is B.

    Class C
        Inherits A
    End Class
    ' DeclaringType for MyVar is A.
End Namespace

Namespace MyNamespace2

    Class A
        Public Overridable Sub M()
        End Sub
    End Class

    Class B
        Inherits A
        Public Overrides Sub M()
        End Sub
    End Class
End Namespace
Class Mymemberinfo

    Public Shared Sub Main()

        Console.WriteLine(ControlChars.Cr & "Reflection.MemberInfo")

        'Get the Type and MemberInfo.
        Dim MyType As Type = Type.GetType("System.IO.BufferedStream")

        Dim Mymemberinfoarray As MemberInfo() = MyType.GetMembers()

        'Get and display the DeclaringType method.
        Console.WriteLine(ControlChars.Cr & "There are {0} members in {1}.", Mymemberinfoarray.Length, MyType.FullName)

        Dim Mymemberinfo As MemberInfo
        For Each Mymemberinfo In Mymemberinfoarray
            Console.WriteLine("The declaring type of {0} is {1}.", Mymemberinfo.Name, Mymemberinfo.DeclaringType.ToString())
        Next Mymemberinfo
    End Sub
End Class

[C#] 
using System;
using System.IO;
using System.Reflection;

namespace MyNamespace1 
{
    interface i 
    {
        int MyVar() ;
    };
    // DeclaringType for MyVar is i.
 
    class A : i 
    {
        public int MyVar() { return 0; }
    };
    // DeclaringType for MyVar is A.
 
    class B : A 
    {
        new int MyVar() { return 0; }
    };
    // DeclaringType for MyVar is B.
 
    class C : A 
    {
    };
    // DeclaringType for MyVar is A.

}

namespace MyNamespace2 
{
    class Mymemberinfo 
    { 
 
        public static void Main(string[] args) 
        { 
 
            Console.WriteLine ("\nReflection.MemberInfo");
 
            //Get the Type and MemberInfo. 
            Type MyType =Type.GetType("System.IO.BufferedStream");
            MemberInfo[] Mymemberinfoarray = MyType.GetMembers();
 
            //Get and display the DeclaringType method. 
            Console.WriteLine("\nThere are {0} members in {1}.", Mymemberinfoarray.Length, MyType.FullName); 
 
            foreach (MemberInfo Mymemberinfo in Mymemberinfoarray) 
            {  
                Console.WriteLine("Declaring type of {0} is {1}.", Mymemberinfo.Name, Mymemberinfo.DeclaringType); 
            }
        }
    }
}

namespace MyNamespace3 
{
    class A 
    {
        virtual public void M () {}
    }
    class B: A 
    {
        override public void M () {}
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
using namespace System::Reflection;

namespace MyNamespace1 
{
    __gc __interface i 
    {
        int MyVar() ;
    };
    // DeclaringType for MyVar is i.

    __gc class A : public i 
    {
    public:
        int MyVar() { return 0; }
    };
    // DeclaringType for MyVar is A.

    __gc class B : public A 
    {
        int MyVar() { return 0; }
    };
    // DeclaringType for MyVar is B.

    __gc class C : public A 
    {
    };
    // DeclaringType for MyVar is A.
}

int main() 
{ 

    Console::WriteLine (S"\nReflection.MemberInfo");

    //Get the Type and MemberInfo. 
    Type* MyType =Type::GetType(S"System.IO.BufferedStream");
    MemberInfo* Mymemberinfoarray[] = MyType->GetMembers();

    //Get and display the DeclaringType method. 
    Console::WriteLine(S"\nThere are {0} members in {1}.",
        __box(Mymemberinfoarray->Length), MyType->FullName); 

    System::Collections::IEnumerator* enum0 = Mymemberinfoarray->GetEnumerator();
    while (enum0->MoveNext())
    {
        MemberInfo* Mymemberinfo = __try_cast<MemberInfo*>(enum0->Current);  
        Console::WriteLine(S"Declaring type of {0} is {1}.",
            Mymemberinfo->Name, Mymemberinfo->DeclaringType); 
    }
}

namespace MyNamespace3 
{
    __gc class A 
    {
    public:
        virtual
            void M () {}
    };
    __gc class B: public A 
    {
    public:
        void M () {}
    };
}

[JScript] 

package MyPackage1 {

 interface i {
 function MyVar() : int ;
 };
 // DeclaringType for MyVar is i.
 
 class A implements i {
 public function MyVar() : int { return 0; }
 };
 // DeclaringType for MyVar is A.
 
 class B extends A {
 hide function MyVar() :  int{ return 0; }
 };
 // DeclaringType for MyVar is B.
 
 class C extends A {
 };
 // DeclaringType for MyVar is A.
}

import System;
import System.IO;
import System.Reflection;

class Mymemberinfo { 
 
   public static function Main() : void  { 
 
    Console.WriteLine ("\nReflection.MemberInfo");
 
    //Get the Type and MemberInfo. 
    var MyType : Type =Type.GetType("System.IO.BufferedStream");
    var Mymemberinfoarray : MemberInfo[] = MyType.GetMembers();
 
    //Get and display the DeclaringType method. 
    Console.Write("\nThere are {0} members in ", Mymemberinfoarray.Length); 
    Console.Write("{0}.", MyType.FullName); 
 
    for (var i : int in Mymemberinfoarray) {
      var Mymemberinfo : MemberInfo = Mymemberinfoarray[i];  
      Console.Write("\n" + Mymemberinfo.Name + " declaring type - "
        + Mymemberinfo.DeclaringType); 
    }
   }
}
Mymemberinfo.Main();


package MyPackage3 {
class A {
    public function M () : void  {}
}
class B extends A {
    override public function M () : void  {}
}
}

メモ    DeclaringType は、メンバ名と、そのメンバを宣言しているクラスの型だけを返します。メンバ名と一緒にプロトタイプを返すには、 MemberInfo.ToString を呼び出します。

必要条件

プラットフォーム: 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

参照

MemberInfo クラス | MemberInfo メンバ | System.Reflection 名前空間