如何使用C# 4.0的具名和選擇性參數
C#的語法一向以嚴謹著稱,過去在VB.NET提供的選擇性參數,在使用C#開發時無法使用這個便利的功能,到了C# 4.0開始支援具名與選擇性參數,請見下列說明:
【Before】
以下程式碼範例為一個顯示該位址的機器名稱的函式,在C# 4.0以前的版本,要呼叫ShowHostName函式必須同時傳入ip、includeIPCount及showAnyAlias參數才行,若其中有些參數不需要強制傳入,對於參數多的函式而言,使用上較不方便,因為每個參數都必須給值才行,對此,很多人會使用物件導向中的多載,將不同參數數量的函式獨立出來,但這又會造成維護上的負擔。
1: static void Main(string[] args)
2: {
3: ShowHostName("127.0.0.1", true, true);
4: Console.Read();
5: }
6:
7: /// <summary>
8: /// 依據IP位址顯示機器名稱
9: /// </summary>
10: /// <param name="ip">IP位址</param>
11: /// <param name="includeIPCount">顯示該機器上的IP數量</param>
12: /// <param name="showAnyAlias">是否顯示主機別名</param>
13: static void ShowHostName(string ip,bool includeIPCount ,bool showAnyAlias)
14: {
15: System.Net.IPHostEntry iphs = System.Net.Dns.GetHostEntry(ip);
16: string count = iphs.AddressList.Count().ToString();
17: Console.WriteLine("機器名稱={0},IP數量={1},別名={2}"
18: , iphs.HostName, includeIPCount == true ? count : "n/a"
19: , showAnyAlias == true ? iphs.Aliases.Any().ToString() : "n/a");
20: }
【After】
以下程式碼範例,筆者將上述的ShowHostName函式中includeIPCount及showAnyAlias參數加入預設值(true),以將之設定為選擇性參數(如第7列的程式碼):
1: /// <summary>
2: /// 依據IP位址顯示機器名稱
3: /// </summary>
4: /// <param name="ip">IP位址</param>
5: /// <param name="includeIPCount">顯示該機器上的IP數量</param>
6: /// <param name="showAnyAlias">是否顯示主機別名</param>
7: static void ShowHostName(string ip,bool includeIPCount = true,bool showAnyAlias = true)
8: {
9: System.Net.IPHostEntry iphs = System.Net.Dns.GetHostEntry(ip);
10: string count = iphs.AddressList.Count().ToString();
11: Console.WriteLine("機器名稱={0},IP數量={1},別名={2}"
12: , iphs.HostName, includeIPCount == true ? count : "n/a"
13: , showAnyAlias == true ? iphs.Aliases.Any().ToString() : "n/a");
14: }
接著我們就可以以下列幾種方式來呼叫包含選擇性參數的函式,說明如下:
1: //方法1:只傳入具名參數
2: ShowHostName("127.0.0.1");
3: //方法2:依照順序傳入參數的值
4: ShowHostName("127.0.0.1", false,false);
5: //方法3-1:使用具名參數來指定選擇性參數的值
6: ShowHostName("127.0.0.1", includeIPCount: false);
7: //方法3-2:使用具名參數來指定選擇性參數的值
8: ShowHostName("127.0.0.1",showAnyAlias: false);
需特別注意的是選擇性參數不能放在具名參數之前,下列程式碼範例為C# 4.0所不允許的使用方式:
ShowHostName("127.0.0.1", includeIPCount: false, true);
錯誤 1 具名引數規格必須出現在所有已指定的固定引數之後 D:\Visual Studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 21 62 ConsoleApplication1
【參考資料】