mengesan sama ada jenis C#mewarisi dari jenis genetik
Dalam pengaturcaraan, hubungan antara kelas (terutama yang terlibat dalam warisan) biasanya diperlukan. Walau bagaimanapun, apabila memproses kelas generik dengan parameter jenis, mungkin sukar untuk mengesahkan warisan dengan kaedah standard.
<:> Soalan:
Dengan mengandaikan anda mempunyai generik dan derivatif berikut:
anda ingin menyemak sama ada objek jenis yang diberikan (contohnya,
) menunjukkan jenis warisan dari<code class="language-csharp">public class GenericClass<T> : GenericInterface<T> { } public class Test : GenericClass<SomeType> { }</code>
akan gagal kerana ia tidak menganggap parameter generik. typeof(Test)
GenericClass
Penyelesaian: typeof(Test).IsSubclassOf(typeof(GenericClass))
Untuk menyelesaikan masalah ini, anda boleh menggunakan kod berikut untuk menentukan sama ada jenis itu diperoleh daripada jenis genetik:
Kaedah ini menentukan sama adasecara langsung atau tidak langsung diwarisi dari
dengan melintasi rantaian warisan dan membandingkan jenis asas. Ia memproses jenis bukan generik dan generik dengan memeriksa kehadiran atribut dan mengambil definisi jenis generik.<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) { while (toCheck != null && toCheck != typeof(object)) { var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; if (generic == cur) { return true; } toCheck = toCheck.BaseType; } return false; }</code>
Melalui kaedah ini, anda boleh menentukan dengan tepat sama ada jenis itu diperoleh daripada jenis genetik, tanpa mengira parameter jenis yang ditentukan. toCheck
generic
Contoh: IsGenericType
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan jika Jenis Mewarisi daripada Kelas Asas Generik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!