gpt4 book ai didi

c# - 与 C# 和接口(interface)的协变

转载 作者:太空狗 更新时间:2023-10-29 21:38:20 24 4
gpt4 key购买 nike

当涉及到接口(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> 的子类型: 可以放水果的东西可以用来放梨。

在您的示例中,ICarInterface 都不是也不Car有一个类型参数,它可以在其中协变。

具体来说,在 C# 中,泛型类型在类型参数中是协变的 T如果T标有 out .在 T 中是逆变的如果T标有 in .

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com