Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kekangan Generik C# Boleh Membezakan Antara Jenis Nilai, Jenis Nilai Boleh Null dan Jenis Rujukan?

Bagaimanakah Kekangan Generik C# Boleh Membezakan Antara Jenis Nilai, Jenis Nilai Boleh Null dan Jenis Rujukan?

Linda Hamilton
Lepaskan: 2025-01-02 17:13:39
asal
688 orang telah melayarinya

How Can C# Generic Constraints Distinguish Between Value Types, Nullable Value Types, and Reference Types?

Kekangan Generik: Membezakan Antara Nilai dan Rujukan

Dalam C#, kekangan generik boleh digunakan untuk menguatkuasakan keperluan khusus pada parameter jenis. Ini amat berguna apabila membezakan antara jenis nilai, jenis nilai boleh null dan jenis rujukan.

Kekangan untuk Nilai dan Jenis Nilai Boleh Null

Pertimbangkan kod berikut, yang membezakan antara jenis nilai biasa dan jenis nilai boleh null:

static void Foo<T>(T a) where T : struct { } // Plain value type (e.g. int)
static void Foo<T>(T? a) where T : struct { } // Nullable value type (e.g. int?)
Salin selepas log masuk

Kekangan untuk Jenis Rujukan

Walau bagaimanapun, percubaan untuk mentakrifkan kekangan untuk jenis rujukan menggunakan kelas di mana T : menghasilkan ralat pengkompil. Ini kerana kekangan dikuatkuasakan semasa resolusi beban lampau dan parameter diutamakan daripada kekangan.

Untuk menyelesaikan isu ini, kekangan boleh diletakkan dalam parameter, walaupun dalam cara yang kurang elegan:

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 { } // Plain value type
static void Foo<T>(T? a) where T : struct { } // Nullable value type
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // Reference type
Salin selepas log masuk

Dengan meletakkan kekangan dalam parameter pilihan abaikan, pengkompil boleh membezakan antara kes yang berbeza tanpa bercanggah dengan jenis parameter. Ini membolehkan pemetaan jenis rujukan yang dimaksudkan kepada lebihan fungsi yang betul.

Atas ialah kandungan terperinci Bagaimanakah Kekangan Generik C# Boleh Membezakan Antara Jenis Nilai, Jenis Nilai Boleh Null dan Jenis Rujukan?. 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