新手如何学网站建设,云主机如何建网站,最成功的个人网站,wordpress主题+插件C# 每发布一次新版本#xff0c;都会增加一些底层相关的新特性#xff0c; 这些特性对大多数商业程序来说并没什么实际用处#xff0c;主要用于那些对性能有很高要求的代码#xff0c;如图形处理、机器学习以及数学工具包#xff0c;等等。接下来的两个提案#xff0c;主… C# 每发布一次新版本都会增加一些底层相关的新特性 这些特性对大多数商业程序来说并没什么实际用处主要用于那些对性能有很高要求的代码如图形处理、机器学习以及数学工具包等等。接下来的两个提案主要实现了新的引用类型和函数调用方式。静态委托C# 中的普通委托是一种比较复杂的数据结构。它包含一个函数指针、一个针对 this 参数的对象引用可选以及一个指向委托链的链接。同其他引用类型变量相同这个结构体也采用了堆分配方式具有同样的内存压力。此外在非托管代码中使用它时需要进行组装。与普通委托相比静态委托就简单得多。它同样是一个结构体但这个结构体只包含了一个 IntPtr 类型的函数指针。因此静态委托是一种结构类型的变量就是说不论在托管还是非托管代码中它都具有相同的内存分布在调用本机代码时也不需要进行组装了。静态委托声明的语法如下static delegate int Func()我们可以使用类似于UnmanagedFunctionPointer的属性来指定其他设置如字符集和调用约定。静态委托也有一些使用限制例如只能引用静态函数不能引用对象的成员方法因为没有可用于存储对象指针的内存空间。此外静态委托不能链接到其他的委托。在 CLR(公共语言运行时) 层静态委托通过中间层指令 callicall indirect来调用而普通委托则通过中间层指令 call 或 callvirtcall virtual来调用。为了实现代码的向后兼容性本提案允许从静态委托隐式转换到普通委托。但普通委托到静态委托则只能依靠显式转换因为并不是所有的普通委托都满足静态委托的要求。你可以在 GitHub 上有关静态委托提案的信息。函数指针函数指针则是另外一个比较有吸引力的新提案我们姑且称它为函数指针因为它实现了一个类似 C 的指针标示符 *。这个提案同样使用了中间层指令 callicall indirect和 ldftnload method pointer。与静态委托一样它也需要先有一个声明只不过使用关键字 funcptr 替换了 delegatefuncptr int F1int value;当调用本机函数时调用者首先要确定一个调用约定。而这将会影响栈中变量的排列次序以及使用结束后该由调用者还是被调用者来负责清理栈。这个提案可使用的调用约定有 cdecl、fastcall、stdcall、thiscall 和 winapi。开发者可以通过修改委托声明来指定所需要的调用约定funcptr cdecl int F1int value;在这个提案里函数指针只能在非安全上下文中使用。作为提案的一部分你可以在函数名前面使用地址操作符来生成一个函数指针。这个操作同样也只能在非安全上下文中使用。函数指针的其他限制与静态委托相同。例如它们只能引用静态函数不能链接到其他委托等。这两项提案目前都在讨论之中还没有真正纳入 C# 的路线图。还有一个叫作 Compiler Intrinsics 的提案但是因为有一些额外的限制它被采用的可能性不是很高。原文地址https://www.infoq.cn/article/3xbaNiB_ChbH8McgiEz5.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com