Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menyemak Perhubungan Subkelas dengan Amanah dalam C# Termasuk Perbandingan Jenis Kendiri?

Bagaimanakah Saya Boleh Menyemak Perhubungan Subkelas dengan Amanah dalam C# Termasuk Perbandingan Jenis Kendiri?

Susan Sarandon
Lepaskan: 2025-01-09 15:06:47
asal
812 orang telah melayarinya

How Can I Reliably Check for Subclass Relationships in C# Including Self-Type Comparisons?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Untuk mengatasi had ini, beberapa pilihan wujud:

Jenis.IsAssignableFrom:

<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan