C# 7.0 - Local functions

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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,程式碼會更為精簡。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;

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

SayHello("Larry");
}
}
}


運行結果如下:


反組譯看一下:


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