私は数日間共分散と反共分散を経験していますが、私は何かを理解していると思っていますが、私が現在の私の答えで肯定または否定を得ることができなかったので、研究。私は、次のクラス階層を持っている:私のここでの共分散についての理解が正しいかどうか確認するのを助けてください。
class Shape
{
public string Name { get; set; }
}
class Square : Shape
{
}
その後、これは私が使用してプログラムをスタートしました何私です:
List<Square> squares = new List<Square>() { new Square { Name = "Square One" }, new Square { Name = "Square Two" } };
IEnumerable<Square> squaresEnum = squares;
は、今私が持っている二つの質問です:
は以下の通りであります可能IEnumerableを< T>は共変であるため、:
IEnumerable<Shape> shapesEnumerable = squares;
AND、Fでありますあなたは、私が上だなら、私に知らせてできてください
class Program
{
static void Main(string[] args)
{
List<Square> squares = new List<Square>() { new Square { Name = "Square One" }, new Square { Name = "Square Two" } };
IEnumerable<Square> squaresEnum = squares;
/* Does this work because IEnumerable<T> is covariant? */
IEnumerable<Shape> shapesEnumerable = squares;
/* Does this NOT work because List<T> is NOT covariant */
//List<Shape> shapes = squares;
Console.ReadKey();
}
}
class Shape
{
public string Name { get; set; }
}
class Square : Shape
{
}
:それは何のために必要な場合はここで
List<Shape> shapes = squares;
は完全なプログラムコードです:リスト< T>は共変ではありませんので、ollowingことはできませんこれと正しい軌道?
はい。それは正しいです。 – SLaks
@SLaksありがとうございました! – macmatthew