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

Bagaimanakah Saya Boleh Menentukan jika Jenis Mewarisi daripada Kelas Asas Generik dalam C#?

Patricia Arquette
Lepaskan: 2025-01-24 19:06:10
asal
592 orang telah melayarinya

How Can I Determine if a Type Inherits from a Generic Base Class in C#?

mengesan sama ada jenis C#mewarisi dari jenis genetik

Dalam pengaturcaraan, hubungan antara kelas (terutama yang terlibat dalam warisan) biasanya diperlukan. Walau bagaimanapun, apabila memproses kelas generik dengan parameter jenis, mungkin sukar untuk mengesahkan warisan dengan kaedah standard.

<:> Soalan:

Dengan mengandaikan anda mempunyai generik dan derivatif berikut:

anda ingin menyemak sama ada objek jenis yang diberikan (contohnya,

) menunjukkan jenis warisan dari
<code class="language-csharp">public class GenericClass<T> : GenericInterface<T>
{
}

public class Test : GenericClass<SomeType>
{
}</code>
Salin selepas log masuk
. Walau bagaimanapun, penggunaan

akan gagal kerana ia tidak menganggap parameter generik. typeof(Test) GenericClass Penyelesaian: typeof(Test).IsSubclassOf(typeof(GenericClass))

Untuk menyelesaikan masalah ini, anda boleh menggunakan kod berikut untuk menentukan sama ada jenis itu diperoleh daripada jenis genetik:

Kaedah ini menentukan sama ada

secara langsung atau tidak langsung diwarisi dari

dengan melintasi rantaian warisan dan membandingkan jenis asas. Ia memproses jenis bukan generik dan generik dengan memeriksa kehadiran atribut dan mengambil definisi jenis generik.
<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (generic == cur) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>
Salin selepas log masuk

Melalui kaedah ini, anda boleh menentukan dengan tepat sama ada jenis itu diperoleh daripada jenis genetik, tanpa mengira parameter jenis yang ditentukan. toCheck generic Contoh: IsGenericType

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan jika Jenis Mewarisi daripada Kelas Asas Generik dalam C#?. 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