私は C# の初心者ですが、C++ の知識はかなりあります。C ++から、次のようなものが機能することに慣れています:
class Base1 {};
class Derived1 : Base1 {};
class Base2 {
Base1 foo();
};
class Derived2 {
Derived1 foo();
};
これは、共分散という用語で知っています。コードの一部が欠けている可能性がありますが、私の言いたいことが理解できることを願っています。オーバーライドなどを使用して C# でそのようなものを作成しようとすると、コンパイラは型が同じでなければならないと不平を言いました。このような:
class Base1 {};
class Derived1 : Base1 {};
class Base2 {
Base1 foo();
};
class Derived2 {
Base1 foo();
};
それは何か問題を引き起こす可能性がありますか?もちろん、私は関数 foo のプログラマーなので、常に Derived1 が返されることを保証できます。しかし、私の関数を呼び出す人は誰でもそれを知りません。
私はいくつかの Manager クラスを含むプロジェクトを持っています。そのために Interface IManager を使用したかったのです (それは私自身のクラスであり、その名前のものが存在する場合は .NET からのものではありません)。それらはすべてメソッド Load を実装する必要があるためです。 () 例えば。Load() は常に、特定の Manager によって管理されるオブジェクトを返します。すべての Manager が IManager を実装する場合、すべての Manager が Interface を取得します。
ManagableObject Load();
それは良いですか、悪いですか?またはさらに良いことに、回避策はありますか?
テンプレートで機能することも読みましたが、これだけだと思います:
List<Base1> myList;
myList.push_back(new Derived1());
または、Base1 の戻り値の型として List を使用し、クラス Derived2 の List を使用できますか? それもいいでしょう。
よろしくお願いいたします。