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

vcs*_*nes 7 c# attributes

在C#规范(17.2)中,它指示在指定属性时有多个属性目标.当您需要将属性应用于通常没有"真实"位置来指定属性的内容时,这种情况很常见.例如,return目标经常在平台Invoke中使用:

[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SomeWin32Method(); //Assume this is valid, has a DllImport, etc.
Run Code Online (Sandbox Code Playgroud)

但是我注意到还有其他属性目标,例如method:

[method: DllImport("somelib.dll")]
static extern bool SomeWin32Method();
Run Code Online (Sandbox Code Playgroud)

在什么情况下我需要明确定义method属性目标(比如解决模糊性),还是仅仅为了完整性而存在?

Bot*_*000 7

在这种情况下,您不需要指定目标(位于方法的正上方,method是默认目标),它只是为了完整性.就像你不需要指定private何时向一个类添加成员一样,但是很多人无论如何都要这样做.在许多情况下,代码生成器喜欢对事物更加明确.

此外,我想在这样的情况下,附加说明符使事情更清楚:

[method: SomeAttr]
[return: SomeOtherAttr]
int SomeMethod() { return 0; } 
Run Code Online (Sandbox Code Playgroud)