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

プロパティ値

Boolean

このメソッドが final である場合は true。それ以外の場合は falsetrue if this method is final; otherwise, false.

実装

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

注釈

仮想メソッドがとしてマークされている場合 final 、派生クラスでオーバーライドすることはできません。If the virtual method is marked final, it can't be overridden in derived classes. オーバーライドされた仮想メソッドは、 final C# では sealed キーワード、Visual Basic では NotOverridable キーワード、C++/cli では sealed キーワードを使用してマークできます。The overridden virtual method can be marked final using the sealed keyword in C#, NotOverridable keyword in Visual Basic, or sealed keyword in C++/CLI. メソッドは、 final コンパイラによって暗黙的にマークすることもできます。The method can also be marked final implicitly by the compiler. たとえば、メソッドは、コード内で非仮想として定義される場合がありますが、インターフェイスメソッドを実装します。For example, a method might be defined as non-virtual in your code, 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.

このプロパティをプロパティと組み合わせて使用すると、 IsVirtual メソッドがオーバーライド可能かどうかを判断できます。You can use this property, in conjunction with the IsVirtual property, to determine if a method is overridable. メソッドをオーバーライド可能にするには、プロパティをにし、プロパティをにする必要があり IsVirtual true IsFinal false ます。For a method to be overridable, IsVirtual property must be true and IsFinal property must be false. メソッドがオーバーライド可能であるかどうかを確実に確立するには、次のようなコードを使用します。To establish with certainty whether a method is overridable, use code such as this:

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

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

適用対象

こちらもご覧ください