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

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

Linda Hamilton
Linda Hamiltonasal
2025-01-11 12:41:43657semak imbas

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

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