Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membebankan Operator Aritmetik dalam Kelas Generik Terkekang dalam C#?
Operator aritmetik melebih beban dalam kelas generik terhad C#
Dalam C#, mentakrifkan operator aritmetik untuk kelas generik dengan kekangan boleh menimbulkan cabaran. Pertimbangkan definisi kelas generik berikut:
<code class="language-csharp">public class ConstrainedNumber<T></code>
Antaranya, kekangan seperti IComparable dan IEquatable dikenakan pada jenis numerik primitif seperti int dan float.
Memandangkan T sendiri tidak mempunyai pengendali aritmetik yang wujud, menggunakan sintaks public static T operator (ConstrainedNumber<T> x, ConstrainedNumber<T> y)
untuk mentakrifkan operator aritmetik untuk kelas ini akan gagal.
Penyelesaian menggunakan IConvertible
Satu penyelesaian ialah menggunakan IConvertible sebagai kekangan. Antara muka ini menyokong penukaran jenis automatik, membenarkan operasi pada pelbagai jenis primitif. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa sesetengah jenis, seperti String dan DateTime, tidak menyokong pengendali aritmetik dan memerlukan semakan manual atau sekatan dalam pelaksanaan.
Berikut ialah contoh operator lebih muatan menggunakan IConvertible:
<code class="language-csharp">public static T operator +(T x, T y) where T : IConvertible { var type = typeof(T); if (type == typeof(String) || type == typeof(DateTime)) throw new ArgumentException(String.Format("The type {0} is not supported", type.FullName), "T"); try { return (T)(object)(x.ToDouble(NumberFormatInfo.CurrentInfo) + y.ToDouble(NumberFormatInfo.CurrentInfo)); } catch (Exception ex) { throw new ApplicationException("The operation failed.", ex); } }</code>
Dengan menggunakan IConvertible, kami boleh melakukan operasi aritmetik pada pelbagai jenis angka primitif sambil mengendalikan jenis yang tidak disokong dengan anggun. Ini menyediakan penyelesaian untuk menambah operator aritmetik ke kelas generik dengan kekangan dalam C#.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membebankan Operator Aritmetik dalam Kelas Generik Terkekang dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!