次の方法で共有


MethodBase.IsFinal プロパティ

定義

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

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

プロパティ値

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

実装

の例をfalseIsFinal次に示します。これにより、MyMethod がオーバーライド可能であると考える可能性があります。 MyMethod がマークvirtualされていないため、オーバーライドできない場合でも、コードは出力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 組み合わせて使用して、メソッドがオーバーライド可能かどうかを判断できます。 メソッドをオーバーライドできるようにするには、 プロパティを にする必要があり、 IsVirtualIsFinal プロパティを true にするfalse必要があります。 メソッドがオーバーライド可能かどうかを確実に確立するには、次のようなコードを使用します。

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

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

適用対象

こちらもご覧ください