MethodInfo.GetBaseDefinition Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Türetilmiş bir sınıfta geçersiz kılındığında, bu örnek tarafından temsil edilen yöntemin ilk bildirildiği doğrudan veya dolaylı temel sınıfta yönteminin nesnesini döndürür MethodInfo .
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 Bu yöntemin ilk uygulaması için bir nesne.
Uygulamalar
Örnekler
Aşağıdaki örnekte yönteminin davranışı gösterilmektedir GetBaseDefinition .
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
yöntemi, GetBaseDefinition sınıf hiyerarşisinde belirtilen yöntemin ilk tanımını döndürür. Döndürülen MethodInfo nesnede özelliğinin değerini alarak yöntemin ilk tanımının DeclaringType bulunduğu türü belirleyebilirsiniz.
GetBaseDefinition yöntemi aşağıdaki gibi davranır:
Geçerli MethodInfo nesne bir arabirim uygulamasını temsil ederse, GetBaseDefinition yöntemi geçerli MethodInfo nesneyi döndürür.
Geçerli MethodInfo nesne bir temel sınıftaki sanal tanımı geçersiz kılan bir yöntemi temsil ederse, GetBaseDefinition yöntemi sanal tanımı temsil eden bir MethodInfo nesne döndürür.
Geçerli MethodInfo nesne, C# dilinde anahtar sözcüğüyle veya
Shadows
Visual Basic'teki anahtar sözcüğüylenew
(Ortak Tür Sistemi'nde açıklandığı gibinewslot
) GetBaseDefinition belirtilen bir yöntemi temsil ederse, yöntem geçerli MethodInfo nesneyi döndürür.Geçerli MethodInfo nesne devralınan bir yöntemi temsil ederse (yani geçerli yöntem kendi uygulamasını sağlamaz), GetBaseDefinition yöntem sınıf hiyerarşisindeki en düşük yöntemi temsil eden bir MethodInfo nesne döndürür. Örneğin, öğesini geçersiz kılarsa
Object.ToString
veDerived.ToString
geçersiz kılarsaBase.ToString
Base.ToString
, yöntemini temsil eden bir MethodInfo nesnede çağırarak GetBaseDefinition öğesini temsilDerived.ToString
Object.ToString
eden bir MethodInfo nesne döndürür.Geçerli MethodInfo nesne herhangi bir temel sınıfta mevcut olmayan bir yöntemi temsil ederse, GetBaseDefinition yöntem geçerli MethodInfo nesneyi döndürür.
Yöntemini çağırarak GetBaseDefinition geçerli yöntemin temel sınıftaki bir yöntemi geçersiz kılıp geçersiz kılmayacağını belirleyebilirsiniz. Aşağıdaki örnek, bunu sağlayan bir IsOverride
yöntem uygular.
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öntemini çağırmak GetBaseDefinition
için:
özelliğini içeren türü (sınıf veya yapı) temsil eden bir Type nesne alın. Bir nesneyle (bir türün örneği) çalışıyorsanız, yöntemini çağırabilirsiniz GetType . Aksi takdirde, örnekte gösterildiği gibi C# işlecini veya Visual Basic GetType işlecini kullanabilirsiniz.
İlgilendiğiniz yöntemi temsil eden bir MethodInfo nesne alın. Bunu, yönteminden Type.GetMethods tüm yöntemlerin bir dizisini alıp dizideki öğeleri yineleyerek veya yöntemini çağırıp Type.GetMethod(String) yöntem adını belirterek yöntemi doğrudan temsil eden nesneyi alabilirsinizMethodInfo.
GetBaseDefinition Temel yöntem tanımını temsil eden nesnenin MethodInfo değerini almak için yöntemini çağırın.