7

在 C# 规范 (17.2) 中,它表示在指定属性时有多个属性目标。当您需要将属性应用于通常没有“真实”位置来指定属性的事物时,这很常见。例如,return平台Invoke中经常使用目标:

[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属性目标(比如解决歧义),还是为了完整性而存在?

4

1 回答 1

7

在这种情况下,您不需要指定目标(直接位于方法上方,method是默认目标),它只是为了完整性。就像您在向班级添加成员时不需要指定一样private,但很多人还是这样做了。在许多情况下,代码生成器喜欢对事物更加明确。

另外,我认为在这种情况下,附加说明符使事情更加清晰:

[method: SomeAttr]
[return: SomeOtherAttr]
int SomeMethod() { return 0; } 
于 2013-03-27T14:30:28.757 回答