Rumah >pembangunan bahagian belakang >C++ >Mengapa Jenis Generik Tidak Dibenarkan sebagai Jenis Asas Atribut dalam C#?

Mengapa Jenis Generik Tidak Dibenarkan sebagai Jenis Asas Atribut dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-18 22:57:10885semak imbas

Why Are Generic Types Not Allowed as Attribute Base Types in C#?

Mengapa C# Mengehadkan Jenis Generik sebagai Asas Atribut

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.

Alasannya Masih Sukar Difahami

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.

Pendekatan Pragmatik

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!

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