C#委托零基礎理解(如何實現(xiàn)父子窗口互傳參數(shù)和更新控件值)
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
1、為什么使用委托? 委托是c#中非常重要的一個概念,使用委托使程序員可以將方法引用封裝在委托對象內(nèi)。然后可以將該委托對象傳遞給可調(diào)用所引用方法的代碼,而不必在編譯時知道將調(diào)用哪個方法。與C或C++中的函數(shù)指針不同,委托是面向?qū)ο?,而且是類型安全的?/p>
2、什么是委托? 委托是一種引用方法的類型,一旦為委托分配了方法,委托將與該方法具有相同的行為,委托方法的使用和其他方法一樣,具有參數(shù)和返回值。
3、如何使用委托? 下面咱們就拋開枯燥的概念,來看幾個活生生的例子是怎么使用委托的吧! 案例1:中國人和英國人問好 分析:1.首先我們需要編寫一個中國人問好的方法和一個英國人問好的方法。 2.編寫一個Greet方法,將問好方法作為一個參數(shù),實現(xiàn)各個國家人的問好方法。 3.使用委托實現(xiàn)各個國家人的問好功能 使用委托分為三個步驟:1,定義委托 2.聲明委托變量 3.使用委托 // 1.定義委托 public delegate void GreetDelegate(string name); class Program { static void Main(string[] args) { //2.聲明委托變量 GreetDelegate dDelegate = new GreetDelegate(ChineseGreeting); //3.使用委托 dDelegate("李小龍"); Console.ReadKey(); } //中國人問好方法 public static void ChineseGreeting(string name) { Console.WriteLine("早上好!" + name); } //英國人問好方法 public static void EnglishGreeting(string name) { Console.WriteLine("Morning!" + name); } public static void Greet(string name, GreetDelegate makeGreet) { makeGreet(name); } } 為了加深大家對委托的理解,我們再來寫一個相似的例子。 案例2:翻譯案例:通過委托將英文翻譯為中文和韓文 //01.聲明一個委托類 public delegate void MyTransDelegate(string words); class Program { static void Main(string[] args) { //翻譯方法 //調(diào)用方法一 //2.聲明委托 MyTransDelegate del=new MyTransDelegate(TransToCN); //3.調(diào)用委托 del("aa"); //調(diào)用方法二 Translate("aa",TransToCN); //調(diào)用方式三 //MyTransDelegate del = TransToCN; //del("aa"); Console.ReadKey(); }
static void Translate(string str,MyTransDelegate del) { del(str); } static void TransToCN(string str) { Console.WriteLine("翻譯成中文了!"); } static void TransToKorean(string str) { Console.WriteLine("翻譯成韓語了!"); } } 通過這個案例,我們可以看出使用委托的方法不止一種,無論使用哪種方式,最終都和方式一一樣。通過反編譯我們可以證明: 如下圖示我通過反編譯看到方法二的代碼:
如下是反編譯后方法三的代碼
有了上述知識存儲,我們再來看一個案例: 案例3:通過委托將子窗體中的值傳遞到父窗體中
如圖有父窗體和子窗體兩個窗體,現(xiàn)在我想實現(xiàn)當點擊父窗體中按鈕時彈出子窗體(當然這個超級簡單),在彈出子窗體后,在子窗體的文本框中輸入內(nèi)容,點擊關閉按鈕后子窗體關閉,并且將子窗體中輸入的內(nèi)容在父窗體的文本框中顯示。
子窗體中代碼如下: //定義委托 public delegate void Words(string words); //聲明委托變量 public Words words; private void button1_Click(object sender, EventArgs e) { words(txtchild.Text); this.Close(); } 父窗體中的代碼: private void btnOpen_Click(object sender, EventArgs e) { Child child = new Child(); child.words = GetWords; child.Show(); } public void GetWords(string str) { txtMain.Text = str; } 我們來分析下上述兩斷代碼: 首先,我們想在子窗體關閉時,更新父窗體文本框中的數(shù)據(jù)。但是我們非常清楚的知道,窗體之間的空間是不能直接相互訪問的,這時我們就要找一個中介幫我們實現(xiàn)父窗體數(shù)據(jù)的更新功能。于是我們定義了帶一個參數(shù)沒有返回值的委托Words,并且在父窗體中定義了一個方法GetWords符合委托的條件。于此同時,在子窗體中聲明了一個委托變量words,并且在關閉按鈕中,調(diào)用了委托變量。 但在子窗體中我們沒有對子窗體委托變量賦值,真正的賦值放到了主窗體中。這樣通過委托就實現(xiàn)了在子窗體中調(diào)用父窗體的方法,進而實現(xiàn)了父窗體文本框內(nèi)容的更新。 不知道看過上述3個案例,大家對委托有沒有一個相對清晰的認識,如果本文能幫助迷途中的你,那就更好了。 該文章在 2021/1/29 17:55:36 編輯過 |
關鍵字查詢
相關文章
正在查詢... |