MethodBase.IsFinal プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
このメソッドが final
かどうかを示す値を取得します。
public:
property bool IsFinal { bool get(); };
public bool IsFinal { get; }
member this.IsFinal : bool
Public ReadOnly Property IsFinal As Boolean
プロパティ値
このメソッドが final
である場合は true
。それ以外の場合は false
。
実装
例
次の例が表示false``IsFinal
されます。これは、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# の sealed キーワード、Visual Basic の NotOverridable キーワード、または C++/CLI の sealed キーワードを使用してマークfinal
できます。 このメソッドは、コンパイラによって暗黙的にマーク 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 組み合わせて使用して、メソッドがオーバーライド可能かどうかを判断できます。 メソッドをオーバーライドできるようにするには、プロパティを指定し、IsVirtualプロパティをtrue
指定する必要がありますfalse
。IsFinal
メソッドがオーバーライド可能かどうかを確実に確立するには、次のようなコードを使用します。
if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)
If MethodInfo.IsVirtual AndAlso Not MethodInfo.IsFinal Then
またはfalse``IsFinal
ある場合IsVirtual
はtrue
、メソッドをオーバーライドできません。