什麼時候該用委託,為什麼要用委託,委託有什麼好處

2021-09-24 18:48:49 字數 1832 閱讀 1241

好多人一直在問:什麼時候該用委託,為什麼要用委託,委託有什麼好處…

看完下面的文章你將茅塞頓開…(看不懂的直接tddtds)

概念雖然我不喜歡講太多

我們直接先來yy 個場景:

我很喜歡打遊戲,但運氣不好每次打遊戲都會被主管看到,朱老闆不喜歡他的員工在上班的時

間打遊戲,所以朱老闆就跟主管說:以後員工在打遊戲,你就扣他20塊錢.

這其實就是乙個委託,朱老闆委託主管一旦發現員工打遊戲,就做一件事情.

程式該怎麼寫呢?

至少有2個類吧,主管與員工,主管有個方法扣錢,員工有個方法玩遊戲,那麼開始動工了

員工類:

public class employee

public int money

set

}public void playgame()

}主管類:

public class manager

//扣薪水

public void removemoney(employee employee)

}mian方法大概這麼寫就行了:

public static void main(string args)

執行,果然結果是對的,看來做為程式設計師我還是比較低調的…寫出來結果很正常,也不沾沾自喜…

員工:開始玩遊戲了…

員工:cs真好玩,哈哈哈! 我玩…

主管:上班時間膽敢玩遊戲

主管:看看你小子有多少薪水:8000

主管:我開始扣薪水…

主管:扣好了.

主管:看看你小子薪水剩餘:7980

下面我們簡單的分析下這個程式:

1:在建立主管類之後才能建立員工類,耦合性太高,也就是說你要建立個員工,必須要先建立個主管…

2:如果場景發生以下變化,我要讓經理代替主管,我們不得不修改員工類,並增加經理類.

這樣看來這段程式設計的並不好,我們不妨來考慮下事件(特殊的委託)來實現

必須要定義乙個委託,就是讓主管監視員工,然後員工類裡要有個事件(員工也是激發該事件的物件),主管執行事件

public delegate void play(object sender, system.eventargs e);

public class employee

public void playgame()

void onplaygame(object sender, eventargs e)

}}主管類就要實現乙個方法,這個方法與委託的返回直一樣,引數一樣就行了,給委託來呼叫的.:

public class manager

public void removemoney(object sender, system.eventargs e)

}那麼呼叫就變的簡單了

manager xiaotao = new manager();

// 生成員工類的物件例項 shulin

employee shulin = new employee();

// 設下委託,指定監視

shulin.play += new play(xiaotao.removemoney);

// 員工開始玩遊戲,玩一次扣一次

shulin.playgame();

shulin.playgame();

console.readkey();

輸出:2180

2160

總結:

當然,不使用委託和事件我們仍然可以設計出解耦的類,然而卻會增加很多的類、介面以及關聯等等,增加了**量和程式的邏輯複雜性,而在.net裡利用委託和事件我們只需少的多的**來實現。

什麼時候該用MVC,什麼時候該用Webform?

看看微軟的解釋 何時建立 mvc 應用程式 您必須仔細考慮是使 用 asp.net mvc 框架還是使用 asp.net web 窗體模型來實現 web 應用程式。mvc 框架未取代 web 窗體模型 您可以 對 web 應用程式使用任一框架。如果您具有現有的基於 web 窗體的應用程式,則這些應用...

什麼時候該用裸機?什麼時候該用RTOS?

今天在某qq群裡看到有人討論這個問題,正巧我也仔細想了一下。以下是我對這個問題的看法 1.rtos的rt這詞就是實時的意思,網上很多歸納總結都說rtos要用在實時性很高的專案,怎麼才算是實時性高呢?假設我們裸機有下面這個段程式 int main 假設每個函式的處理時間,不考慮中斷,執行一輪迴圈的總共...

什麼時候該用get請求什麼時候該用post請求

引自 get和post兩種方法都是將資料送到伺服器,但你該用哪一種呢?http標準包含這兩種方法是為了達到不同的目的。post用於建立資源,資源的內容會被編入http請示的內容中。例如,處理訂貨表單 在資料庫中加入新資料行等。當請求無 時 如進行搜尋 便可使用get方法 當請求有 時 如新增資料行 ...