c#命名空間下有五種型別,分別為:
類、構造、介面、列舉、委託。
委託被定義為5中基本型別的一種,也就意味著**可以這麼寫:
using system;namespace test
static void main(string args)
}}
簡單的測試後,可以看到輸出結果被列印出來。
接下來我來進一步說明什麼是委託。
委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞。
可以提取三個關鍵字:類、型別、傳遞方法
類和型別都有了解,那麼就來研究一下傳遞方法。
一般編寫**的時候都是函式中傳遞各種引數,可以是數值型別可以是物件型別;但是牽涉到需要對不同的**段進行選擇可能需要寫出長長的if..elseif..else 的選擇語句。
舉例說明
例如以下需求:
輸入:姓名、國籍 輸出:打招呼的方式。
分析:不同國家的人打招呼的方式是不一樣的,中國說「吃了嗎」、英國說「hello」。
一般的**如下——
class greetpeoplepublic void greeting()
else if (country == "chinese")
}public void englishgreeting()
public void chinesegreeting()
static void main()
}}
需求發生變更:
現在軟體將在20個不同語言的國家地區發布,現在請你對上面的**進行修改。你會發現你不僅僅要新增函式,同時不得不對greeting
進行修改,長長的if-else if-else語句一向是不可靠的;除錯20個國家的geeeting函式將是一種折磨!!
現在引入委託,**如下:
delegate void greetinghandler();class greetpeople
public void greeting(greetinghandler handler)
public void englishgreeting()
public void chinesegreeting()
static void main()
}
這個時候greeting函式僅僅作為函式的觸發器,選擇是在main第二行決定的作為建構函式的引數「english」並沒有提供有價值的資訊。這裡存在風險就是國家不容易寫錯但是呼叫的函式很可能不對。
**稍微修改了一下:
delegate void greetinghandler();class greetpeople
public greetpeople(string name, string country)
public void greeting()
else
console.writeline();
}public static void englishgreeting()
public static void chinesegreeting()
static void main()
}}
加了個字典將國家直接對映到對應的呼叫函式,呼叫greeting的時候直接查字典呼叫即可。可以說,基本實現需求。
現在需求又變了:
軟體賣的好將在多國會議展出,要求一次性給所有來賓打招呼;這個時候怎麼辦?
這就使用到了多播委託了;多播委託一次呼叫通知多個函式執行,**如下修改:
delegate void greetinghandler();class greetpeople
public greetpeople(string name, string country)
public void greeting()
handler();}}
else if (countrydic.trygetvalue(country, out handler))
else
console.writeline();
}public static void englishgreeting()
public static void chinesegreeting()
static void main()
}
委託的說明和舉例
委託是c 中的乙個全新的概念.類似於c 中的函式指標.但是,不像c 中的函式指標,委託是完全物件導向的 不像指向成員函式的指標,委託封裝乙個物件的例項方法或靜態方法.乙個委託宣告定義乙個從system.delegate派生的類.乙個委託例項封裝乙個或多個方法,每乙個被稱為可調 用的實體.委託的最有用...
pybot 引數說明及舉例
robot framework a generic test automation framework robot tests.robot 舉例 1.pybot i 3 d csras5.5.0 執行目錄下tag為3的所有用例 2.pybot include 3or4 d csras5.5.0 執行...
c 引用 舉例說明
簡介 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。c 11中新增了 右值引用 我們這裡所說的引用通常指 左值引用 例 int a 10 int rea a rea指向a,是a的另乙個名字 int rerea 錯誤 引用必須被初始化輸出a 和 rea 都是10。需要注意定...