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 daripublic class GenericClass<T> : GenericInterface<T> { } public class Test : GenericClass<SomeType> { }
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.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; }
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!