MethodBase.IsFinal 属性

定义

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

public:
 property bool IsFinal { bool get(); };
public bool IsFinal { get; }
member this.IsFinal : bool
Public ReadOnly Property IsFinal As Boolean

属性值

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

实现

示例

以下示例显示 falseIsFinal这可能会导致你认为 MyMethod 是可重写的。 即使未标记 virtual MyMethod,代码也会打印false,因此无法重写。

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

注解

如果虚拟方法标记为 final,则无法在派生类中重写它。 可以使用 C# 中的密封关键字 (keyword) 、Visual Basic 中的 NotOverridable 关键字 (keyword) 或 C++/CLI 中的密封关键字 (keyword) 来标记final重写的虚拟方法。 编译器还可以隐式标记 final 方法。 例如,方法可能在代码中定义为非虚拟方法,但它实现了接口方法。 公共语言运行时要求实现接口成员的所有方法都必须标记为 virtual;因此,编译器将方法 virtual final标记为 。

可以将此属性与 IsVirtual 属性结合使用,以确定方法是否可重写。 要使方法可重写,属性必须为 trueIsVirtualIsFinal属性必须为 false。 若要确定方法是否可重写,请使用如下代码:

if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)
If MethodInfo.IsVirtual AndAlso Not MethodInfo.IsFinal Then

如果 IsVirtualfalseIsFinaltrue,则无法重写方法。

适用于

另请参阅