gpt4 book ai didi

c# - 从模板类转换

转载 作者:行者123 更新时间:2023-11-30 22:12:18 25 4
gpt4 key购买 nike

我有课MyClass<T>其中 T是一些接口(interface):

class MyClass<T> where T: IMyInterface

我写了几个扩展 MyClass 的类使用 IMyInterface 的一些实现,例如:

class MySecondClass : MyClass<MyInterfaceImplementation>

为什么分配 MySecondClass实例到类型为 MyClass<IMyInterface> 的变量不允许?

MyClass<IMyInterface> x = new MySecondClass()

当我添加隐式转换时:

public static implicit operator MyClass<IMyInterface>(MySecondClass c) {
return c;
}

它开始工作了。

最佳答案

要执行您想要的操作,您应该使用 out 关键字声明类型参数 T 是协变的(参见 MSDN 上的 Covariance and Contravariance in Generics)。
您需要稍微修改一下代码,因为协变和逆变只能在接口(interface)上定义:

interface IMyInterface { 
}

// note that this one is an interface now
interface IMyClass<out T> where T : IMyInterface {
}

class MyInterfaceImplementation : IMyInterface {
}

class MySecondClass : IMyClass<MyInterfaceImplementation> {
}

class Program {
static void Main(string[] args) {
IMyClass<IMyInterface> x = new MySecondClass();
}
}

关于c# - 从模板类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767117/

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