Тест, если метод является переопределением? [дубликат]

10
задан Community 23 May 2017 в 12:15
поделиться

2 ответа

Вы можете использовать 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) )
    { ... }
3
ответ дан 3 December 2019 в 21:58
поделиться

Проверка на MethodInfo.GetBaseDefinition () . Если функция является переопределением, она вернет другой метод в базовом классе. В противном случае будет возвращен тот же объект метода.

При переопределении в производном классе возвращает объект MethodInfo для метода в прямом или косвенном базовом классе, в котором метод, представленный этим экземпляром, был впервые объявлен.

13
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: