Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kekangan Generik Boleh Membezakan Secara Berkesan Antara Nilai dan Jenis Rujukan dalam C#?

Bagaimanakah Kekangan Generik Boleh Membezakan Secara Berkesan Antara Nilai dan Jenis Rujukan dalam C#?

Mary-Kate Olsen
Lepaskan: 2024-12-30 19:00:16
asal
937 orang telah melayarinya

How Can Generic Constraints Effectively Differentiate Between Value and Reference Types in C#?

Kekangan Generik: Membezakan Antara Nilai dan Jenis Rujukan

Pengenalan

Dalam pengaturcaraan generik, kekangan membolehkan kami menentukan sekatan pada parameter jenis. Satu isu biasa ialah membezakan antara jenis nilai (cth., integer) dan jenis rujukan (cth., rentetan). Soalan ini meneroka kes di mana kekangan pada parameter jenis tidak dapat diselesaikan seperti yang dijangkakan.

Masalahnya

Pengarang mengemukakan cabaran untuk membezakan antara senario jenis nilai yang berbeza: biasa jenis nilai (int), jenis nilai nullable (int?), dan jenis rujukan (rentetan). Pada mulanya, mereka mencadangkan menggunakan where T : struct untuk mengenal pasti jenis struct (jenis nilai) dan di mana T : kelas untuk mengenal pasti jenis rujukan, tetapi ia mengakibatkan ralat penyusunan disebabkan oleh definisi ahli pendua.

The Penyelesaian

Pandangan utama ialah kekangan bukan sebahagian daripada tandatangan kaedah dan resolusi beban lampau mempertimbangkan jenis parameter. Jadi, penulis meletakkan kekangan dalam parameter untuk membezakan antara nilai dan jenis rujukan. Berikut ialah kod yang disemak:

class RequireStruct<T> where T : struct { }
class RequireClass<T> where T : class { }

static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
Salin selepas log masuk

Dengan menggunakan kelas pembantu ini, kod kini membezakan dengan betul antara senario jenis nilai yang berbeza. Foo(z) akan menyusun dan dipetakan kepada kaedah (3), kerana rentetan ialah jenis rujukan.

Atas ialah kandungan terperinci Bagaimanakah Kekangan Generik Boleh Membezakan Secara Berkesan Antara Nilai dan Jenis Rujukan 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