MethodBase.IsFinal 属性

定义

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

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

属性值

Boolean

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

实现

示例

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

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 ,则不能在派生类中重写它。 可以 final 使用 c # 中的sealed关键字、 NotOverridable关键字 in Visual Basic 或 c + +/cli 中的sealed关键字标记重写的虚方法。 方法还可以 final 由编译器隐式标记。 例如,可在代码中将方法定义为非虚方法,但它实现接口方法。 公共语言运行时要求实现接口成员的所有方法都必须标记为 virtual ; 因此,编译器将标记方法 virtual final

可以将此属性与属性结合使用, IsVirtual 以确定方法是否可重写。 要使方法可重写, IsVirtual 属性必须为 true ,并且 IsFinal 属性必须为 false 。 若要确定某个方法是否可重写,请使用如下所示的代码:

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

如果 IsVirtualfalseIsFinaltrue ,则不能重写此方法。

适用于

另请参阅