Bạn cần phải kiểm tra xem DeclaringType
tài sản của MemberInfo
đối tượng (DeclaringType
thực sự được lớp mà tuyên bố thành viên này) bằngReflectedType
tài sản (mà được các đối tượng lớp được sử dụng để có được điều này bản sao của MemberInfo
).
Bên cạnh đó, bạn cũng phải kiểm tra thuộc tính IsAbstract
. Nếu nó là true
, sau đó phương pháp kiểm tra chắc chắn không ghi đè là, bởi vì "là trừu tượng" có nghĩa là thành viên này là một tuyên bố mới mà không thể có nó thực hiện (cơ thể) trong lớp hiện tại (nhưng chỉ trong thay vào đó là các lớp dẫn xuất).
Dưới đây là một ví dụ về việc sử dụng các phương pháp khuyến nông cung cấp dưới đây:
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);
}
Phương pháp mở rộng:
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;
}
}
Nguồn
2017-08-08 06:26:41
+1 Đó là một :) –
này sẽ không hoạt động nếu các phương pháp kiểm tra cũng là một bản tóm tắt. Đây là [giải thích] (https://stackoverflow.com/a/45560768/5259296). –