Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan jika Kelas Diperolehi daripada Kelas Generik dalam C#?

Bagaimanakah Saya Boleh Menentukan jika Kelas Diperolehi daripada Kelas Generik dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-24 18:47:09756semak imbas

How Can I Determine if a Class Is Derived from a Generic Class in C#?

Mengenal pasti Warisan daripada Kelas Generik dalam C#

Pengaturcaraan berorientasikan objek menggunakan warisan kelas untuk mewujudkan hubungan hierarki. Kelas generik C# memperkenalkan lapisan kerumitan apabila menentukan warisan. Artikel ini menangani cabaran untuk mengesahkan sama ada kelas berasal daripada kelas generik.

Pendekatan biasa menggunakan IsSubclassOf terus pada definisi jenis generik gagal. Penyelesaiannya terletak pada menggunakan kaedah tersuai, IsSubclassOfRawGeneric, yang mengendalikan perbandingan jenis generik dengan berkesan.

Ini penyelesaiannya:

<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        Type cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (generic == cur) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>

Fungsi ini berulang melalui rantaian warisan toCheck (jenis yang sedang diperiksa). Bagi setiap jenis, ia memperoleh definisi jenis generik menggunakan GetGenericTypeDefinition() jika jenisnya adalah generik; jika tidak, ia menggunakan jenis itu sendiri. Fungsi kemudian membandingkan ini dengan generic (takrif jenis generik untuk diperiksa). Padanan menunjukkan warisan daripada kelas generik yang ditentukan.

Kaedah ini menyediakan penyelesaian yang mantap untuk menentukan sama ada kelas mewarisi daripada kelas generik dalam C#, mengatasi batasan kaedah IsSubclassOf standard dalam senario khusus ini.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan jika Kelas Diperolehi daripada Kelas Generik 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