Rumah >pembangunan bahagian belakang >C++ >Mengapa C# Tidak Membenarkan Jenis Atribut Generik?
C# menawarkan penyesuaian yang meluas, namun tidak termasuk jenis atribut generik. Had ini menimbulkan persoalan: kenapa?
Percubaan untuk menentukan atribut tersuai dengan parameter jenis generik menghasilkan ralat masa kompilasi, seperti:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
Walaupun Common Language Infrastructure (CLI) menyokong atribut generik, C# secara khusus tidak membenarkannya. Ini bukan pengehadan CLI, sebaliknya pilihan reka bentuk C# dalaman.
Menentukan sebab sebenar larangan ini terbukti sukar. Spesifikasi bahasa C# tidak menawarkan penjelasan yang jelas. Walau bagaimanapun, perbincangan komuniti dan pendapat pakar mencadangkan beberapa kemungkinan.
Satu teori menyatakan bahawa jenis atribut generik akan memperkenalkan kerumitan yang tidak perlu kepada bahasa dan pengkompil. Menyokong ciri ini akan memerlukan mekanisme bahasa tambahan dan pengoptimuman pengkompil untuk mengekalkan kestabilan dan prestasi.
Perspektif lain ialah aplikasi praktikal atribut generik adalah terhad, dan kos pembangunan melebihi potensi manfaat. Pereka C# mungkin telah mengutamakan ciri lain.
Eric Lippert, bekas ahli pasukan C#, memberikan penjelasan ringkas: sekatan wujud untuk mengelakkan kerumitan yang tidak perlu dalam kedua-dua bahasa dan pengkompil untuk ciri dengan nilai praktikal yang terhad. Walaupun tidak sepenuhnya memuaskan, cerapan ini menerangkan proses membuat keputusan di sebalik pilihan reka bentuk C#.
Atas ialah kandungan terperinci Mengapa C# Tidak Membenarkan Jenis Atribut Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!