C# 泛型類別算術運算子重載
在C#中,對泛型類別重載算術運算子需要一種方法來確保泛型類型支援算術運算。提供的程式碼示範了在沒有特定約束的情況下,無法將 運算子應用於泛型類型 T 的問題。
為了解決這個問題,我們可以利用 IConvertible
介面作為泛型類別的限制。此介面定義了一組用於在各種資料類型(包括數值類型)之間進行轉換的方法。以下是如何使用 IConvertible
約束實現算術運算子重載的範例:
<code class="language-csharp">public static operator T +(T x, T y) where T : IConvertible { Type type = typeof(T); if (type == typeof(string) || type == typeof(DateTime)) throw new ArgumentException($"类型 {type.FullName} 不受支持", "T"); try { return (T)(object)(x.ToDouble(NumberFormatInfo.CurrentInfo) + y.ToDouble(NumberFormatInfo.CurrentInfo)); } catch (Exception ex) { throw new ApplicationException("操作失败。", ex); } }</code>
此實作檢查不支援的類型(例如字串和日期),並在執行加法運算之前將操作數轉換為雙精確度值。這允許對泛型數值類型進行算術運算。
透過使用 IConvertible
約束,我們可以為接受支援算術運算的原始數字類型的泛型類別定義算術運算子。這為在泛型程式碼中處理數值資料提供了一個靈活且可擴展的解決方案。
以上是如何在 C# 中重載受約束泛型類別的算術運算子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!