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

typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini gagal apabila menyemak hubungan subkelas antara jenis dan dirinya sendiri:

typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false
Salin selepas log masuk

Untuk mengatasi had ini, beberapa pilihan wujud:

Jenis.IsAssignableFrom:

typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
Salin selepas log masuk

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

// 无法编译:
SubClass is BaseClass

// 无法编译:
typeof(SubClass) is typeof(BaseClass)
Salin selepas log masuk

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;
}
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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan