2012-01-06 75 views
3

如果我已經創建了一個屬性public class SomeAttribute : Attribute {}我用它是這樣的:差異(有些)

[SomeAttribute] 
public class ClassA{} 

或本:

[Some] 
public class ClassA{} 

有什麼區別?什麼是允許這個工作的基本機制?

+0

隱含地它指的是相同的。沒有優勢,因爲在那個位置你只能添加屬性。因此你提到它? – Zenwalker 2012-01-06 05:39:48

+0

我想知道是否有差異 – bluntstone 2012-01-18 23:34:50

回答

1

無有按照慣例,2

7

沒有區別CLR中字Attribute屬性結束(他們也是從System.Attribute派生)。當使用屬性時,可以明確地包含該單詞或省略它(僅僅爲了減少視覺混亂),並讓編譯器爲您包含它。

的C#規格的第17.1節說:

17.1屬性類

從抽象類System.Attribute派生, 是否直接或間接地,是一個屬性類的類。 屬性類的聲明定義了一種新類型的屬性,可以將其放置在聲明的 上。按照慣例,屬性類用一個 後綴的Attribute來命名。屬性的使用可以包括或者省略這個後綴 。

第17.2節深,它解釋說,如果存在兩個版本的編譯器不會打破僵局:

17.2屬性規範

...

如果一個屬性類被發現有和沒有這個後綴,存在一個不明確的地方,並且會產生一個編譯時錯誤。

在這種情況下,您可以通過指定@Some@SomeAttribute來解決編譯錯誤。 (該@表示有點少見「逐字識別」功能。

0

這裏只有如果有一個名爲Some類,或者一個名爲SomeAttributeAttribute的差異。

兩種表示法會發現class SomeAttribute,但[Some]還將尋找class Some 。而[SomeAttribute]還會發現class SomeAttributeAttribute

0

還有就是兩者之間沒有什麼區別。見sblom的答案。

通常,如果你DEF在自定義屬性類中,您添加了單詞Attribute。例如:

public class SomeAttribute : System.Attribute { 
} 

當您使用該類時,通常會忽略單詞Attribute。例如:

[Some()] 
public class ClassA { 
} 
+0

要說「......你*可以*忽略單詞...」或「...你*通常*忽略單詞」會更準確。 。「或類似 – phoog 2012-01-06 07:08:42

+0

@phoog;通常插入。謝謝。 – AMissico 2012-01-06 14:24:46