约束,通用变量和算术运算符
问题描述:
我想声明一个泛型类简单其中一个方法叫做加成将采取两个通用变量,并将它们用+运营商加在一起。我以为我可以通过给类简单以下约束实现这一点:约束,通用变量和算术运算符
class Simple<T> where T: int
{
public T Addition(T firstInt, T secondInt)
{
return firstInt + secondInt;
}
}
我怀疑错误有事情做与仿制药仅具有以下五种类型的约束 - 类名,类,结构InterfaceName中,新( )?那么,为什么没有泛型也支持StructureName约束类型?那样我们就能够对泛型变量应用算术运算符?!
感谢名单
答
A StructName
约束没有意义,因为您不能继承值类型。
如果你有这样的事情class Simple<T> where T : int
你可以只与T = int
实例Simple<T>
,没有类型从int
继承或与此有关的任何其他类型的值。 (CLR)缺少其他语言知道的type classes,这是一种在没有硬编码的编译器机制(如C#中)的情况下处理运算符重载的流行机制。
答
有在约束通用类型到一个特定的结构中,由于结构类型不能被继承没有意义的。这将是相同的文字:
class Simple
{
public int Addition(int firstInt, int secondInt)
{
return firstInt + secondInt;
}
}
不幸的是,对于IArithmetic interface支持,泛型类型与数学运算是难以支撑。如果您想查看基于通用数学运算符的一种方法,请参阅Generic Operators in MiscUtil。
答
您将T
限制为int
。这是不明智的做法,因为只有一个int类型;所以你可以直接写int
如果你想int
。
如果您不约束T
,则不能使用+
运算符,因为在对象上没有定义+
运算符。
C#泛型不是C++模板。
谢谢大家的帮助欢呼:) – AspOnMyNet 2010-02-12 18:35:09