一、基本概念
有過買二手房交易的朋友都有感觸,辦理過戶等等一系列手續都是相當麻煩的,這個時候,房產中介出現了,我們只需要將必備資料交個中介,他們就會幫忙辦理的妥妥的,我們並不需要關係整個辦理過程,這個過程就是委託,委託房產中介辦理相關手續。再入,我們用的蘋果手機,也並不是蘋果公司直接生產,也是委託代工廠進行生產,下面就通過蘋果手機的**生產過程解析委託。
二、蘋果手機代工過程
2.1 蘋果公司定義好本次手機的生產規格(定義委託)傳入生產規格,返回手機
public class phone
】");}}
}
2.2 代工廠制定一套方案,可以滿足蘋果公司的要求
public class foxconn
}
2.3 建立聯絡(為委託繫結方法),蘋果公司發布生產指令
class program
}
2.4 執行結果
2.5 總結:上面的例子主要想要表述委託在實際生活中的運用,整個委託運用過程如下
1.定義委託(特殊類)
publicdelegatestring createiphone11delegate(string space);
2.例項化委託
public createiphone11delegate createiphone11 = null;
3.為委託繫結方法
3.1 createiphone11 = fun1;
3.2 createiphone11+=fun2; 委託可以繫結一系列符合要求的方法(相當於iphone11可以有不同的代工廠同時生產),在invoke時候依次執行
4.取消委託繫結的方法
createiphone11 -= fun1; 取消不合格的代工廠
5.有些地方可以簡化2,3步驟,初始化直接繫結
public createiphone11delegate createiphone11 = fun1;
三、高階
如上,每次使用委託的時候都要定義乙個委託型別,指定要繫結方法的輸入輸出型別,.netframework2.0 以後出現了泛型,框架就提預定義的委託型別,方便我們直接使用
3.1 action
看原始碼
//
// 摘要:
// 封裝乙個方法,該方法不具有引數且不返回值。
[typeforwardedfrom("system.core, version=3.5.0.0, culture=neutral, publickeytoken=b77a5c561934e089")]
public delegate void action();
其實就是乙個委託型別,和我們定義的時候一模一樣,無參輸入,無參輸出。
也可以通過泛型,指定多個(最多16個輸入引數),但都無返回值
看原始碼:
using system.runtime.compilerservices;
namespace system
也是系統定義的委託型別,只不過有乙個強行的輸出型別
同樣,也有泛型的委託,支援16個引數的輸入
所以可以簡化我們上面的**無需自己定義單獨的委託,使用系統預定義的委託,完整如下:
namespace phonecreate
}
public class phone
】");}}
}public class foxconn";}
}
四、實際運用
冥冥之中,我們其實已經在使用委託,只是,我們可能不知道而已,下面例子,假設兩個員工工資和年薪都不一樣,我們要找出所有員工中最高薪資,最高年終獎,最高年收入是多少,需要用list 中max方法。
4.1 建立員工物件
public class emp
//月薪
public int salary
//年終獎
public int bonus
public override string tostring()
:年薪:,年終獎:";}}
4.2 建立列表
listemps = new list();
emps.add(new emp
);emps.add(new emp
);
4.3 分別找出符合條件員工
//年薪最高值
var maxsalary = emps.max(con => con.salary);
//年終獎最高值
var maxbonus = emps.max(con => con.bonus);
//年收入最高值
var maxinput = emps.max(con => con.salary + con.bonus);
console.writeline($"年薪最高值:");
console.writeline($"年終獎最高值:");
console.writeline($"年收入最高值:");
console.readline();
4.4 輸出結果
4.5 max 方法解析,先看原始碼
func就是乙個委託,相當於,ienumberable 通過列舉的方式將list的中每個emp物件給你,然後你制定乙個求最大的值得規則,max然後按照你給的規則進行給你尋找。
當然上面 con=>con.ss 是匿名方法,順便說一下,就是有時候我們的方法只需要呼叫一次,就無需單獨寫乙個方法出來,在使用linq的時候,非常常見。
五、總結
委託,一句話概括,就是可以將方法當做方法的引數進行傳遞。
深入學習c 書單
本來有一本c 程式設計,一本c primer 沒怎麼看過 經過師兄推薦又買了effective c 和more effective c 技術面試的時候會問的比較深 要研究的比較透徹一些 第一篇一些同學問我,如何學好c 我沒有別的辦法給你們,唯一的辦法就是讀書,讀大 量的書,就可以解決。要把c 作為日...
C 深入學習 反射
目錄 一 概述 二 基本使用 2.1 獲取程式類容基本步驟 2.2 使用舉例 2.2.1 建立物件 訪問設定屬性值 使用其中無參方法 2.2.2 建立帶參建構函式並訪問其中帶參方法 2.2.3 反射過載過的方法 2.2.4 反射泛型類和泛型方法 2.2.5 反射型別中的私有類容 屬性 方法 2.2....
C 深入學習 特性
目錄 一 概述 二 基本概念 三 自定義特性 四 給物件的屬性自定義驗證規則 五 總結 特性,說的白話一點,就是說明某個東西的特殊性,它不能單獨存在,必須依附在某個東西上,這裡的東西是指c 中類,屬性,方法。特性就是對這些類,方法,屬性進一步修飾。比如說,定義個 sting 型別 屬性a 我們要求該...