Обнаружьте, если метод был переопределен с помощью Отражения (C#)

Скажите, что у меня есть базовый класс TestBase, где я определяю виртуальный метод TestMe ()

class TestBase
{
    public virtual bool TestMe() {  }
}

Теперь я наследовал этот класс:

class Test1 : TestBase
{
    public override bool TestMe() {}
}

Теперь, с помощью Отражения, я должен найти, если метод, TestMe был переопределен в дочернем классе - действительно ли это возможно?

Для чего я нуждаюсь в нем - я пишу разработчику visualizer для типа "объект" показать целую иерархию наследования и также показать, какие виртуальные методы были переопределены в который уровень.

56
задан Mark Seemann 24 August 2013 в 13:13
поделиться

1 ответ

Учитывая тип Test1 , вы можете определить, есть ли у него собственная реализация объявление TestMe :

typeof(Test1).GetMethod("TestMe").DeclaringType == typeof(Test1)

Если объявление получено из базового типа , это будет оценивать как ложное.

Обратите внимание, что, поскольку это объявление тестирования, а не истинная реализация, этот будет вернуть истину, если Test1 также является абстрактным, а TestMe - абстрактным, поскольку ] Test1 будет иметь собственное объявление. Если вы хотите исключить этот случай, добавьте &&! GetMethod ("TestMe"). IsAbstract

64
ответ дан 26 November 2019 в 17:17
поделиться
Другие вопросы по тегам:

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