Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membebankan Operator Aritmetik dalam Kelas Generik Terkekang dalam C#?

Bagaimanakah Saya Boleh Membebankan Operator Aritmetik dalam Kelas Generik Terkekang dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-11 12:57:42243semak imbas

How Can I Overload Arithmetic Operators in Constrained Generic Classes in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn