C 深入學習 委託

2021-10-05 05:25:51 字數 3229 閱讀 4207

一、基本概念

有過買二手房交易的朋友都有感觸,辦理過戶等等一系列手續都是相當麻煩的,這個時候,房產中介出現了,我們只需要將必備資料交個中介,他們就會幫忙辦理的妥妥的,我們並不需要關係整個辦理過程,這個過程就是委託,委託房產中介辦理相關手續。再入,我們用的蘋果手機,也並不是蘋果公司直接生產,也是委託代工廠進行生產,下面就通過蘋果手機的**生產過程解析委託。

二、蘋果手機代工過程

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 我們要求該...