c 委託(個人理解)

2021-09-29 17:52:51 字數 1477 閱讀 6929

個人理解來說,委託就是使用函式方法的乙個渠道,只不過這個渠道有些特殊,可以通過這個渠道使用乙個方法,同樣的是也可以通過這個渠道使用多個函式方法。

首先問自己乙個問題,在程式語言的學習中,我們是怎樣使用自己定義的或者已存在的類的?無非這幾步:1.類的宣告2.類的例項化3.通過例項化的物件使用類裡面的變數或者是函式方法

那麼你需要知道的就是,委託的使用方法和類幾乎完全一樣,不同的就是,類例項化之後叫做物件或者是例項,而委託例項化之後,還叫委託

上**:

using system;

namespace delegationtext

}}

在上面的例子中,可以很明顯的看出來,委託的使用次數和函式方法的呼叫次數是相同的,一對一,那麼多路廣播委託就是一對多的關係,也就是,也就是乙個委託對應的是多個函式

解決方法:向委託中新增方法

需要注意的是:如果使用多路官博委託的時候,委託的型別一定要是void否則,委託的反鬍子hi不知道最終要送回到**,做測試之後的得出,如果不是void,返回的是最後乙個加入委託的返回值

**:

using system;

namespace delegationtext

public static void one_two(bool judge)

else

console.writeline("1、2" + judge);

}public static void two_three(bool judge)

else

console.writeline("2、3" + judge);

}public static void three_four(bool judge)

else

console.writeline("3、4" + judge);}}

}

但是你有沒有考慮過,對於委託而言,我根本就不用這麼麻煩,我想要使用什麼函式直接傳參使用就好了為什麼要這麼麻煩呢?

這就要考慮到委託的優點了:解耦、對修改關閉、對擴充套件開放、邏輯分離

借用s1314_jhc的部落格部分觀點來解釋這些優點

再兩個類中,我們假設主函式再類a紅,而我們想用的函式pre1()和pri2在類b中,如果a想要呼叫b的方法,需要在a類中將b類例項化,然後通過b.pre1()來呼叫,這樣的會導致兩個類的耦合性很高,如果類b發生較大的改變,那麼可能會影響a的使用,使用委託就可以進行解耦;

具體怎麼實現的呢?我們在a中並不需要直接呼叫b的函式方法,也不用關心b的函式方法是怎麼實現,怎麼程式設計的,只需要設定固定的方法簽名即可,這樣不管b怎樣修改只要他的方法簽名沒有修改我們就可以得到正確的返回結果,這就是對修改關閉,邏輯分離,至於擴充套件性的話,我們可以通過+=、-=在委託中新增或者移除函式方法,而且什麼時候想要新增就可以直接新增。

還有一點,委託可以實現動態地賦給引數的做法,避免在程式中大量使用if-else(switch)語句。

以上僅僅是個人理解,描述的不正確請多見諒歡迎指正~

C 委託之個人理解

什麼是委託 首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法 函式 的乙個東西。如何使用委託 在使用委託的時候,你可以像對待乙個類一樣對待它。即先宣告,再例項化。只是有點不同,類在例項化之後叫物件或例項,但委託在例項化後仍叫委託。宣告,如 1 namespace vczx...

委託 事件的個人理解

事件 乙個用event進行了封裝的委託型別的變數,使得在進行註冊的時候只能使用 或者 需要乙個觸發者和乙個執行者,類似於observer模式中的subject和observer 當乙個物件的狀態發生改變時,所有依賴於他的物件都會得到通知並被自動更新。觸發者 對委託 事件進行定義,並觸發事件的執行。s...

理解c 中委託

1.我們對委託做乙個總結 委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用if else switch 語句,同時使得程式具有更好的可擴充套件性。正確理解委託的列子 usingsystem usingsystem...