在使用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,則會調用出錯