繁体   English   中英

泛型问题

[英]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个问题

  1. signalType类型违反了对SIGNALTYPE通用参数的通用约束。 因为它是抽象的,所以不能满足new()约束
  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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM