MethodBase.IsVirtual Özellik

Tanım

yönteminin virtualolup olmadığını belirten bir değer alır.

C#
public bool IsVirtual { get; }

Özellik Değeri

true bu yöntem ise virtual; değilse, false.

Uygulamalar

Örnekler

Aşağıdaki örnekte için IsFinalgörüntülenir false ve bu durum geçersiz kılınabilir olduğunu MyMethod düşünmenize neden olabilir. Kod işaretlenmese MyMethodvirtual bile yazdırılır false ve bu nedenle geçersiz kılınamaz.

C#
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);
    }
}

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 IsVirtualtrueolmadığını denetlemek yeterli değildir. Bir yöntemin geçersiz kılınabilir IsVirtualtrueIsFinal 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 virtualişaretlenmesini gerektirir; bu nedenle derleyici yöntemini virtual finaliş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:

C#
if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)

false veya IsVirtualIsFinal ise trueyö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.

C#
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

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0