ここに質問を投稿するのはこれが初めてなので、事前に誰かに感謝します(そしておそらく他の人も)。
今日、私は C# 4 の共分散と反分散に戸惑いましたが、私がやりたいことを実行できる可能性はまったくありません。注:これは特定の問題を解決するためのものではありませんが、それを解決するための合法的な方法(C#4の真新しい共分散/反分散)があるかどうか知りたいです。だから、夢中にならないで...
サンプルコードは次のとおりです。
public interface IBase<in T>
{
T GetValue();
...
}
public class Readable<T> : IBase<T>
{
public T GetValue() {/* */}
...
}
public class Writeable<T> : IBase<T>
{
public T GetValue() {/* */}
public void SetValue(T value) {/* */}
...
}
public class Program
{
private List<IBase<object>> _collection = new List<IBase<object>>();
public static void Main()
{
var p = new Program();
p._collection.Add(new Readable<bool>()); //not allowed
}
}
コレクションは、任意の T の IBase 派生物をホストできる必要があります。もちろん、非ジェネリック コレクションまたはリストを使用することができ、ゲームは終了します。もう 1 つのアイデアは、より一般的なインターフェイス IBaseCore を使用して、IBase を継承することです。私の質問は次のとおりです。これらのトリックがなければ、IBase のコレクションを取得して、任意の IBase のアイテムを追加できますか?
みんなありがとう。