在C#规范(17.2)中,它指示在指定属性时有多个属性目标。当您需要将属性应用于通常没有“真实”位置来指定属性的内容时,这种情况很常见。例如,return
目标经常在平台调用中使用:
[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
属性目标(比如说解决歧义),还是仅仅为了完整性?
答案 0 :(得分:7)
在这种情况下,您不需要指定目标(位于方法正上方,method
是默认目标),它只是为了完整性。就像在向类中添加成员时不需要指定private
一样,但是很多人仍然会这样做。在许多情况下,代码生成器喜欢对事物更加明确。
此外,我认为在这种情况下,附加说明符会使事情变得更清晰:
[method: SomeAttr]
[return: SomeOtherAttr]
int SomeMethod() { return 0; }