来自 Java 或 Python,我习惯于制作这样的结构,通常它“正常工作”。最近发现了 C#,除了一些挫折之外,发现它使用起来非常愉快。
一种这样的挫败感是我必须通过多态构造(覆盖、虚拟等)来控制它。
这是一个这样的案例,我还没有找到如何“让工作”。
class Polymorphism
{
public interface IPerson
{
String Name { get; set; }
}
public class Doctor : IPerson
{
public String Name { get; set; }
}
public class DoctorGroup
{
public IEnumerable<IPerson> Members
{
get
{
return DoctorMembers;
}
}
public List<Doctor> DoctorMembers { get; set; }
public DoctorGroup()
{
DoctorMembers = new List<Doctor>();
}
}
}
这里DoctorMembers
是s,因此当被要求提供ofIPerson
时,我应该能够只返回一份医生名单。 IEnumerable
IPerson
public IEnumerable<IPerson> Members
{
get
{
return DoctorMembers;
}
}
然而......编译器抱怨......为什么?我错过了什么?这在语义上没有任何问题,到目前为止我使用过的大多数 OOP 语言都可以在没有句法 Pepto-Bismol 的情况下消化这一点。我是否缺少一个关键字以使其对编译器显而易见?
这里明显的捷径是将所有医生转换为 LINQ,IPerson
但我不明白为什么这是必要的,甚至是可取的。
谁能点亮我的灯笼?