英語で読む

次の方法で共有


MethodBase.IsFinal プロパティ

定義

このメソッドが final かどうかを示す値を取得します。

C#
public bool IsFinal { get; }

プロパティ値

このメソッドが final である場合は true。それ以外の場合は false

実装

の例をfalseIsFinal次に示します。これにより、MyMethod がオーバーライド可能であると考える可能性があります。 MyMethod がマークvirtualされていないため、オーバーライドできない場合でも、コードは出力falseされます。

C#
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場合、派生クラスではオーバーライドできません。 オーバーライドされた仮想メソッドは、C# の封印されたキーワード (keyword)、Visual Basic の NotOverridable キーワード (keyword)、または C++/CLI の封印されたキーワード (keyword)を使用してマークfinalできます。 メソッドは、コンパイラによって暗黙的にマーク final することもできます。 たとえば、メソッドは、コード内で非仮想として定義できますが、インターフェイス メソッドを実装します。 共通言語ランタイムでは、インターフェイス メンバーを実装するすべてのメソッドを として virtualマークする必要があります。したがって、コンパイラは メソッド virtual finalをマークします。

このプロパティを プロパティと IsVirtual 組み合わせて使用して、メソッドがオーバーライド可能かどうかを判断できます。 メソッドをオーバーライドできるようにするには、 プロパティを にする必要があり、 IsVirtualIsFinal プロパティを true にするfalse必要があります。 メソッドがオーバーライド可能かどうかを確実に確立するには、次のようなコードを使用します。

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

false または IsFinal の場合IsVirtualtrueメソッドをオーバーライドすることはできません。

適用対象

製品 バージョン
.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

こちらもご覧ください