属性-目标方法的目的是什么?

本文关键字:是什么 方法 目标 属性 | 更新日期: 2023-09-27 18:06:12

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

属性-目标方法的目的是什么?

在这种情况下,您不需要指定目标(直接位于方法上方,method是默认目标),它只是为了完整。就像在向类添加成员时不需要指定private一样,但许多人还是这样做了。在许多情况下,代码生成器喜欢对事情进行额外的显式处理。

同时,我认为在这种情况下,额外的说明符使事情变得更清楚:

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