在使用C#的默認參數/可選參數的時候,需要注意,參數的默認值是在編譯的時候,自動加入調用方的。
如我有這樣一個方法:
1 public class Name
2 {
3 public void Test(Boolean isPass, String name = "")
4 {
5 if (String.IsNullOrWhiteSpace(name))
6 Console.WriteLine("name is empty.");
7 else
8 Console.WriteLine("name have value.");
9 }
10 }
另一個dll中的方法掉用此方法:
1 public void Test()
2 {
3 DAL.Name c = new DAL.Name();
4 c.Test(true);
5 }
調用方最終編譯的結果是:
public void Test()
{
Name c = new Name();
c.Test(true, "");
}
可以看到,編譯的時候,把我們的默認值追加到了方法的調用方去了。因此需要注意一個問題:
如果我們的dll是公共組建,則最好不要使用默認參數,使用重載方法來實現不同參數的效果;因為使用默認參數的方法,如果只重新編譯了dll,而沒有重新編譯引用的dll,則會調用出錯