Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan Dengan Tepat jika Satu Jenis Adalah Subjenis Lain dalam C#?

Bagaimanakah Saya Boleh Menentukan Dengan Tepat jika Satu Jenis Adalah Subjenis Lain dalam C#?

Barbara Streisand
Lepaskan: 2025-01-09 15:17:41
asal
174 orang telah melayarinya

How Can I Accurately Determine if One Type Is a Subtype of Another in C#?

Kaedah yang berkesan dalam C# untuk menentukan dengan tepat sama ada sesuatu jenis ialah subjenis jenis lain

Apabila berurusan dengan jenis dalam C#, anda selalunya perlu menentukan hubungan antara jenis. Keperluan biasa adalah untuk menyemak sama ada sesuatu jenis ialah subkelas jenis lain, atau lebih tepat lagi, subjenis kelas itu.

IsSubclassOf: Kebenaran separa

Kaedah

Type.IsSubclassOf menyediakan cara untuk menyemak terus sama ada sesuatu jenis ialah subkelas jenis lain:

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

Walau bagaimanapun, pendekatan ini gagal apabila kedua-dua jenis adalah sama:

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

AssignableFrom: Lebih luas tetapi tidak sempurna

Pendekatan

Type.IsAssignableFrom menyelesaikan masalah ini, tetapi ia juga mempunyai kelemahannya sendiri. Walaupun ia menunjukkan dengan tepat bahawa subkelas atau jenis yang sama ialah subjenis, ia juga mungkin mengembalikan positif palsu untuk jenis yang tidak berkaitan:

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

adalah dan sebagai: berorientasikan objek tetapi dengan pengehadan

Kata kunci

is dan as juga boleh digunakan untuk semakan jenis, tetapi kata kunci tersebut bertindak pada tika objek dan bukannya menaip sendiri. Ini mengehadkan kebolehgunaannya dalam analisis kod statik.

Kesimpulan: Menggabungkan kaedah untuk meningkatkan ketepatan

Malangnya, tiada satu kaedah terbina dalam menangkap sepenuhnya konsep semakan subjenis tanpa memperkenalkan hasil positif palsu atau memerlukan rujukan objek. Cara yang paling boleh dipercayai ialah menggabungkan kaedah Type.IsSubclassOf dengan semakan kesaksamaan yang jelas:

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

Kaedah tersuai ini menyediakan cara yang ringkas dan tepat untuk menentukan sama ada sesuatu jenis ialah subjenis jenis lain, termasuk kes jenis yang sama.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Dengan Tepat jika Satu Jenis Adalah Subjenis Lain 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