Freigeben über


MethodInfo.GetBaseDefinition-Methode

Gibt beim Überschreiben in einer abgeleiteten Klasse das MethodInfo-Objekt für die Methode in der direkten oder indirekten Basisklasse zurück, in der die durch diese Instanz dargestellte Methode zuerst deklariert wurde.

Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public MustOverride Function GetBaseDefinition As MethodInfo
'Usage
Dim instance As MethodInfo
Dim returnValue As MethodInfo

returnValue = instance.GetBaseDefinition
public abstract MethodInfo GetBaseDefinition ()
public:
virtual MethodInfo^ GetBaseDefinition () abstract
public abstract MethodInfo GetBaseDefinition ()
public abstract function GetBaseDefinition () : MethodInfo

Rückgabewert

Ein MethodInfo-Objekt für die erste Implementierung dieser Methode.

Hinweise

GetBaseDefinition gibt die erste Definition der angegebenen Methode in der Klassenhierarchie zurück.

Wenn die Methode für eine Schnittstelle deklariert wird, gibt GetBaseDefinition die Methode zurück.

Wenn die Methode in einer Basisklasse definiert wird, funktioniert GetBaseDefinition wie folgt:

  • Wenn eine angegebene Methode eine virtuelle Methode in der Basisklasse überschreibt, wird die virtuelle Definition zurückgegeben.

  • Wenn eine bestimmte Methode mit dem new-Schlüsselwort angegeben wird (z. B. in newslot, wie unter Typmember beschrieben), wird die angegebene Methode zurückgegeben.

  • Wenn die Methode nicht im Typ des Objekts definiert ist, für das GetBaseDefinition aufgerufen wird, wird die Methodendefinition an der höchsten Position in der Klassenhierarchie zurückgegeben.

Wenn Sie die GetBaseDefinition-Methode abrufen möchten, rufen Sie zunächst den Type der Klasse ab. Über Type rufen Sie MethodInfo ab. Über MethodInfo rufen Sie GetBaseDefinition ab.

Beispiel

Dieses Codebeispiel veranschaulicht das Verhalten von 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
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"); }
}
using namespace System;
using namespace System::Reflection;
public ref class A
{
public:
   virtual void B()
   {
      Console::WriteLine( "C" );
   }

   virtual void C()
   {
      Console::WriteLine( "C" );
   }

   virtual void D()
   {
      Console::WriteLine( "E" );
   }

};

public ref class B: public A
{
public:
   virtual void C() override
   {
      Console::WriteLine( "C" );
   }

   virtual void D() override
   {
      Console::WriteLine( "D" );
   }
};

int main()
{
   Type^ t = B::typeid;
   MethodInfo^ m;

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

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

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

public class GetBaseDef
{   
    public static void main(String[] args)
    {
        Type t = B.class.ToType();
        MethodInfo m;

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

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

        // Print B Void D().
        m = t.GetMethod("D",BindingFlags.Public | BindingFlags.Instance
            | BindingFlags.DeclaredOnly);
        Console.WriteLine((m.GetBaseDefinition().get_DeclaringType() + " " 
            + m.GetBaseDefinition()));
    } //main
} //GetBaseDef
 
public class A
{   
    public void B()
    {
        Console.WriteLine("C");
    } //B

    public void C()
    {
        Console.WriteLine("C");
    } //C

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

    public void D() 
    {
        Console.WriteLine("D");
    } //D
} //B 
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"); }
}

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

MethodInfo-Klasse
MethodInfo-Member
System.Reflection-Namespace

Weitere Ressourcen

Typmember