說來慚愧,在大學的課程中,竟然沒有聽說過委託這個名稱。那麼今天我就帶著大家一起**下委託和事件。
咱們先來看下委託
我主要從以下幾個方面講解
1, 為什麼使用委託 2.什麼是委託 3.委託如何使用
為什麼使用委託?
委託是c#中非常重要的乙個概念,使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的**,而不必在編譯時知道將呼叫哪個方法。與c或c++中的函式指標不同,委託是物件導向,而且是型別安全的。
什麼是委託?
委託是一種引用方法的型別,一旦為委託分配了方法,委託將與該方法具有相同的行為,委託方法的使用和其他方法一樣,具有引數和返回值。
如何使用委託
下面咱們就拋開枯燥的概念,來看幾個活生生的例子是怎麼使用委託的吧!
案例1:中國人和英國人問好
分析:1.首先我們需要編寫乙個中國人問好的方法和乙個英國人問好的方法。
2.編寫乙個greet方法,將問好方法作為乙個引數,實現各個國家人的問好方法。
3.使用委託實現各個國家人的問好功能
使用委託分為三個步驟:1,定義委託 2.宣告委託變數 3.使用委託
// 1.定義委託
public delegate void greetdelegate(string name);
class program
//中國人問好方法
public static void chinesegreeting(string name)
//英國人問好方法
public static void englishgreeting(string name)
public static void greet(string name, greetdelegate makegreet)
}為了加深大家對委託的理解,我們再來寫乙個相似的例子。
案例2:翻譯案例:通過委託將英文翻譯為中文和韓文
//01.宣告乙個委託類
public delegate void mytransdelegate(string words);
class program
static void translate(string str,mytransdelegate del)
static void transtocn(string str)
static void transtokorean(string str)
通過這個案例,我們可以看出使用委託的方法不止一種,無論使用哪種方式,最終都和方式一一樣。通過反編譯我們可以證明:
如下圖示我通過反編譯看到方法二的**:
如下是反編譯後方法三的**
有了上述知識儲存,我們再來看乙個案例:
案例3:通過委託將子窗體中的值傳遞到父窗體中
如圖有父窗體和子窗體兩個窗體,現在我想實現當點選父窗體中按鈕時彈出子窗體(當然這個超級簡單),在彈出子窗體後,在子窗體的文字框中輸入內容,點選關閉按鈕後子窗體關閉,並且將子窗體中輸入的內容在父窗體的文字框中顯示。
子窗體中**如下:
//定義委託
public delegate void words(string words);
//宣告委託變數
public words words;
private void button1_click(object sender, eventargs e)
父窗體中的**:
private void btnopen_click(object sender, eventargs e)
public void getwords(string str)
我們來分析下上述兩斷**:
首先,我們想在子窗體關閉時,更新父窗體文字框中的資料。但是我們非常清楚的知道,窗體之間的空間是不能直接相互訪問的,這時我們就要找乙個中介幫我們實現父窗體資料的更新功能。於是我們定義了帶乙個引數沒有返回值的委託words,並且在父窗體中定義了乙個方法getwords符合委託的條件。於此同時,在子窗體中宣告了乙個委託變數words,並且在關閉按鈕中,呼叫了委託變數。
但在子窗體中我們沒有對子窗體委託變數賦值,真正的賦值放到了主窗體中。這樣通過委託就實現了在子窗體中呼叫父窗體的方法,進而實現了父窗體文字框內容的更新。
C 零基礎到入門
1 c語言概述 2 編寫 執行乙個簡單的c語言程式 3 資料型別 4 運算子和表示式 如果你對c語言一竅不通,那你就好好看這篇文章,我會力爭讓你真正的做到從零基礎到入門,同時這篇文章會讓你基本認識什麼是c語言 當然你要是有基礎那就不用看這篇文章,include void main char u pr...
零基礎mysql專案例項 MySQL 零基礎開發
1.終端下連線mysql服務 mysql uroot p回車後輸入設定的密碼即可。進去後每條命令結尾要帶分號 退出命令exit 單行注釋有兩種 或 空格。多行注釋 2.基本命令集合 針對資料庫 use sys show databases 檢視當前操作的資料庫 select databse 針對表 ...
mysql零基礎操作 mysql 零基礎 開始過程
2016 11 07 算是差不多是兩個月的學習,我也馬上要結課了.今天才勉強把mysql裝上,之前還有因為使用者許可權的問題,以及使用者為建立的問題.應該早點就把該準備的開發平台準備好,而不是在最後快考試了來做這件事情,絆倒在細枝末節的東西上.安裝不成功,當時我按照教程,教程上邊說可以跳過管理員的創...