2017-03-14 9 views
0

派生クラスがメソッドのオーバーライドを実装するかどうかを区別するために、どうすればよいですか?aboutOverrided about C#

class BaseClass 
{ 
    public virtual void targetMethod() { return; } 
} 

class DerivedClass:BaseClass 
{ 
    public bool isOverrideTargetMethod() 
    { 
     //Here, I wants to judge whether DerivedClass is overrided targetMethod. 
    } 
    public override void targetMethod() 
    { 
     base.targetMethod(); 
    } 
} 
+0

私は特別なプロパティを追加したくない派生クラスでisOverrideTargetMethodブール型プロパティを追加して、派生クラス –

+0

でオーバーライドメソッドで真割り当てます。 – kyounoii

答えて

0

まず最初に、あなたがしようとしていることは、デザインの視点ではあまり良くありませんが、本当にリフレクションをしたい場合は答えです。

using System.Reflection; 

Type classType = typeof(DerivedClass); 
MethodInfo method = classType.GetMethod("targetMethod"); 
if (method.DeclaringType == typeof(BaseClass)) 
    Console.WriteLine("targetMethod not overridden."); 
else 
Console.WriteLine("targetMethod is overridden " + method.DeclaringType.Name); 
+0

私は非常に多くの方法でオーバーライドを判断したいので、反射は便利です。ありがとうございます。 – kyounoii

+0

実行時に反映が遅いと判断できません。 たとえば、私に次のアイデアを教えてください。 ・コンパイル時に静的に判断する方法 ・リフレクションのキャッシュ方法 – kyounoii

+0

typeofキーワードはコンパイル時の型識別子をとりますvar isDerived = typeof DerivedClass).GetMember( "targetMethod"、 BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly).Length == 0; – AKN