方法属性目标的用途是什么?

8
在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属性的目标(例如解决歧义),还是它只是为了完整性而存在?
1个回答

8
在这种情况下,您不需要指定目标(位于方法正上方,默认目标为method),它只是为了完整性而存在。就像在向类添加成员时不需要指定private一样,但许多人仍然这样做。在许多情况下,代码生成器喜欢对事情进行额外的明确说明。
此外,我认为在这种情况下,附加说明符会使事情更加清晰:
[method: SomeAttr]
[return: SomeOtherAttr]
int SomeMethod() { return 0; } 

1
此外,在示例 [method: SomeAttr] public event Action MyFieldLikeEvent; 中,method: 目标不是多余的。它意味着该属性将应用于自动生成的访问器(addremove)。默认情况下,该属性将应用于事件本身。 - Jeppe Stig Nielsen
我相信你的意思是你不需要指定“internal”,因为对于未指定字段等,默认访问修饰符是它。 - nicholas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接