MethodBase.IsFinal Свойство
Определение
Возвращает значение, указывающее, является ли метод final
.Gets a value indicating whether this method is final
.
public:
property bool IsFinal { bool get(); };
public bool IsFinal { get; }
member this.IsFinal : bool
Public ReadOnly Property IsFinal As Boolean
Значение свойства
true
, если этот метод имеет значение final
. В противном случае — false
.true
if this method is final
; otherwise, false
.
Реализации
Примеры
В следующем примере отображается false
для IsFinal
, что может привести к тому, что MyMethod является переопределяемым.The following example displays false
for IsFinal
, which might lead you to think that MyMethod is overridable. Код печатается, несмотря на то, что false
MyMethod не помечен virtual
и поэтому не может быть переопределен.The code prints false
even though MyMethod is not marked virtual
and thus cannot be overridden.
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
, он не может быть переопределен в производных классах.If the virtual method is marked final
, it can't be overridden in derived classes. Переопределенный виртуальный метод может быть помечен final
с помощью ключевого слова sealed в C#, ключевое слово NotOverridable в ключевом слове Visual Basic или sealed в C++/CLI.The overridden virtual method can be marked final
using the sealed keyword in C#, NotOverridable keyword in Visual Basic, or sealed keyword in C++/CLI. Метод также может быть помечен final
компилятором неявно.The method can also be marked final
implicitly by the compiler. Например, метод может быть определен как не виртуальный в коде, но он реализует метод интерфейса.For example, a method might be defined as non-virtual in your code, but it implements an interface method. Среда CLR требует, чтобы все методы, реализующие члены интерфейса, были помечены как virtual
, поэтому компилятор помечает метод virtual final
.The Common Language Runtime requires that all methods that implement interface members must be marked as virtual
; therefore, the compiler marks the method virtual final
.
Это свойство можно использовать вместе со IsVirtual свойством, чтобы определить, является ли метод переопределяемым.You can use this property, in conjunction with the IsVirtual property, to determine if a method is overridable. Чтобы метод был переопределяемым, IsVirtual свойство должно иметь значение, true
а IsFinal
свойство должно иметь значение false
.For a method to be overridable, IsVirtual property must be true
and IsFinal
property must be false
. Чтобы точно установить, является ли метод переопределяемым, используйте следующий код:To establish with certainty whether a method is overridable, use code such as this:
if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)
If MethodInfo.IsVirtual AndAlso Not MethodInfo.IsFinal Then
Если IsVirtual
имеет значение false
или IsFinal
, то true
метод не может быть переопределен.If IsVirtual
is false
or IsFinal
is true
, then the method cannot be overridden.