Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membebankan Operator Aritmetik untuk Kelas Generik Terkekang dalam C#?
C# operator aritmetik kelas generik terlampau beban
Dalam C#, lebih memuatkan pengendali aritmetik pada kelas generik memerlukan satu cara untuk memastikan jenis generik menyokong operasi aritmetik. Kod yang disediakan menunjukkan ketidakupayaan untuk menggunakan operator pada jenis T generik tanpa kekangan tertentu.
Untuk menyelesaikan masalah ini, kita boleh menggunakan antara muka IConvertible
sebagai kekangan pada kelas generik. Antara muka ini mentakrifkan satu set kaedah untuk menukar antara pelbagai jenis data, termasuk jenis angka. Berikut ialah contoh cara melaksanakan lebihan beban operator aritmetik menggunakan kekangan 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>
Pelaksanaan ini menyemak jenis yang tidak disokong (seperti rentetan dan tarikh) dan menukar operan kepada nilai berganda sebelum melakukan operasi penambahan. Ini membolehkan operasi aritmetik dilakukan pada jenis berangka generik.
Dengan menggunakan kekangan IConvertible
, kami boleh mentakrifkan operator aritmetik untuk kelas generik yang menerima jenis angka primitif yang menyokong operasi aritmetik. Ini menyediakan penyelesaian yang fleksibel dan berskala untuk bekerja dengan data berangka dalam kod generik.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membebankan Operator Aritmetik untuk Kelas Generik Terkekang dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!