.NET 4は共分散を導入しています。私はそれが便利だと思います。結局のところ、MSはC#言語に追加する手間をすべて経ていました。しかし、なぜ共変は古き良き多形性よりも有用ですか?共分散は多型よりどのように涼しく...冗長ではないのですか?
私は共分散を実装すべき理由を理解するためにこの例を書いたが、それでもそれは得られない。私を教えてください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Sample
{
class Demo
{
public delegate void ContraAction<in T>(T a);
public interface IContainer<out T>
{
T GetItem();
void Do(ContraAction<T> action);
}
public class Container<T> : IContainer<T>
{
private T item;
public Container(T item)
{
this.item = item;
}
public T GetItem()
{
return item;
}
public void Do(ContraAction<T> action)
{
action(item);
}
}
public class Shape
{
public void Draw()
{
Console.WriteLine("Shape Drawn");
}
}
public class Circle:Shape
{
public void DrawCircle()
{
Console.WriteLine("Circle Drawn");
}
}
public static void Main()
{
Circle circle = new Circle();
IContainer<Shape> container = new Container<Circle>(circle);
container.Do(s => s.Draw());//calls shape
//Old school polymorphism...how is this not the same thing?
Shape shape = new Circle();
shape.Draw();
}
}
}
あなたはこれを読んでください:http://stackoverflow.com/questions/1078423/c-is-variance-covariance-contravariance-another-word-for-polymorphism – rsenna
あなたは本当に共分散について質問しているようですが、反共? –
同意する、ダン。私は質問を編集するように誘惑されますが、私はブライアンが明確にするためにそれを残します。 –