MethodInfo.GetBaseDefinition Yöntem

Tanım

Türetilmiş bir sınıfta geçersiz kılınırsa, MethodInfo Bu örnek tarafından temsil edilen yöntemin ilk olarak bildirildiği doğrudan veya dolaylı temel sınıftaki yöntemin nesnesini döndürür.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.

public:
 abstract System::Reflection::MethodInfo ^ GetBaseDefinition();
public abstract System.Reflection.MethodInfo GetBaseDefinition ();
abstract member GetBaseDefinition : unit -> System.Reflection.MethodInfo
Public MustOverride Function GetBaseDefinition () As MethodInfo

Döndürülenler

MethodInfo

MethodInfoBu yöntemin ilk uygulamasına yönelik bir nesne.A MethodInfo object for the first implementation of this method.

Uygulamalar

Örnekler

Aşağıdaki örnek yönteminin davranışını gösterir GetBaseDefinition .The following example demonstrates the behavior of the GetBaseDefinition method.

using System;
using System.Reflection;

interface Interf
{
   string InterfaceImpl(int n);
}

public class BaseClass
{
   public override string ToString()
   {
      return "Base";
   }

   public virtual void Method1()
   {
      Console.WriteLine("Method1");
   }

   public virtual void Method2()
   {
      Console.WriteLine("Method2");
   }

   public virtual void Method3()
   {
      Console.WriteLine("Method3");
   }
}

public class DerivedClass : BaseClass, Interf
{
   public string InterfaceImpl(int n)
   {
      return n.ToString("N");
   }

   public override void Method2()
   {
      Console.WriteLine("Derived.Method2");
   }

   public new void Method3()
   {
      Console.WriteLine("Derived.Method3");
   }
}

public class Example
{
   public static void Main()
   {
      Type t = typeof(DerivedClass);
      MethodInfo m, mb;
      string[] methodNames = { "ToString", "Equals", "InterfaceImpl",
                               "Method1", "Method2", "Method3" };

      foreach (var methodName in methodNames) {
         m = t.GetMethod(methodName);
         mb = m.GetBaseDefinition();
         Console.WriteLine("{0}.{1} --> {2}.{3}", m.ReflectedType.Name,
                           m.Name, mb.ReflectedType.Name, mb.Name);
      }
   }
}
// The example displays the following output:
//       DerivedClass.ToString --> Object.ToString
//       DerivedClass.Equals --> Object.Equals
//       DerivedClass.InterfaceImpl --> DerivedClass.InterfaceImpl
//       DerivedClass.Method1 --> BaseClass.Method1
//       DerivedClass.Method2 --> BaseClass.Method2
//       DerivedClass.Method3 --> DerivedClass.Method3
Imports System.Reflection

Interface Interf
   Function InterfaceImpl(n As Integer) As String
End Interface

Public Class BaseClass
   Public Overrides Function ToString() As String
      Return "Base"
   End Function

   Public Overridable Sub Method1()
      Console.WriteLine("Method1")
   End Sub

   Public Overridable Sub Method2()
      Console.WriteLine("Method2")
   End Sub

   Public Overridable Sub Method3()
      Console.WriteLine("Method3")
   End Sub
End Class

Public Class DerivedClass : Inherits BaseClass : Implements Interf
   Public Function InterfaceImpl(n As Integer) As String _
                   Implements Interf.InterfaceImpl
      Return n.ToString("N")
   End Function

   Public Overrides Sub Method2()
      Console.WriteLine("Derived.Method2")
   End Sub

   Public Shadows Sub Method3()
      Console.WriteLine("Derived.Method3")
   End Sub
End Class

Module Example
   Public Sub Main()
      Dim t As Type = GetType(DerivedClass)
      Dim m, mb As MethodInfo
      Dim methodNames() As String = { "ToString", "Equals",
                                      "InterfaceImpl", "Method1",
                                      "Method2", "Method3" }

      For Each methodName In methodNames
         m = t.GetMethod(methodName)
         mb = m.GetBaseDefinition()
         Console.WriteLine("{0}.{1} --> {2}.{3}", m.ReflectedType.Name,
                           m.Name, mb.ReflectedType.Name, mb.Name)
      Next
   End Sub
End Module
' The example displays the following output:
'       DerivedClass.ToString --> Object.ToString
'       DerivedClass.Equals --> Object.Equals
'       DerivedClass.InterfaceImpl --> DerivedClass.InterfaceImpl
'       DerivedClass.Method1 --> BaseClass.Method1
'       DerivedClass.Method2 --> BaseClass.Method2
'       DerivedClass.Method3 --> DerivedClass.Method3

Açıklamalar

GetBaseDefinitionYöntemi, sınıf hiyerarşisinde belirtilen metodun ilk tanımını döndürür.The GetBaseDefinition method returns the first definition of the specified method in the class hierarchy. DeclaringTypeDöndürülen nesne üzerinde özelliğin değerini alarak yöntemin ilk tanımının bulunduğu türü belirleyebilirsiniz, MethodInfo .You can determine the type on which the first definition of the method is found by retrieving the value of the DeclaringType property on the returned MethodInfo object.

GetBaseDefinitionYöntemi aşağıdaki gibi davranır:The GetBaseDefinition method behaves as follows:

  • Geçerli MethodInfo nesne bir arabirim uygulamasını temsil ediyorsa, GetBaseDefinition yöntemi geçerli MethodInfo nesneyi döndürür.If the current MethodInfo object represents an interface implementation, the GetBaseDefinition method returns the current MethodInfo object.

  • Geçerli nesne bir MethodInfo temel sınıftaki sanal tanımı geçersiz kılan bir yöntemi temsil ediyorsa, GetBaseDefinition yöntemi MethodInfo sanal tanımı temsil eden bir nesne döndürür.If the current MethodInfo object represents a method that overrides a virtual definition in a base class, the GetBaseDefinition method returns a MethodInfo object that represents the virtual definition.

  • Geçerli nesne, MethodInfo new C# ' deki anahtar sözcüğüyle veya Visual Basic anahtar kelimesiyle belirtilen bir yöntemi temsil ediyorsa Shadows ( newslot , ortak tür sistemindeaçıklandığı gibi), GetBaseDefinition yöntemi geçerli MethodInfo nesneyi döndürür.If the current MethodInfo object represents a method that is specified with the new keyword in C# or the Shadows keyword in Visual Basic (as in newslot, as described in Common Type System), the GetBaseDefinition method returns the current MethodInfo object.

  • Geçerli MethodInfo nesne devralınmış bir yöntemi temsil ediyorsa (yani, geçerli yöntem kendi uygulamasını sağlamıyorsa), GetBaseDefinition yöntemi MethodInfo sınıf hiyerarşisinde en düşük yöntemi temsil eden bir nesne döndürür.If the current MethodInfo object represents an inherited method (that is, the current method does not provide its own implementation), the GetBaseDefinition method returns a MethodInfo object that represents the lowest method in the class hierarchy. Örneğin, Base.ToString geçersiz kılmalar Object.ToString ve Derived.ToString geçersiz kılmalar, öğesini Base.ToString GetBaseDefinition temsil eden bir nesne üzerinde çağırmak öğesini MethodInfo temsil eden Derived.ToString bir MethodInfo nesne döndürür Object.ToString .For example, if Base.ToString overrides Object.ToString, and Derived.ToString overrides Base.ToString, calling the GetBaseDefinition method on a MethodInfo object that represents Derived.ToString returns a MethodInfo object that represents Object.ToString.

  • Geçerli MethodInfo nesne herhangi bir temel sınıfta mevcut olmayan bir yöntemi temsil ediyorsa, GetBaseDefinition yöntemi geçerli MethodInfo nesneyi döndürür.If the current MethodInfo object represents a method that is not present in any base class, the GetBaseDefinition method returns the current MethodInfo object.

Geçerli yöntemin, yöntemi çağırarak bir temel sınıfta bir yöntemi geçersiz kılıp kılmadığını belirleyebilirsiniz GetBaseDefinition .You can determine whether the current method overrides a method in a base class by calling the GetBaseDefinition method. Aşağıdaki örnek bunu yapan bir IsOverride yöntemi uygular.The following example implements an IsOverride method that does this.

using System;
using System.Reflection;

public class ReflectionUtilities
{   
   public static bool IsOverride(MethodInfo method)
   {
      return ! method.Equals(method.GetBaseDefinition());
   }
}

public class Example
{
   public static void Main()
   {
      MethodInfo equals = typeof(Int32).GetMethod("Equals", 
                                        new Type[] { typeof(Object) } );
      Console.WriteLine("{0}.{1} is inherited: {2}", 
                        equals.ReflectedType.Name, equals.Name,
                        ReflectionUtilities.IsOverride(equals));
      
      equals = typeof(Object).GetMethod("Equals", 
                                        new Type[] { typeof(Object) } );
      Console.WriteLine("{0}.{1} is inherited: {2}", 
                        equals.ReflectedType.Name, equals.Name,
                        ReflectionUtilities.IsOverride(equals));
   }
}
// The example displays the following output:
//       Int32.Equals is inherited: True
//       Object.Equals is inherited: False
Imports System.Reflection

Public Class ReflectionUtilities
   Public Shared Function IsOverride(method As MethodInfo) As Boolean
      Return Not method.Equals(method.GetBaseDefinition())
   End Function
End Class

Module Example
   Public Sub Main()
      Dim equals As MethodInfo = GetType(Int32).GetMethod("Equals", 
                                         { GetType(Object) } )
      Console.WriteLine("{0}.{1} is inherited: {2}", 
                        equals.ReflectedType.Name, equals.Name,
                        ReflectionUtilities.IsOverride(equals))
      
      equals = GetType(Object).GetMethod("Equals", { GetType(Object) } )
      Console.WriteLine("{0}.{1} is inherited: {2}", 
                        equals.ReflectedType.Name, equals.Name,
                        ReflectionUtilities.IsOverride(equals))
   End Sub
End Module
' The example displays the following output:
'       Int32.Equals is inherited: True
'       Object.Equals is inherited: False

Yöntemi çağırmak için GetBaseDefinition :To call the GetBaseDefinition method:

  1. TypeÖzelliği içeren türü (sınıf veya yapı) temsil eden bir nesne alır.Get a Type object that represents the type (the class or structure) that contains the property. Bir nesneyle (bir türün örneği) çalışıyorsanız GetType yöntemini çağırabilirsiniz.If you are working with an object (an instance of a type), you can call its GetType method. Aksi halde, örnek gösterildiği gibi C# işlecini veya Visual Basic GetType işlecini kullanabilirsiniz.Otherwise, you can use the C# operator or the Visual Basic GetType operator, as the example illustrates.

  2. MethodInfoİlgilendiğiniz yöntemi temsil eden bir nesne alın.Get a MethodInfo object that represents the method in which you're interested. Bu yöntemi, yönteminden tüm yöntemlerin bir dizisini alarak Type.GetMethods ve sonra dizideki öğeleri yineleerek veya yöntemi MethodInfo çağırarak ve yöntem adını belirterek doğrudan metodunu temsil eden nesneyi elde edebilirsiniz Type.GetMethod(String) .You can do this by getting an array of all methods from the Type.GetMethods method and then iterating the elements in the array, or you can retrieve the MethodInfo object that represents the method directly by calling the Type.GetMethod(String) method and specifying the method name.

  3. GetBaseDefinition MethodInfo Temel yöntem tanımını temsil eden nesnenin değerini almak için yöntemini çağırın.Call the GetBaseDefinition method to get the value of the MethodInfo object that represents the base method definition.

Şunlara uygulanır