约束,泛型变量和算术运算符

时间:2010-02-12 18:16:28

标签: c# .net

我想声明一个泛型类 Simple ,其中一个名为 Addition 的方法将使用两个泛型变量并使用 + 将它们添加到一起运营商。我以为我可以通过给类简单的下面的约束来实现这个目的:

class Simple<T> where T: int
{
    public T Addition(T firstInt, T secondInt)
    {
        return firstInt + secondInt;
    }
}

我怀疑错误与泛型有关,只有以下五种类型的约束 - ClassName,class,struct,InterfaceName,new()?那么,为什么泛型也不支持 StructureName 约束类型?这样我们就可以对泛型变量应用算术运算符了吗?!

感谢名单

3 个答案:

答案 0 :(得分:3)

StructName约束没有意义,因为你不能从值类型继承。

如果你有类似class Simple<T> where T : int的内容,那么只能使用Simple<T>实例化T = int,那么任何类型都不会继承int或任何其他值类型就此而言。

C#(CLR)缺少其他语言所知的type classes,这是一种在没有硬编码编译器机制的情况下处理运算符重载的常用机制(如在C#中)。

答案 1 :(得分:2)

将Generic类型约束到特定结构没有意义,因为结构类型不能被继承。这与写作相同:

class Simple
{
    public int Addition(int firstInt, int secondInt)
    {
        return firstInt + secondInt;
    }
}

不幸的是,由于支持IArithmetic interface,因此难以支持具有数学运算的泛型类型。如果您想查看基于泛型的数学运算符的一种方法,请查看Generic Operators in MiscUtil

答案 2 :(得分:1)

您将T约束为int。这是不明智的事情,因为只有一种int类型;所以如果你想要int,你可以直接写int

如果您不限制T,则无法使用+运算符,因为对象上没有定义+运算符。

C#泛型不是C ++模板。