C#中的内联函数?
你如何做C#中的“内联函数”? 我不认为我理解这个概念。 他们喜欢匿名方法吗? 像lambda函数一样?
注意 :答案几乎完全处理内联函数的能力,即“手动或编译器优化,用被调用者的主体替换函数调用站点”。 如果您对匿名(aka lambda)函数感兴趣,请参阅@ jalf的答案或每个人都在说的“Lambda”是什么?
最后在.NET 4.5中,CLR允许使用MethodImplOptions.AggressiveInlining
值提示/建议1方法内联。 它也可以在Mono的行李箱中使用(今天承诺)。
// The full attribute usage is in mscorlib.dll,
// so should not need to include extra references
using System.Runtime.CompilerServices;
...
[MethodImpl(MethodImplOptions.AggressiveInlining)]
void MyMethod(...)
1 。 此前使用“武力”。 由于有一些降薪,我会尽力澄清这个词。 如评论和文档中所述, The method should be inlined if possible.
, The method should be inlined if possible.
特别是考虑单声道(开放式),考虑内联或更普遍的技术限制(如虚拟功能),存在一些单一特定的技术限制。 总体而言,是的,这是编译器的一个暗示,但我想这就是要求的。
内联方法只是一个编译器优化,其中一个函数的代码被放入调用方。
在C#中没有这样做的机制,并且它们将被谨慎地用在支持它们的语言中 - 如果你不知道为什么它们应该用在某个地方,那它们就不应该是这样。
编辑:澄清,他们需要谨慎使用有两个主要原因:
最好让事情独立并让编译器完成工作,然后进行配置并确定内联是否是最适合您的解决方案。 当然,有些内容是有意义的(特别是数学运算符),但让编译器处理它通常是最佳实践。
更新:根据konrad.kruczynski的回答,以下版本的.NET版本高达并包括4.0版本。
您可以使用MethodImplAttribute类防止方法被内联...
[MethodImpl(MethodImplOptions.NoInlining)]
void SomeMethod()
{
// ...
}
......但是没有办法做相反的事情,并强迫它被内联。
链接地址: http://www.djcxy.com/p/64041.html下一篇: Does restrict help in C if a pointer is already marked const?