[英]Generics question
我有一个普通班
public class Decoder<SIGNAL> where SIGNAL : signalType, new()
signalType是一个抽象类。 如何声明一个动态字段来存储它? 以下代码将引发编译错误,指出Decoder必须是非抽象类型的泛型。
public class DecoderParent
{
private Decoder<signalType> decoder;
public DecoderParent(keys key)
{
switch(key)
{
case keys.SignalOne:
{
decoder = new Decoder<signalONE>();
break;
}
case keys.signalTwo:
{
decoder = new Decoder<signalTWO>();
}
}
}
}
您在这里遇到2个问题
Decoder<signalType>
与任何其他类型之间的分配需要协方差支持,这在C#中不可用(仅在从v4.0开始的接口中)。 您需要做的是定义一个非通用基类,该基类将其操作推迟到通用子类上。
public abstract class Decoder {
...
abstract void SomeOp();
}
public abstract class Decoder<SIGNALTYPE> where SIGNALTYPE : signalType,new() {
}
Decoder d = new Decoder<SignalOne>();
泛型类型不像引用类型那样协变-请在这里查看我的答案。 您不能将Decoder <signalONE>分配给Decoder <signalType>类型的变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.