次の方法で共有


MethodInfo.GetBaseDefinition メソッド

派生クラスによってオーバーライドされた場合、このインスタンスが表すメソッドが最初に宣言された直接または間接基本クラスで、そのメソッドの MethodInfo オブジェクトを返します。

Public MustOverride Function GetBaseDefinition() As MethodInfo
[C#]
public abstract MethodInfo GetBaseDefinition();
[C++]
public: virtual MethodInfo* GetBaseDefinition() = 0;
[JScript]
public abstract function GetBaseDefinition() : MethodInfo;

戻り値

このメソッドの最初の実装に対する MethodInfo オブジェクト。

解説

GetBaseDefinition は、指定したメソッドについて、クラス階層構造における最初の定義を返します。

メソッドがインターフェイスで宣言されている場合、 GetBaseDefinition はそのメソッドを返します。

メソッドが基本クラスで定義されている場合、 GetBaseDefinition は次のように動作します。

  • メソッドが基本クラスの仮想定義をオーバーライドしている場合、その仮想定義が返されます。
  • メソッドが new キーワード (「 Type メンバ 」の newslot など) を使用して指定されている場合は、そのメソッドが返されます。
  • メソッドが、 GetBaseDefinition が呼び出されたオブジェクトの型で定義されていない場合、クラスの階層構造で最上位のメソッド定義が返されます。

GetBaseDefinition メソッドを取得するには、最初に Type クラスを取得します。type から MethodInfo を取得します。最後に、 MethodInfo から GetBaseDefinition を取得します。

使用例

このコード例は、 GetBaseDefinition の動作を示しています。

 
Imports System
Imports System.Reflection

Public Class GetBaseDef
    
    Public Shared Sub Main()
        Dim t As Type = GetType(B)
        Dim m As MethodInfo
        
        ' Print A Void B().
        m = t.GetMethod("B")
        Console.WriteLine(m.GetBaseDefinition().DeclaringType.ToString() + " " _
           + m.GetBaseDefinition().ToString())
        
        ' Print A Void C().
        m = t.GetMethod("C")
        Console.WriteLine(m.GetBaseDefinition().DeclaringType.ToString() + " " _
           + m.GetBaseDefinition().ToString())
        
        ' Print B Void D().
        m = t.GetMethod("D", BindingFlags.Public Or BindingFlags.Instance _
           Or BindingFlags.DeclaredOnly)
        Console.WriteLine(m.GetBaseDefinition().DeclaringType.ToString() + " " _
           + m.GetBaseDefinition().ToString())
    End Sub
    
End Class
 

Public Class A
    
    Public Overridable Sub B()
        Console.WriteLine("C")
    End Sub
    
    Public Overridable Sub C()
        Console.WriteLine("C")
    End Sub
    
    Public Overridable Sub D()
        Console.WriteLine("E")
    End Sub
End Class
 
Public Class B
    Inherits A
    
    Public Overrides Sub C()
        Console.WriteLine("C")
    End Sub
    
    Public Shadows Sub D()
        Console.WriteLine("D")
    End Sub
End Class

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

public class GetBaseDef {
    public static void Main(String[] args)
    {
    Type t = typeof(B);
    MethodInfo m;

    // Print A Void B().
    m = t.GetMethod("B");
    Console.WriteLine(m.GetBaseDefinition().DeclaringType + " " + m.GetBaseDefinition());

    // Print A Void C().
    m = t.GetMethod("C");
    Console.WriteLine(m.GetBaseDefinition().DeclaringType + " " + m.GetBaseDefinition());

    // Print B Void D().
    m = t.GetMethod("D", (BindingFlags.Public |
                  BindingFlags.Instance |
                  BindingFlags.DeclaredOnly));
    Console.WriteLine(m.GetBaseDefinition().DeclaringType + " " + m.GetBaseDefinition());
    }

}

public class A
{
    public virtual void B() { Console.WriteLine("C"); }
    public virtual void C() { Console.WriteLine("C"); }
    public virtual void D() { Console.WriteLine("E"); }
}

public class B : A
{
    public override void C() { Console.WriteLine("C"); }
    public new void D()  { Console.WriteLine("D"); }
}

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

public __gc class A
{
public:
    virtual void B() { Console::WriteLine(S"C"); }
    virtual void C() { Console::WriteLine(S"C"); }
    virtual void D() { Console::WriteLine(S"E"); }
};

public __gc class B : public A
{
public:
    void C() { Console::WriteLine(S"C"); }
    void D() { Console::WriteLine(S"D"); }
};

int main()
{
    Type* t = __typeof(B);
    MethodInfo* m;

    // Print A Void B().
    m = t->GetMethod(S"B");
    Console::WriteLine(S"{0} {1}", m->GetBaseDefinition()->DeclaringType, m->GetBaseDefinition());

    // Print A Void C().
    m = t->GetMethod(S"C");
    Console::WriteLine(S"{0} {1}", m->GetBaseDefinition()->DeclaringType, m->GetBaseDefinition());

    // Print B Void D().
    m = t->GetMethod(S"D",static_cast<BindingFlags>((BindingFlags::Public |
        BindingFlags::Instance |
        BindingFlags::DeclaredOnly)));
    Console::WriteLine(S"{0} {1}", m->GetBaseDefinition()->DeclaringType, m->GetBaseDefinition());
}

[JScript] 
import System;
import System.Reflection;

public class GetBaseDef {
    public static function Main() : void 
    {
    var t : Type = B;
    var m : MethodInfo;

    // Print A Void B().
    m = t.GetMethod("B");
    Console.WriteLine(m.GetBaseDefinition().DeclaringType + " " + m.GetBaseDefinition());

    // Print A Void C().
    m = t.GetMethod("C");
    Console.WriteLine(m.GetBaseDefinition().DeclaringType + " " + m.GetBaseDefinition());

    // Print B Void D().
    m = t.GetMethod("D", (BindingFlags.Public |
                  BindingFlags.Instance |
                  BindingFlags.DeclaredOnly));
    Console.WriteLine(m.GetBaseDefinition().DeclaringType + " " + m.GetBaseDefinition());
    }
}

GetBaseDef.Main();

public class A
{
    public function B() : void  { Console.WriteLine("C"); }
    public function C() : void { Console.WriteLine("C"); }
    public function D() : void { Console.WriteLine("E"); }
}

public class B extends A
{
    public override function C() : void { Console.WriteLine("C"); }
    public hide function D() : void { Console.WriteLine("D"); }
}

必要条件

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

参照

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