Вы можете использовать MethodInfo.DeclaringType , чтобы определить, является ли метод переопределить (при условии, что это также IsVirtual = true
).
Из документации:
... обратите внимание, что когда B переопределяет виртуальный метод M из A, он по существу переопределяет (или повторно объявляет) этот метод. Поэтому, как сообщает B.M's MethodInfo, объявляющий тип как B, а не как A, хотя A - это то место, где этот метод был первоначально объявлено ...
Вот пример:
var someType = typeof(BabyFoo);
var mi = someType.GetMethod("GimmeIntPleez");
// assuming we know GimmeIntPleez is in a base class, it must be overriden
if( mi.IsVirtual && mi.DeclaringType == typeof(BabyFoo) )
{ ... }
Проверка на MethodInfo.GetBaseDefinition ()
. Если функция является переопределением, она вернет другой метод в базовом классе. В противном случае будет возвращен тот же объект метода.
При переопределении в производном классе возвращает объект MethodInfo для метода в прямом или косвенном базовом классе, в котором метод, представленный этим экземпляром, был впервые объявлен.