关于接口(interface),我对C#中的协方差概念不清楚。严格根据我的以下示例,这是协方差示例,请说明原因或原因。
class Program
{
static void Main()
{
ICarInterface car = new Car();
}
}
interface ICarInterface
{
void Start();
}
class Car : ICarInterface
{
public void Start()
{
}
}
最佳答案
协方差与子类型和泛型的相互作用有关。由于您的程序不涉及泛型,因此它不是协方差的示例。
如果U
是V
的子类型(例如U = Pear
和V = Fruit
),则如果G<T>
是T
的子类型,则一般类型G<U>
在G<V>
中是协变的。例如,IEnumerable<Pear>
是IEnumerable<Fruit>
的子类型:可以用来取梨的东西可以用来取水果。
如果G
颠倒了子类型关系(G<V>
是G<U>
的子类型),则它在T
中被认为是相反的。例如,Action<Fruit>
是Action<Pear>
的子类型:可以放入水果的东西可以用来放入梨。
在您的示例中,ICarInterface
和Car
都不具有可以作为协变量的类型参数。
具体来说,在C#中,如果T
用T
标记,则泛型类型在类型参数out
中是协变的。如果T
用T
标记,则在in
中是相反的。
关于c# - 与C#和接口(interface)的协方差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37907307/