HiveBrain v1.2.0
Get Started
← Back to all entries
gotchacsharpCritical

Why does C# forbid generic attribute types?

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
whyattributedoestypesgenericforbid

Problem

This causes a compile-time exception:

public sealed class ValidatesAttribute : Attribute
{

}

[Validates]
public static class StringValidation
{

}


I realize C# does not support generic attributes. However, after much Googling, I can't seem to find the reason.

Does anyone know why generic types cannot derive from Attribute? Any theories?

Solution

Well, I can't answer why it's not available, but I can confirm that it's not a CLI issue. The CLI spec doesn't mention it (as far as I can see) and if you use IL directly you can create a generic attribute. The part of the C# 3 spec that bans it - section 10.1.4 "Class base specification" doesn't give any justification.

The annotated ECMA C# 2 spec doesn't give any helpful information either, although it does provide an example of what's not allowed.

My copy of the annotated C# 3 spec should arrive tomorrow... I'll see if that gives any more information. Anyway, it's definitely a language decision rather than a runtime one.

EDIT: Answer from Eric Lippert (paraphrased): no particular reason, except to avoid complexity in both the language and compiler for a use case which doesn't add much value.

Context

Stack Overflow Q#294216, score: 387

Revisions (0)

No revisions yet.