MethodBase.IsVirtual Özellik
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.
yönteminin virtual
olup olmadığını belirten bir değer alır.
public:
property bool IsVirtual { bool get(); };
public bool IsVirtual { get; }
member this.IsVirtual : bool
Public ReadOnly Property IsVirtual As Boolean
Özellik Değeri
true
bu yöntem ise virtual
; değilse, false
.
Uygulamalar
Örnekler
Aşağıdaki örnekte için IsFinal
görüntülenir false
ve bu durum geçersiz kılınabilir olduğunu MyMethod
düşünmenize neden olabilir. Kod işaretlenmese MyMethod
virtual
bile yazdırılır false
ve bu nedenle geçersiz kılınamaz.
using namespace System;
using namespace System::Reflection;
public ref class MyClass
{
public:
void MyMethod(){}
};
int main()
{
MethodBase^ m = MyClass::typeid->GetMethod( "MyMethod" );
Console::WriteLine( "The IsFinal property value of MyMethod is {0}.", m->IsFinal );
Console::WriteLine( "The IsVirtual property value of MyMethod is {0}.", m->IsVirtual );
}
using System;
using System.Reflection;
public class MyClass
{
public void MyMethod()
{
}
public static void Main()
{
MethodBase m = typeof(MyClass).GetMethod("MyMethod");
Console.WriteLine("The IsFinal property value of MyMethod is {0}.", m.IsFinal);
Console.WriteLine("The IsVirtual property value of MyMethod is {0}.", m.IsVirtual);
}
}
Imports System.Reflection
Public Class MyClass1
Public Sub MyMethod()
End Sub
Public Shared Sub Main()
Dim m As MethodBase = GetType(MyClass1).GetMethod("MyMethod")
Console.WriteLine("The IsFinal property value of MyMethod is {0}.", m.IsFinal)
Console.WriteLine("The IsVirtual property value of MyMethod is {0}.", m.IsVirtual)
End Sub
End Class
Açıklamalar
Sanal üye bir sınıftaki örnek verilerine başvurabilir ve sınıfın bir örneği aracılığıyla başvurulmalıdır.
Bir yöntemin geçersiz kılınabilir olup olmadığını belirlemek için, öğesinin olup IsVirtual
true
olmadığını denetlemek yeterli değildir. Bir yöntemin geçersiz kılınabilir IsVirtual
true
IsFinal olması için ve olmalıdır.false
Örneğin, bir yöntem sanal olmayan bir yöntem olabilir, ancak bir arabirim yöntemi uygular. Ortak dil çalışma zamanı, arabirim üyelerini uygulayan tüm yöntemlerin olarak virtual
işaretlenmesini gerektirir; bu nedenle derleyici yöntemini virtual final
işaretler. Bu nedenle, bir yöntemin olarak virtual
işaretlendiği ancak yine de geçersiz kılınamaz olduğu durumlar vardır.
Bir yöntemin geçersiz kılınabilir olup olmadığını kesin olarak oluşturmak için aşağıdaki gibi bir kod kullanın:
if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)
If MethodInfo.IsVirtual AndAlso Not MethodInfo.IsFinal Then
false
veya IsVirtual
IsFinal
ise true
yöntemi geçersiz kılınamaz.
Yöntemini çağırarak MethodInfo.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