Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan jika Kelas Diperolehi daripada Kelas Generik dalam C#?
Mengenal pasti Warisan daripada Kelas Generik dalam C#
Pengaturcaraan berorientasikan objek menggunakan warisan kelas untuk mewujudkan hubungan hierarki. Kelas generik C# memperkenalkan lapisan kerumitan apabila menentukan warisan. Artikel ini menangani cabaran untuk mengesahkan sama ada kelas berasal daripada kelas generik.
Pendekatan biasa menggunakan IsSubclassOf
terus pada definisi jenis generik gagal. Penyelesaiannya terletak pada menggunakan kaedah tersuai, IsSubclassOfRawGeneric
, yang mengendalikan perbandingan jenis generik dengan berkesan.
Ini penyelesaiannya:
<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) { while (toCheck != null && toCheck != typeof(object)) { Type cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; if (generic == cur) { return true; } toCheck = toCheck.BaseType; } return false; }</code>
Fungsi ini berulang melalui rantaian warisan toCheck
(jenis yang sedang diperiksa). Bagi setiap jenis, ia memperoleh definisi jenis generik menggunakan GetGenericTypeDefinition()
jika jenisnya adalah generik; jika tidak, ia menggunakan jenis itu sendiri. Fungsi kemudian membandingkan ini dengan generic
(takrif jenis generik untuk diperiksa). Padanan menunjukkan warisan daripada kelas generik yang ditentukan.
Kaedah ini menyediakan penyelesaian yang mantap untuk menentukan sama ada kelas mewarisi daripada kelas generik dalam C#, mengatasi batasan kaedah IsSubclassOf
standard dalam senario khusus ini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan jika Kelas Diperolehi daripada Kelas Generik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!