约束类型允许C#中的加/减操作(+/-)

时间:2011-04-01 16:56:58

标签: c# types

这可能吗?

public interface Foo<TBar>
  where TBar : (can use the '+' and '-' operators)

感谢。

4 个答案:

答案 0 :(得分:7)

您可以创建一个类型Foo,重载这两个运算符,然后将您的泛型类型约束到它。但是,您不能将通用参数限制为要求任意类型在临时基础上重载此类运算符。

答案 1 :(得分:5)

是和否。通用参数只能限制为

  • 实施inerface
  • 拥有可访问的无参数构造函数(new()
  • 拥有特定的基本类型
  • 是一个结构/类

+-运算符有用的唯一一个是基类型。因此,如果基类型包含这些运算符,您可以约束TBar以实现它们。

然而,这在一般意义上不起作用。无论您选择哪种基本类型,它都无法使用+-最常用的类型。即intdoublestring等等......因为它们是从没有此约束的ValueType继承而来的

答案 2 :(得分:2)

您可以重载运算符:

public static TBar operator +(TBar c1, TBar c2) 
{
   return ... // do the math
}

答案 3 :(得分:2)

不,这是不可能的。

理论上,您可以将TBar约束为实现这些运算符的类型,但运算符是静态的,它们不是继承的。

这意味着您可以有效地将类型限制为基本类型,在这种情况下,您可以完全删除泛型。

不,你不能将你的TBar通用参数限制为“任何实现这些运算符的类型”,它只是在语言中不可用。