Semak perhubungan subkelas dalam C# dengan pasti, termasuk perbandingan jenis diri
Untuk menentukan sama ada sesuatu jenis ialah subkelas jenis lain dalam C#, anda boleh menggunakan IsSubclassOf
:
typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true
Walau bagaimanapun, pendekatan ini gagal apabila menyemak hubungan subkelas antara jenis dan dirinya sendiri:
typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false
Untuk mengatasi had ini, beberapa pilihan wujud:
Jenis.IsAssignableFrom:
typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
Walaupun kaedah ini mengembalikan benar untuk subkelas, kaedah ini juga memberikan positif palsu untuk jenis yang tidak berkaitan, contohnya:
typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true
sedang dan sebagai (operasi objek):
Pengendali ini memerlukan objek dan bukannya objek jenis dan tidak boleh digunakan untuk membandingkan definisi jenis:
// 无法编译: SubClass is BaseClass // 无法编译: typeof(SubClass) is typeof(BaseClass)
Kaedah tersuai:
Untuk menyemak perhubungan subkelas dengan tepat, anda boleh mencipta kaedah pembantu:
public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant) { return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase; }
Kaedah ini mengendalikan subkelas dan perbandingan kesamaan dengan betul.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyemak Perhubungan Subkelas dengan Amanah dalam C# Termasuk Perbandingan Jenis Kendiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!