有時候我們在開發程式時,會碰到一些情境是需要建立個方法,但這個方法只有某個地方會用到,這時我們多半是用委派去做掉,但帶來的問題就是會有額外的記憶體耗費,而且無法被 inline 處理。

C# 7.0 後,我們可以改用 Local functions 功能去處理。使用方式很簡單,就是一般的方法宣告,只是是寫在方法裡面。像是:

using System;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
void SayHello(string name)
{
Console.WriteLine(string.Format("Hello~{0}", name));
}

SayHello("Larry");
}
}
}

這邊也可以搭配使用 C# 6.0 的 Expression Bodied Members,程式碼會更為精簡。

using System;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
void SayHello(string name) =>  Console.WriteLine(string.Format("Hello~{0}", name));

SayHello("Larry");
}
}
}

運行結果如下:

{% img /images/posts/CSharp7LocalFunctions/1.png %}

反組譯看一下:

{% img /images/posts/CSharp7LocalFunctions/2.png %}

可以看到編譯器幫我們產生了對應的方法以供調用,因此使用上無需額外的記憶體消耗,還能被 inline 處理。