约束类型允许C#中的加/减操作(+/-)
这可能吗?
public interface Foo where TBar : (can use the '+' and '-' operators)
谢谢。
您可以创建一个类型Foo
,重载这两个运算符,然后将generics类型约束到它。 但是,您不能将通用参数限制为要求任意类型在临时基础上重载此类运算符。
是和否。通用参数只能限制为
- 实现一个表面
- 有一个可访问的无参数构造函数(
new()
) - 有一个特定的基本类型
- 是一个结构/类
对于+
和-
运算符唯一有用的是基类型。 因此,如果基类型包含这些运算符,您可以限制TBar
也实现它们。
然而,这在一般意义上不起作用。 无论您选择哪种基类型,它都无法使用最常用于+
和-
。 即int
, double
, string
等…因为它们从ValueType
inheritance而没有这个约束
您可以重载运算符:
public static TBar operator +(TBar c1, TBar c2) { return ... // do the math }
不,这是不可能的。
理论上,您可以将TBar约束为实现这些运算符的类型,但运算符是静态的,它们不是inheritance的。
这意味着您将有效地将类型限制为仅基类型,在这种情况下,您可以完全删除generics。
不,你不能将你的TBar通用参数限制为“任何实现这些运算符的类型”,它只是在语言中不可用。