Java または Python から来た私は、そのような構造を作成することに慣れており、通常は「うまく機能します」。最近 C# を発見しましたが、いくつかのフラストレーションを除けば、C# を使用するのはとても楽しいものです。
そのようなフラストレーションの 1 つは、ポリモーフィズム構造 (オーバーライド、仮想など) を通じてどれだけ手を握らなければならないかということです。
これは、「ただうまくいく」方法をまだ見つけていないそのようなケースの1つです。
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
are ですIPerson
。したがって、 of を要求されたときに医師のリストを返すことができるはずIEnumerable
ですIPerson
。
public IEnumerable<IPerson> Members
{
get
{
return DoctorMembers;
}
}
それでも...コンパイラは文句を言います...なぜですか?私は何が欠けていますか?意味的にはこれに問題はありません。私がこれまで扱ってきたほとんどの OOP 言語は、構文上のペプト ビスモルなしでこれを消化できます。コンパイラに明らかにするためのキーワードがありませんか?
ここでの明らかな近道は、すべての医師を LINQ に変換することですが、IPerson
なぜこれが必要なのか、あるいは望ましいのか、私にはわかりません。
誰か私のランタンに火をつけてくれませんか?