У меня беспорядок, когда я совмещаю интерфейсы и полиморфизм.C# Интерфейсы, полиморфизм и делегаты
Скажем, у меня есть следующий интерфейс:
public Interface CanSayHello
{
String SayHello();
}
Следующий класс:
public Class Person : CanSayHello
{
public String SayHello() { return "Hey, I'm a person just saying hello to you";}
}
И, наконец, важный класс:
public Class PoshPerson: Person
{
public String SayHello() { return "Hey, I'm too posh to say hello to you";}
}
Мой первый вопрос будет следующий код собрать метод PoshClass или класса Person?
public delegate String Collector();
event Collector CollectorEvent;
void GetMethod(CanSayHello c){CollectorEvent += c.SayHello;}
**GetMethod(new PoshPerson());**
Если соберет метод из класса Person, я предполагаю, что я должен объявить метод на человеке, как виртуальные и метод в PoshPerson переопределении. Мне бы очень хотелось, чтобы две сигнатуры метода были равны. Возможно ли это каким-либо образом?
Какой из них вы хотите, чтобы произошло? Если вы хотите, чтобы реализация в PoshPerson' вызывалась, почему вы хотите избежать использования методов 'virtual' /' override'? Лично я избегаю скрытия метода, когда это возможно, именно потому, что полиморфизм времени компиляции не очень интуитивно понятен. – millimoose
Кстати, в руководстве по кодированию указано, что вы должны указывать интерфейсы, поставив I в качестве первой буквы. – Styxxy
Должно быть довольно легко узнать, что происходит? – Michael