あなたはMemberInfo
オブジェクトのプロパティががこれを取得するために使用されたクラスオブジェクトを取得しますReflectedType
財産(に等しい(が実際にこのメンバーを宣言するクラスを取得します)かどうかを確認する必要がありますMemberInfo
のインスタンス)。
さらに、プロパティを確認する必要がありますIsAbstract
。 「抽象的であることが」(だけでこのメンバーは、現在のクラス内のそれは実装だことはできません新しい宣言(体を)であることを意味するので、それはtrue
ある場合、は、検査方法は、間違いなく上書きではありません代わりに派生クラス)。ここで
を以下に拡張メソッドの使用方法の一例です:
Student student = new Student
{
FirstName = "Petter",
LastName = "Parker"
};
bool isOverridden = student.GetType()
.GetMethod(
name: nameof(ToString),
bindingAttr: BindingFlags.Instance | BindingFlags.Public,
binder: null,
types: Type.EmptyTypes,
modifiers: null
).IsOverridden(); // ExtMethod
if (isOverridden)
{
Console.Out.WriteLine(student);
}
拡張メソッド:
using System.Reflection;
public static class MethodInfoHelper
{
/// <summary>
/// Detects whether the given method is overridden.
/// </summary>
/// <param name="methodInfo">The method to inspect.</param>
/// <returns><see langword="true" /> if method is overridden, otherwise <see langword="false" /></returns>
public static bool IsOverridden(this MethodInfo methodInfo)
{
return methodInfo.DeclaringType == methodInfo.ReflectedType
&& !methodInfo.IsAbstract;
}
}
+1一つだ:) –
これは検査方法場合は動作しません。抽象的なものでもあります。ここに[説明](https://stackoverflow.com/a/45560768/5259296)があります。 –