首先,我要感谢所有帮助的人,我不是很好的编码员,我几乎没有开始用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
答案 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