猿问

C#中的内联函数?

C#中的内联函数?

你如何在C#中做“内联函数”?我认为我不理解这个概念。他们喜欢匿名方法吗?像lambda函数?

注意:答案几乎完全涉及内联函数的能力,即“用被调用者的主体替换函数调用站点的手动或编译器优化”。如果您对匿名(也称为lambda)函数感兴趣,请参阅@ jalf的答案或者每个人都在说什么'Lambda'?


素胚勾勒不出你
浏览 1648回答 3
3回答

慕田峪4524236

最后在.NET 4.5中,CLR允许使用值提示/建议1方法内联MethodImplOptions.AggressiveInlining。它也可以在Mono的后备箱中使用(今天提交)。// The full attribute usage is in mscorlib.dll,// so should not need to include extra referencesusing System.Runtime.CompilerServices; ...[MethodImpl(MethodImplOptions.AggressiveInlining)]void MyMethod(...)1。此前使用的是“force”。由于有一些downvotes,我会试着澄清这个词。正如在评论和文档中一样,The method should be inlined if possible.特别是考虑到Mono(开放),考虑内联或更一般的(如虚函数),存在一些单特定的技术限制。总的来说,是的,这是对编译器的暗示,但我想这就是要求的。

函数式编程

内联方法只是一种编译器优化,其中函数的代码被卷入调用者。在C#中没有任何机制可以做到这一点,并且它们在支持它们的语言中被谨慎使用 - 如果你不知道为什么它们应该被用在某个地方,它们就不应该被使用。编辑:为了澄清,有两个主要原因需要谨慎使用:在没有必要的情况下,通过内联使用大量二进制文件很容易从性能的角度来看,编译器往往比你应该知道更好最好不要管它,让编译器完成它的工作,然后分析并确定内联是否是最适合你的解决方案。当然,有些事情是有意义的内联(特别是数学运算符),但让编译器处理它通常是最好的做法。
随时随地看视频慕课网APP
我要回答