.NET Framework Class Library
MethodInfo..::.GetBaseDefinition Method

When overridden in a derived class, returns the MethodInfo object for the method on the direct or indirect base class in which the method represented by this instance was first declared.

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

Visual Basic (Declaration)
Public MustOverride Function GetBaseDefinition As MethodInfo
Visual Basic (Usage)
Dim instance As MethodInfo
Dim returnValue As MethodInfo

returnValue = instance.GetBaseDefinition()
C#
public abstract MethodInfo GetBaseDefinition()
Visual C++
public:
virtual MethodInfo^ GetBaseDefinition() abstract
JScript
public abstract function GetBaseDefinition() : MethodInfo

Return Value

Type: System.Reflection..::.MethodInfo
A MethodInfo object for the first implementation of this method.

Implements

_MethodInfo..::.GetBaseDefinition()()()
Remarks

GetBaseDefinition returns the first definition of the specified method in the class hierarchy.

If the method is declared on an interface, GetBaseDefinition returns the method.

If the method is defined in a base class, then GetBaseDefinition works as follows:

  • If a given method overrides a virtual definition in the base class, the virtual definition is returned.

  • If a given method is specified with the new keyword (as in newslot as described in Type Members), the given method is returned.

  • If the method is not defined in the type of the object on which GetBaseDefinition is called, the method definition highest in the class hierarchy is returned.

To get the GetBaseDefinition method, first get the class Type. From the Type, get the MethodInfo. From the MethodInfo, get the GetBaseDefinition.

Examples

This code example demonstrates the behavior of GetBaseDefinition.

Visual Basic
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"); }
}
Visual C++
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() );
}
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"); }
}
Platforms

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Version Information

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 3.5, 2.0, 1.0

XNA Framework

Supported in: 3.0, 2.0, 1.0
See Also

Reference

Other Resources

Tags :


Page view tracker