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
:
<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
Walau bagaimanapun, pendekatan ini gagal apabila menyemak hubungan subkelas antara jenis dan dirinya sendiri:
<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
Untuk mengatasi had ini, beberapa pilihan wujud:
Jenis.IsAssignableFrom:
<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true</code>
Walaupun kaedah ini mengembalikan benar untuk subkelas, kaedah ini juga memberikan positif palsu untuk jenis yang tidak berkaitan, contohnya:
<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true</code>
sedang dan sebagai (operasi objek):
Pengendali ini memerlukan objek dan bukannya objek jenis dan tidak boleh digunakan untuk membandingkan definisi jenis:
<code class="language-csharp">// 无法编译: SubClass is BaseClass // 无法编译: typeof(SubClass) is typeof(BaseClass)</code>
Kaedah tersuai:
Untuk menyemak perhubungan subkelas dengan tepat, anda boleh mencipta kaedah pembantu:
<code class="language-csharp">public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant) { return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase; }</code>
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!