好多人一直在問:什麼時候該用委託,為什麼要用委託,委託有什麼好處…
看完下面的文章你將茅塞頓開…(看不懂的直接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方法 當請求有 時 如新增資料行 ...