MethodBase.IsFinal 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值指示此方法是否为 final
。
public:
property bool IsFinal { bool get(); };
public bool IsFinal { get; }
member this.IsFinal : bool
Public ReadOnly Property IsFinal As Boolean
属性值
如果方法为 final
,则为 true
;否则为 false
。
实现
示例
以下示例显示 false
, IsFinal
这可能会导致你认为 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 属性结合使用,以确定方法是否可重写。 要使方法可重写,属性必须为 true
, IsVirtualIsFinal
属性必须为 false
。 若要确定方法是否可重写,请使用如下代码:
if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)
If MethodInfo.IsVirtual AndAlso Not MethodInfo.IsFinal Then
如果 IsVirtual
为 false
或 IsFinal
为 true
,则无法重写方法。