MethodBase.IsVirtual 属性

获取一个值,该值指示方法是否为 virtual

**命名空间:**System.Reflection
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public ReadOnly Property IsVirtual As Boolean
用法
Dim instance As MethodBase
Dim value As Boolean

value = instance.IsVirtual
public bool IsVirtual { get; }
public:
virtual property bool IsVirtual {
    bool get () sealed;
}
/** @property */
public final boolean get_IsVirtual ()
public final function get IsVirtual () : boolean

属性值

如果方法为 virtual,则为 true;否则,为 false

备注

虚拟成员可以引用类中的实例数据,并且必须通过此类的实例被引用。

若要确定是否可重写某方法,仅检查 IsVirtual 是否为 true 是不够的。为使某方法成为可重写的,IsVirtual 必须为 true,而且 IsFinal 必须为 false。例如,某方法可能是非虚拟的,但它实现接口方法。公共语言运行库要求实现接口成员的所有方法都必须标记为 virtual;因此,编译器会将该方法标记为 virtual final。所以,存在方法已标记为 virtual 但仍然不可重写的情况。

若要确定某方法是否可重写,请使用如下代码:

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

如果 IsVirtualfalse,或者 IsFinaltrue,则该方法无法重写。

示例

下面的示例将 IsFinal 显示为 false,这可能使您认为 MyMethod 是可重写的。即使 MyMethod 未标记为 virtual,该代码仍输出 false,因此无法重写。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

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
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);
    }
}
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 );
}
import System.*;
import System.Reflection.*;

public class MyClass
{   
    public void MyMethod()
    {
    } //MyMethod

    public static void main(String[] args)
    {
        MethodBase m = MyClass.class.ToType().GetMethod("MyMethod");
        Console.WriteLine("The IsFinal property value of MyMethod is {0}.",
            System.Convert.ToString( m.get_IsFinal()));
        Console.WriteLine("The IsVirtual property value of MyMethod is {0}.",
            System.Convert.ToString( m.get_IsVirtual()));
    } //main
} //MyClass
import System;
import System.Reflection;
 
 public class MyClass 
 {
 public function MyMethod() : void
   {
   }
 public static function Main() : void 
   {
    var m : MethodBase  = MyClass.GetMethod("MyMethod");
    Console.WriteLine(m.IsFinal);
   }
 }
 MyClass.Main();

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

MethodBase 类
MethodBase 成员
System.Reflection 命名空间