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。それ以外の場合は falsetrue if this method is final; otherwise, false.

実装

次の例では、IsFinalfalse を表示します。これにより、MyMethod がオーバーライド可能であると考えることができます。The following example displays false for IsFinal, which might lead you to think that MyMethod is overridable. コードは、MyMethod が virtual としてマークされていないため、オーバーライドできない場合でも false を出力します。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

注釈

メソッドがオーバーライド可能かどうかを判断するために、IsVirtualtrueであるかどうかを確認するだけでは不十分です。To determine if a method is overridable, it is not sufficient to check that IsVirtual is true. メソッドをオーバーライド可能にするには、IsVirtualtrue で、IsFinalfalseする必要があります。For a method to be overridable, IsVirtual must be true and IsFinal must be false. たとえば、メソッドは非仮想の場合もありますが、インターフェイスメソッドを実装します。For example, a method might be non-virtual, but it implements an interface method. 共通言語ランタイムでは、インターフェイスメンバーを実装するすべてのメソッドが 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. そのため、メソッドが virtual としてマークされていても、オーバーライドできない場合があります。So there are cases where a method is marked as virtual but is still not overridable.

メソッドがオーバーライド可能であるかどうかを確実に確立するには、次のようなコードを使用します。To establish with certainty whether a method is overridable, use code such as this:

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

IsVirtualfalse または IsFinaltrueの場合、メソッドをオーバーライドすることはできません。If IsVirtual is false or IsFinal is true, then the method cannot be overridden.

適用対象

こちらもご覧ください