这可能吗?
public interface Foo<TBar>
where TBar : (can use the '+' and '-' operators)
感谢。
答案 0 :(得分:7)
您可以创建一个类型Foo
,重载这两个运算符,然后将您的泛型类型约束到它。但是,您不能将通用参数限制为要求任意类型在临时基础上重载此类运算符。
答案 1 :(得分:5)
是和否。通用参数只能限制为
new()
)对+
和-
运算符有用的唯一一个是基类型。因此,如果基类型包含这些运算符,您可以约束TBar
以实现它们。
然而,这在一般意义上不起作用。无论您选择哪种基本类型,它都无法使用+
和-
最常用的类型。即int
,double
,string
等等......因为它们是从没有此约束的ValueType
继承而来的
答案 2 :(得分:2)
您可以重载运算符:
public static TBar operator +(TBar c1, TBar c2)
{
return ... // do the math
}
答案 3 :(得分:2)
不,这是不可能的。
理论上,您可以将TBar约束为实现这些运算符的类型,但运算符是静态的,它们不是继承的。
这意味着您可以有效地将类型限制为仅基本类型,在这种情况下,您可以完全删除泛型。
不,你不能将你的TBar通用参数限制为“任何实现这些运算符的类型”,它只是在语言中不可用。