Поделиться через


MethodBase.IsFinal Свойство

Определение

Возвращает значение, указывающее, является ли метод final.

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

Значение свойства

true, если этот метод имеет значение final. В противном случае — false.

Реализации

Примеры

Следующий пример отображается false для IsFinal, что может привести к тому, что MyMethod является переопределенным. Код печатается, false даже если MyMethod не помечен 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#, NotOverridable ключевое слово в Visual Basic или запечатанных ключевое слово в C++/CLI. Метод также может быть помечен final неявно компилятором. Например, в коде метод может быть определен как не виртуальный, но он реализует метод интерфейса. Среда CLR требует, чтобы все методы, реализующие члены интерфейса, были помечены как virtual; поэтому компилятор помечает метод virtual final.

Это свойство можно использовать вместе со свойством IsVirtual , чтобы определить, является ли метод переопределенным. Чтобы метод был переопределен, свойство должно иметь значение true , IsVirtual а IsFinal свойство должно иметь значение false. Чтобы с уверенностью определить, является ли метод переопределенным, используйте следующий код:

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

Если IsVirtual имеет значение false или IsFinal имеет trueзначение , метод нельзя переопределить.

Применяется к

См. также раздел