Прочитать на английском

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


MethodBase.IsFinal Свойство

Определение

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

public bool IsFinal { get; }

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

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

Реализации

Примеры

Следующий пример отображается false для IsFinal, что может привести к тому, что MyMethod является переопределенным. Код печатается, false даже если MyMethod не помечен virtual и поэтому не может быть переопределен.

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);
    }
}

Комментарии

Если виртуальный метод помечен final, его нельзя переопределить в производных классах. Переопределенный виртуальный метод можно пометить final с помощью запечатанных ключевое слово в C#, NotOverridable ключевое слово в Visual Basic или запечатанных ключевое слово в C++/CLI. Метод также может быть помечен final неявно компилятором. Например, в коде метод может быть определен как не виртуальный, но он реализует метод интерфейса. Среда CLR требует, чтобы все методы, реализующие члены интерфейса, были помечены как virtual; поэтому компилятор помечает метод virtual final.

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

if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)

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

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

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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