情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

MethodBase.IsFinal プロパティ

2013/12/12

このメソッドが final (Visual Basic の場合は NotOverridable) かどうかを示す値を取得します。

Namespace:  System.Reflection
アセンブリ:  mscorlib (mscorlib.dll 内)

public bool IsFinal { get; }

プロパティ値

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

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

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

この例を実行すると、IsFinal の値として false が出力されるため、MyMethod をオーバーライド可能と見なしがちです。MyMethod は、virtual としてマークされていないため、オーバーライドできません。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Reflection;

public class Example
{
   public void MyMethod()
   {
   }
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      MethodBase m = typeof(Example).GetMethod("MyMethod");
      outputBlock.Text += String.Format("The IsFinal property value of MyMethod is {0}.", m.IsFinal) + "\n";
      outputBlock.Text += String.Format("The IsVirtual property value of MyMethod is {0}.", m.IsVirtual) + "\n";
   }
}


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: