Rumah >pembangunan bahagian belakang >C++ >Mengapa Jenis Generik Tidak Dibenarkan sebagai Jenis Asas Atribut dalam C#?
C# tidak membenarkan jenis generik sebagai jenis asas atribut. Percubaan ini, seperti yang ditunjukkan di bawah, menghasilkan ralat masa kompilasi:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
Had ini, walaupun C# mempunyai sokongan generik yang meluas, membingungkan ramai.
Spesifikasi CLI tidak secara eksplisit melarang atribut generik. Walau bagaimanapun, peperiksaan IL langsung menunjukkan penciptaan mereka adalah mungkin. Ini menunjukkan kepada sekatan yang berasal dari bahasa C# itu sendiri.
Spesifikasi C# 3 (bahagian 10.1.4) mahupun spesifikasi ECMA C# 2 tidak memberikan penjelasan yang jelas untuk larangan ini, walaupun mendokumentasikan had atribut lain.
Eric Lippert, seorang tokoh terkemuka dalam komuniti C#, mencadangkan sekatan itu memudahkan kedua-dua bahasa dan pengkompilnya. Faedah yang dirasakan membenarkan atribut generik dianggap tidak penting berbanding dengan potensi kerumitan yang boleh diperkenalkan.
Atas ialah kandungan terperinci Mengapa Jenis Generik Tidak Dibenarkan sebagai Jenis Asas Atribut dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!