克服.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中文網其他相關文章!