Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memeriksa Warisan Jenis (Termasuk Kelas Asas Sendiri) dalam C#?

Bagaimanakah Saya Boleh Memeriksa Warisan Jenis (Termasuk Kelas Asas Sendiri) dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-09 15:01:43590semak imbas

How Can I Reliably Check for Type Inheritance (Including the Base Class Itself) in C#?

Semakan Warisan Jenis C# yang Boleh Dipercayai: Termasuk Kelas Asas

Mengesahkan warisan jenis dalam C#, termasuk sama ada sesuatu jenis ialah kelas asas itu sendiri, memerlukan pertimbangan yang teliti. Kaedah typeof(SubClass).IsSubclassOf(typeof(BaseClass)) standard berfungsi dengan baik untuk subkelas tetapi gagal apabila membandingkan jenis dengan kelas asasnya sendiri (mengembalikan false).

Menangani Had Kaedah Sedia Ada

Beberapa pendekatan wujud, setiap satu dengan batasan:

  • Type.IsSubclassOf: Hanya mengenal pasti subkelas, bukan kelas asas itu sendiri.
  • Type.IsAssignableFrom: Termasuk kelas asas, tetapi boleh mengembalikan true untuk jenis yang tidak berkaitan dengan penukaran tersirat atau eksplisit.
  • is dan as pengendali: Beroperasi pada objek, bukan Type objek secara langsung.

Penyelesaian Teguh: Kaedah IsSameOrSubclass

Untuk mengatasi batasan ini, kaedah tersuai menyediakan penyelesaian yang boleh dipercayai:

<code class="language-csharp">public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase;
}</code>

Kaedah ini menentukan dengan tepat sama ada potentialDescendant sama ada subkelas, atau sama dengan, potentialBase. Ia menggabungkan pemeriksaan IsSubclassOf dengan perbandingan kesaksamaan langsung, memastikan pengesahan warisan yang komprehensif dan tepat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memeriksa Warisan Jenis (Termasuk Kelas Asas Sendiri) dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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