次の方法で共有


MethodBase.IsFinal プロパティ

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

Public ReadOnly Property IsFinal As Boolean
[C#]
public bool IsFinal {get;}
[C++]
public: __property bool get_IsFinal();
[JScript]
public function get IsFinal() : Boolean;

プロパティ値

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

解説

メソッドがオーバーライドできるかどうかを判断するには、 IsVirtualtrue であることを確認するだけでは不十分です。オーバーライドできるメソッドは、 IsVirtualtrue で、 IsFinalfalse である必要があります。たとえば、メソッドが非仮想で、インターフェイス メソッドを実装している場合があります。共通言語ランタイムでは、インターフェイス メンバを実装するすべてのメソッドは仮想 (Visual Basic では Overridable) としてマークする必要があります。そのため、コンパイラはこのメソッドを仮想 (Visual Basic では Overridable) final であるとマークします。その結果、仮想 (Visual Basic では Overridable) とマークされていてもオーバーライドできないメソッドが存在することがあります。

メソッドがオーバーライドできるかどうかを確実に判断するには、次のようなコードを使用します。 if (MethodInfo.IsVirtual && !MethodInfo.IsFinal)

IsVirtualfalse か、 IsFinaltrue の場合、このメソッドはオーバーライドできません。

使用例

この例を実行すると、 IsFinal の値として false が出力されるため、MyMethod をオーバーライド可能と見なしがちです。MyMethod が仮想 (Visual Basic では Overridable) であるとマークされていなくても、このコードは false を出力するため、オーバーライドできません。

 
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

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

[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);
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;

public __gc class MyClass 
{
public:
    void MyMethod() 
    {
    }
};

int main() 
{
    MethodBase* m = __typeof(MyClass)->GetMethod(S"MyMethod");
    Console::WriteLine(S"The IsFinal property value of MyMethod is {0}.", __box(m->IsFinal));
    Console::WriteLine(S"The IsVirtual property value of MyMethod is {0}.", __box(m->IsVirtual));
}

[JScript] 
import System;
import System.Reflection;
 
 public class MyClass 
 {
 public function MyMethod() : void
   {
   }
 public static function Main() : void 
   {
    var m : MethodBase  = MyClass.GetMethod("MyMethod");
    Console.WriteLine(m.IsFinal);
   }
 }
 MyClass.Main();

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

参照

MethodBase クラス | MethodBase メンバ | System.Reflection 名前空間 | Boolean