C#是否可以将Generic Abstract类单个参数限制为两个不同的用户定义类型?

时间:2016-09-12 01:09:08

标签: c# generics inheritance abstract

首先,我要感谢所有帮助的人,我不是很好的编码员,我几乎没有开始用C#编码。我的目标是开发一种用于信号处理的IDE,并隐藏大部分编码细节

abstract public class DSPdata<DSPtype> 
        where DSPtype : DSPComplex, DSPReal
{
    // Restrict DSPtype to be real or complex
}

public class DSPReal : DSPdata<DSPReal>
{
    // Implement functionality of DSPReal 
}

public class DSPComplex : DSPdata<DSPComplex>
{
}

我得到了这个参考,但我不是很清楚。 https://msdn.microsoft.com/en-us/library/d5x73970.aspx  我为写英文和编码道歉。我希望我能得到一些帮助 最好的问候,C

3 个答案:

答案 0 :(得分:2)

是的,你想要做的是可能的。您的实现实际上会略有不同。它将泛型类型DSPtype限制为DSPComplex和DSPReal的类型。我相信你想要做的是将通用类型DSPtype限制为DSPComplex或DSPReal。

为此,您应该使用界面执行以下操作:

abstract public class DSPdata< DSPtype > 
    where DSPtype : IDSPdata {
   // Restrict DSPtype to be real or complex
}

public class DSPReal : IDSPdata
   // Implement functionality of DSPReal 
}

public class DSPComplex : IDSPdata
{
}

public interface IDSPdata 
{
    // Add whatever must appear in DSPtype for it to work here
}

答案 1 :(得分:0)

虽然Cameron说的是正确的,但请记住C#不允许多重继承,因此不允许对多种类型(不是接口!)进行类型约束。类型约束仅允许将约束定义为连接。当然,你可以在约束中有多个接口,C#允许类型实现任意数量的接口。

答案 2 :(得分:0)

一旦间接实现,就是在基类中引入一个内部构造函数,并结合略微修改的泛型约束。

使用内部构造函数,您无法在另一个程序集中创建实例。因此,如果您可以在同一个单独的程序集中定义cur_slide类型以及DSPData<T>DSPReal类型,则可以阻止在其他程序集中创建任何其他类型。

DSPComplex