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