Как узнать, переопределён ли метод оператором override - C#
Формулировка задачи:
Подскажите пожалуйста, как программным путём выяснить, был ли переопределён метод getName() в классе Cat1?
Пример кода:
using System;
class Animal
{
public Animal(string name)
{
this.name = name;
}
public virtual string getName()
{
return name;
}
private string name;
}
class Cat1 : Animal
{
public Cat1(string name) : base(name){}
public override string getName()
{
return "Cat1: " + base.getName();
}
}
class Cat2: Animal
{
public Cat2(string name) : base(name){}
new string getName()
{
return "Cat2: " + base.getName();
}
}
class Animals
{
public static void Main()
{
Cat1 myCat1= new Cat1("Bars");
Cat2 myCat2= new Cat2("Soha");
Animal[] homeCats = new Animal[2];
homeCats [0] = myCat1;
homeCats [1] = myCat2;
foreach(Animal animal in homeCats )
{
if (если animal.getName() является переопределённым/override ) Действие1;
else Действие2;
}
}
}Решение задачи: «Как узнать, переопределён ли метод оператором override»
textual
Листинг программы
foreach (Animal animal in homeCats)
{
Type objType = animal.GetType();
if (objType.GetMethod("getName").DeclaringType == objType)
Console.WriteLine("Method getName overriden");
else
Console.WriteLine("Method getName hasn't been overriden");
if (objType.GetMethod("getName2").DeclaringType == objType)
Console.WriteLine("Method getName2 overriden");
else
Console.WriteLine("Method getName2 hasn't been overriden");
}