Inline functions in C#?

How do you do "inline functions" in C#? I don't think I understand the concept. Are they like anonymous methods? Like lambda functions?

Note : The answers almost entirely deal with the ability to inline functions, ie "a manual or compiler optimization that replaces a function call site with the body of the callee." If you are interested in anonymous (aka lambda) functions, see @jalf's answer or What is this 'Lambda' everyone keeps speaking of?.


Finally in .NET 4.5, the CLR allows one to hint/suggest1 method inlining using MethodImplOptions.AggressiveInlining value. It is also available in the Mono's trunk (committed today).

// 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 . Previously "force" was used here. Since there were a few downvotes, I'll try to clarify the term. As in the comments and the documentation, The method should be inlined if possible. Especially considering Mono (which is open), there are some mono-specific technical limitations considering inlining or more general one (like virtual functions). Overall, yes, this is a hint to compiler, but I guess that is what was asked for.


Inline methods are simply a compiler optimization where the code of a function is rolled into the caller.

There's no mechanism by which to do this in C#, and they're to be used sparingly in languages where they are supported -- if you don't know why they should be used somewhere, they shouldn't be.

Edit: To clarify, there are two major reasons they need to be used sparingly:

  • It's easy to make massive binaries by using inline in cases where it's not necessary
  • The compiler tends to know better than you do when something should, from a performance standpoint, be inlined
  • It's best to leave things alone and let the compiler do its work, then profile and figure out if inline is the best solution for you. Of course, some things just make sense to be inlined (mathematical operators particularly), but letting the compiler handle it is typically the best practice.


    Update: Per konrad.kruczynski's answer, the following is true for versions of .NET up to and including 4.0.

    You can use the MethodImplAttribute class to prevent a method from being inlined...

    [MethodImpl(MethodImplOptions.NoInlining)]
    void SomeMethod()
    {
        // ...
    }
    

    ...but there is no way to do the opposite and force it to be inlined.

    链接地址: http://www.djcxy.com/p/64042.html

    上一篇: 在C中使用restrict关键字的规则?

    下一篇: C#中的内联函数?