如果我创建了一个属性 public class SomeAttribute : Attribute {} 并且我像这样使用它:

[SomeAttribute]
public class ClassA{}

或这个:
[Some]
public class ClassA{}

有什么区别吗?允许它工作的底层机制是什么?

最佳答案

按照惯例,CLR 属性以单词 Attribute 结尾(它们也源自 System.Attribute )。使用属性时,可以安全地显式包含该词,或者省略它(只是为了减少视觉困惑)并让编译器为您包含它。

C# 规范的第 17.1 节说:



在第 17.2 节的深处,它解释了如果两个版本都存在,编译器将不会打破平局:



在这种情况下,您可以通过指定 @Some@SomeAttribute 来解决编译错误。 (@ 表示有点不常见的“逐字标识符”功能。

关于c# - 用 [SomeAttribute] 和 [Some] 装饰类的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8753821/

10-10 22:55