2013-03-27 74 views
7

在C#規範(17.2)中,它指示在指定屬性時有幾個屬性目標。當您需要將屬性應用於通常不具有指定屬性的「真實」位置的東西時,這很常見。例如,return目標是在平臺調用經常使用:方法attribute-target的用途是什麼?

[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SomeWin32Method(); //Assume this is valid, has a DllImport, etc. 

不過,我注意到,有其他屬性的目標,像method

[method: DllImport("somelib.dll")] 
static extern bool SomeWin32Method(); 

在什麼情況下,我需要明確定義method屬性目標(說解決歧義),還是隻是爲了完整性?

回答

7

在這種情況下,您不需要指定目標(位於方法正上方,method是默認目標),它只是爲了完整性。就像你在向一個班級添加成員時不需要指定private一樣,但很多人仍然這樣做。在很多情況下,代碼生成器喜歡對事物進行額外的明確。

另外,我認爲在這樣的情況下,附加的說明符使事情一點更加清晰:

[method: SomeAttr] 
[return: SomeOtherAttr] 
int SomeMethod() { return 0; } 
+1

此外,在該示例'[方法:SomeAttr]公共事件動作MyFieldLikeEvent;'中,'方法:'目標不是多餘的。這意味着該屬性將被應用於自動生成的訪問器('add'和'remove')。默認值是將該屬性應用於事件本身。 – 2014-01-02 17:24:02

+0

我相信你的意思是你不需要指定'internal',這是未指定字段的默認訪問修飾符等。 – nicholas 2016-01-06 14:03:38