如果我已經創建了一個屬性public class SomeAttribute : Attribute {}
我用它是這樣的:差異(有些)
[SomeAttribute]
public class ClassA{}
或本:
[Some]
public class ClassA{}
有什麼區別?什麼是允許這個工作的基本機制?
如果我已經創建了一個屬性public class SomeAttribute : Attribute {}
我用它是這樣的:差異(有些)
[SomeAttribute]
public class ClassA{}
或本:
[Some]
public class ClassA{}
有什麼區別?什麼是允許這個工作的基本機制?
無有按照慣例,2
沒有區別CLR中字Attribute
屬性結束(他們也是從System.Attribute
派生)。當使用屬性時,可以明確地包含該單詞或省略它(僅僅爲了減少視覺混亂),並讓編譯器爲您包含它。
的C#規格的第17.1節說:
17.1屬性類
從抽象類System.Attribute派生, 是否直接或間接地,是一個屬性類的類。 屬性類的聲明定義了一種新類型的屬性,可以將其放置在聲明的 上。按照慣例,屬性類用一個 後綴的Attribute來命名。屬性的使用可以包括或者省略這個後綴 。
第17.2節深,它解釋說,如果存在兩個版本的編譯器不會打破僵局:
17.2屬性規範
...
如果一個屬性類被發現有和沒有這個後綴,存在一個不明確的地方,並且會產生一個編譯時錯誤。
在這種情況下,您可以通過指定@Some
或@SomeAttribute
來解決編譯錯誤。 (該@
表示有點少見「逐字識別」功能。
這裏只有如果有一個名爲Some
類,或者一個名爲SomeAttributeAttribute
的差異。
兩種表示法會發現class SomeAttribute
,但[Some]
還將尋找class Some
。而[SomeAttribute]
還會發現class SomeAttributeAttribute
。
還有就是兩者之間沒有什麼區別。見sblom的答案。
通常,如果你DEF在自定義屬性類中,您添加了單詞Attribute。例如:
public class SomeAttribute : System.Attribute {
}
當您使用該類時,通常會忽略單詞Attribute。例如:
[Some()]
public class ClassA {
}
隱含地它指的是相同的。沒有優勢,因爲在那個位置你只能添加屬性。因此你提到它? – Zenwalker 2012-01-06 05:39:48
我想知道是否有差異 – bluntstone 2012-01-18 23:34:50