C# 中的 AttributeUsage 属性用于指定自定义属性在代码中的使用方式。它有以下限制:
- 只能应用于类、方法、属性、参数、事件和返回值的声明上。
- 一个自定义属性只能被应用一次。如果尝试多次应用相同的属性,编译器会报错。
- 属性应用于元素时,其顺序并不重要。属性可以以任何顺序应用于同一个元素。
- 属性应用于类型时,可以应用于类的定义、接口、结构、枚举、委托或方法的定义。
- 属性应用于方法参数时,只能应用于值参数和引用参数,不能应用于输出参数。
- 属性应用于返回值时,只能应用于方法的返回值。
- 属性应用于字段时,只能应用于实例字段和静态字段,不能应用于常量字段和只读字段。
- 属性应用于事件时,只能应用于事件的声明。
- 属性应用于类型参数时,只能应用于泛型类型的定义。
- 属性应用于泛型约束时,只能应用于泛型类型的定义。
总之,AttributeUsage 属性提供了一种灵活的方式来控制自定义属性在代码中的使用方式,但同时也有一些限制,需要开发者在使用时注意。