【发布时间】:2012-06-25 23:55:56
【问题描述】:
当我将接口和多态结合起来时,我一团糟。
假设我有以下界面:
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 Class 的方法吗?
public delegate String Collector();
event Collector CollectorEvent;
void GetMethod(CanSayHello c){CollectorEvent += c.SayHello;}
**GetMethod(new PoshPerson());**
如果它会从 Person 类中收集方法,我想我应该将 Person 的方法声明为 virtual 并重写 PoshPerson 的方法。 我真的很希望这两个方法签名是相等的。有没有可能?
【问题讨论】:
-
您希望其中的哪一个发生?如果您希望调用
PoshPerson中的实现,为什么要避免使用virtual/override方法?就个人而言,我会尽可能避免方法隐藏,正是因为编译时多态性不是很直观。 -
顺便说一句,编码指南说您应该通过将 I 作为第一个字母来指示接口。
-
应该很容易找出发生了什么?
标签: c# inheritance delegates polymorphism