您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“C#中怎么委托”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“C#中怎么委托”這篇文章吧。
一、是什么
1)委托包含對方法而不是方法名稱的引用。使用委托可以在運行時動態設定要調用的方法,不知道方法名稱,也可以調用方法,執行(或調用)一個委托將執行該委托引用的方法。
2)委托將名稱與方法的定義連接起來,即將方法的實現附加到該名稱。這樣便可以使用該名稱調用特定的方法。但是,委托要求方法的實現和委托必須具有相同的方法簽名(也就是說,他們應該具有相同數量/類型的參數),并有相同類型的返回值。
3)委托更像一個具有通用的方法名稱,在不同的情況將該名稱指向不同的方法,并通過委托執行這些方法。
二、怎么用
使用委托包括三個步驟:
1)定義委托
2)實例化委托
3)使用委托
我們上一個例子:
class Program { //定義一個委托 public delegate int Call(int num1, int num2); class Math { public int Mutiply(int num1, int num2) { return num1 * num2; } public int Divide(int num1, int num2) { return num1 / num2; } } static void Main(string[] args) { Call objCall; Math objMath = new Math(); objCall = new Call(objMath.Mutiply);//實例化一個委托 int result = objCall(5, 3);//使用委托 Console.WriteLine("結果為 {0}", result); } }
上面的例子,我們再進一步,用匿名委托實現:
static void Main(string[] args) { Call objCall = delegate(int num1, int num2) { return num1 * num2; };//匿名委托 int result = objCall.Invoke(3, 5);//使用委托 Console.WriteLine("結果為 {0}", result);//輸出:結果為 15 }
我們還可以將:
int result = objCall.Invoke(3, 5);//使用委托
替換為:
int result = objCall(3, 5);//使用委托
效果是一樣的。
再進一步,用Lambda表達式進行簡化,可以將:
Call objCall = delegate(int num1, int num2) { return num1 * num2; };//匿名委托
替換為:
Call objCall = (int num1, int num2) => { return num1 * num2; };//Lambda表達式
更簡化一步,變為:
Call objCall = (num1, num2) => { return num1 * num2; };//Lambda表達式
這就是C#委托的進化過程以及C#Lambda表達式對委托的支持。
三、什么時候用
1)委托類似于C語言中的函數指針,可以將方法作為函數的參數進行傳遞
2)當不知道方法的具體實現時,就可以定義個委托,讓它替我們干活
3)我們在編程時用的最多的就是事件注冊時使用。
比如:
this.button1.Click += new EventHandler(button1_Click);//button1注冊Click事件
private void button1_Click(object sender, EventArgs e) { //方法具體實現內容 }
可以看到方法button1_Click作為參數傳遞給了EventHandler委托。
再比如在線程方法中:
Thread th = new Thread(new ThreadStart(Method));//這里的ThreadStart就是一個委托,里面可以直接傳一個方法名Method,以委托的形式調用方法 th.IsBackground = true; th.Start();
以上是“C#中怎么委托”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。