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
Lepaskan: 2025-01-11 12:57:42
asal
285 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan