Скажите, что у меня есть базовый класс TestBase, где я определяю виртуальный метод TestMe ()
class TestBase
{
public virtual bool TestMe() { }
}
Теперь я наследовал этот класс:
class Test1 : TestBase
{
public override bool TestMe() {}
}
Теперь, с помощью Отражения, я должен найти, если метод, TestMe был переопределен в дочернем классе - действительно ли это возможно?
Для чего я нуждаюсь в нем - я пишу разработчику visualizer для типа "объект" показать целую иерархию наследования и также показать, какие виртуальные методы были переопределены в который уровень.
Учитывая тип Test1
, вы можете определить, есть ли у него собственная реализация объявление TestMe
:
typeof(Test1).GetMethod("TestMe").DeclaringType == typeof(Test1)
Если объявление получено из базового типа , это будет оценивать как ложное.
Обратите внимание, что, поскольку это объявление тестирования, а не истинная реализация, этот будет вернуть истину, если Test1
также является абстрактным, а TestMe
- абстрактным, поскольку ] Test1
будет иметь собственное объявление. Если вы хотите исключить этот случай, добавьте &&! GetMethod ("TestMe"). IsAbstract