克服 .NET 泛型中的重载运算符约束
在 .NET 中,泛型方法通常需要对其操作的类型进行特定约束。然而,对具有重载运算符的类型实施约束可能具有挑战性,因为接口无法容纳运算符重载。
这个问题深入研究了可用于实现接受具有重载运算符的类型(特别是减法)的泛型方法的选项。
解决约束
不幸的是,没有直接的解决方案约束。运算符是静态实体,不能用约束来表达。此外,现有基元缺乏可以模拟此行为的特定接口实现。
.NET 3.5 及更高版本中的方法
但是,.NET 3.5 和更高版本中有可用的解决方法更高版本:
T result = Operator.Add(first, second); // implicit <T>; here
static T Add<T>(T x, T y) { dynamic dx = x, dy = y; return dx + dy; }
替代方案:基于接口的解决方案
另一种方法涉及使用代表所需运算符的方法创建接口:
interface ICalc<T> { T Add(T, T)() T Subtract(T, T)() }
虽然此方法消除了通用约束的使用,但它需要传递一个ICalc
最终,方法的选择取决于项目的具体要求和兼容性约束。
以上是如何在 .NET 泛型方法中使用重载运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!