关于接口(interface),我对C#中的协方差概念不清楚。严格根据我的以下示例,这是协方差示例,请说明原因或原因。

class Program
{
    static void Main()
    {
        ICarInterface car = new Car();
    }
}

interface ICarInterface
{
    void Start();
}

class Car : ICarInterface
{
    public void Start()
    {

    }
}

最佳答案

协方差与子类型和泛型的相互作用有关。由于您的程序不涉及泛型,因此它不是协方差的示例。

如果UV的子类型(例如U = PearV = Fruit),则如果G<T>T的子类型,则一般类型G<U>G<V>中是协变的。例如,IEnumerable<Pear>IEnumerable<Fruit>的子类型:可以用来取梨的东西可以用来取水果。

如果G颠倒了子类型关系(G<V>G<U>的子类型),则它在T中被认为是相反的。例如,Action<Fruit>Action<Pear>的子类型:可以放入水果的东西可以用来放入梨。

在您的示例中,ICarInterfaceCar都不具有可以作为协变量的类型参数。

具体来说,在C#中,如果TT标记,则泛型类型在类型参数out中是协变的。如果TT标记,则在in中是相反的。

关于c# - 与C#和接口(interface)的协方差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37907307/

10-11 02:32