精品理论电影在线_日韩视频一区二区_一本色道精品久久一区二区三区_香蕉综合视频

C語言輔導:NamedandOptionalParameters

發布時間:2011-09-16 共1頁

  這個特性比較簡單,依舊長話多說,只說重點。下面這個demo我們經常使用重載函數來處理問題的場景:
  Code
  1 public void Process(int p1, float p2, string p3)
  2 {
  3 //todo
  4 }
  5
  6 public void Process(int p1, float p2)
  7 {
  8 Process(p1, p2, "fanweixiao");
  9 }
  10
  11 public void Process(int p1)
  12 {
  13 Process(p1, 0f);
  14 }
  在C#4.0時代給我們提供了兩個新功能,命名參數(Named Parameters)和可選參數(Optional Parameters)。他們是兩個完全獨立的概念,只是經常一塊使用。改寫后的這個函數為:
  Code
  1 public int NBProcess(int p1=0, float p2=0f, string p3="fanweixiao")
  2 {
  3 //todo
  4 }
  這樣我們就可以用NBProcess(10)來調用這個函數,相當于NBProcess(10, 0f, "fanweixiao")的調用。
  如果想省去第二個參數我們可以這樣調用:NBProcess(10, p3:"FanWeixiao")。麻煩一點也可以寫成NBProcess(p1:10,p3:"FanWeixiao")。甚至還可以把參數改變順序NBProcess(p3:"FanWeixiao",p1:10)這樣來調用。
  對于構造函數和indexer也可以這么用。
  對于有這樣的參數的重載,究竟如何判斷是調用哪個,邏輯也很簡單:最相近原則。(applicable)
  從參數是5來看,首先排除了M(string,int),因為它要求第一個參數是string類型的。M(int, string)是可以的因為string是可選參數,它和M(int)都比M(object)要好,object是“萬惡之源”,比起object,5和int可是親切多了。那么最后顯而易見M(int)是最好的。
  構造函數不同類型參數的位置和個數是決定其區分的關鍵,而c#4.0的這個特性把參數的名字放入規則中了,以后給參數起名也得正經點了:)。其實像python這樣的動態語言,上面的功能都支持,還有一個更酷的“*參數”:
  Code
  1 def stepper(what, by=1):
  2 what += by
  3 return what
  4
  5 def average(first, *rest):
  6 sum = first
  7 for value in rest: sum += value
  8 result = 1.0 * sum / (len(rest) + 1)
  9 return result

百分百考試網 考試寶典

立即免費試用