在浏览C#语言规范5.0时,我意识到您可以定义一个extern event.我习惯于平台调用和本机回调的外部方法.我在.NET世界的11年里没有遇到过这个概念.
extern事件与互操作?我搜索了'extern'的规范,发现属性,索引器,构造函数,静态构造函数,终结符(!)甚至运算符(!)都可以extern.字段不能.(我还了解到命名空间别名可以是'extern',但它意味着完全不同的东西.)
编辑:澄清事情.因此,extern不适用于事件概念或财产概念,而是适用于组成方法.那是对的吗?COM事件与事件有什么不同DllImport?
小智 4
我以前从未见过这个,搜索并没有真正带来任何实际用途,但可以在 Roslyn 编译器测试套件中找到它:
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
public class C
{
[method: DllImport("c")]
public extern static event System.Action G;
}
Run Code Online (Sandbox Code Playgroud)
该测试验证这是否从DLL 导入了add_G和函数。由于仅导入访问器方法,因此其用户无法引发该事件,只能由外部 DLL 来完成。remove_GcC
我怀疑它只是为了完整性。关键字extern已经存在,并且将其与事件结合起来拒绝它很可能比使其发挥作用需要更多的工作。
至于您的编辑,属性、索引器、构造函数、静态构造函数、终结器、运算符都有一个共同点:它们都是方法。方法很奇特,但仍然是方法。事件访问器也是如此。由于方法可以是extern,因此适用于所有方法,除非规则有特定的例外。特定的例外情况需要工作,并且该工作的收益必须大于成本。在这种情况下,拒绝几乎没有任何好处extern。
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |