その制限の本当の理由は何ですか?しなければならなかったのはただの仕事ですか?概念的に難しいですか?無理ですか?
確かに、フィールドは常に読み書き可能であるため、型パラメーターをフィールドで使用することはできません。でもそれじゃ答えにならないよね?
この質問の理由は、私が C# 4 のバリアンス サポートに関する記事を書いているためであり、それがデリゲートとインターフェイスに制限されている理由を説明する必要があると感じています。立証責任を逆転させるだけです。
更新: Eric が例について尋ねました。
これはどうですか(それが理にかなっているのかどうかはまだわかりません:-))
public class Lookup<out T> where T : Animal {
public T Find(string name) {
Animal a = _cache.FindAnimalByName(name);
return a as T;
}
}
var findReptiles = new Lookup<Reptile>();
Lookup<Animal> findAnimals = findReptiles;
それを 1 つのクラスに持つ理由は、クラス自体に保持されているキャッシュである可能性があります。また、異なる種類のペットに同じ名前を付けないでください。
ところで、これはC# 5.0 のオプションの型パラメーターにつながります :-)
更新 2: CLR と C# がこれを許可する必要があると主張しているわけではありません。何がそれにつながったのかを理解しようとしているだけです。