在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
属性的目标(例如解决歧义),还是它只是为了完整性而存在?
[method: SomeAttr] public event Action MyFieldLikeEvent;
中,method:
目标不是多余的。它意味着该属性将应用于自动生成的访问器(add
和remove
)。默认情况下,该属性将应用于事件本身。 - Jeppe Stig Nielsen