C 委託(一) 說明及舉例

2022-08-29 19:45:16 字數 2225 閱讀 5799

c#命名空間下有五種型別,分別為:

類、構造、介面、列舉、委託。

委託被定義為5中基本型別的一種,也就意味著**可以這麼寫:

using system;

namespace test

static void main(string args)

}}

簡單的測試後,可以看到輸出結果被列印出來。

接下來我來進一步說明什麼是委託。

委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞。

可以提取三個關鍵字:類、型別、傳遞方法

類和型別都有了解,那麼就來研究一下傳遞方法。

一般編寫**的時候都是函式中傳遞各種引數,可以是數值型別可以是物件型別;但是牽涉到需要對不同的**段進行選擇可能需要寫出長長的if..elseif..else 的選擇語句。

舉例說明

例如以下需求:

輸入:姓名、國籍   輸出:打招呼的方式。

分析:不同國家的人打招呼的方式是不一樣的,中國說「吃了嗎」、英國說「hello」。

一般的**如下——

class greetpeople

public void greeting()

else if (country == "chinese")

}public void englishgreeting()

public void chinesegreeting()

static void main()

}}

需求發生變更:

現在軟體將在20個不同語言的國家地區發布,現在請你對上面的**進行修改。你會發現你不僅僅要新增函式,同時不得不對greeting

進行修改,長長的if-else if-else語句一向是不可靠的;除錯20個國家的geeeting函式將是一種折磨!!

現在引入委託,**如下:

delegate void greetinghandler();

class greetpeople

public void greeting(greetinghandler handler)

public void englishgreeting()

public void chinesegreeting()

static void main()

}

這個時候greeting函式僅僅作為函式的觸發器,選擇是在main第二行決定的作為建構函式的引數「english」並沒有提供有價值的資訊。這裡存在風險就是國家不容易寫錯但是呼叫的函式很可能不對。

**稍微修改了一下:

delegate void greetinghandler();

class greetpeople

public greetpeople(string name, string country)

public void greeting()

else

console.writeline();

}public static void englishgreeting()

public static void chinesegreeting()

static void main()

}}

加了個字典將國家直接對映到對應的呼叫函式,呼叫greeting的時候直接查字典呼叫即可。可以說,基本實現需求。

現在需求又變了:

軟體賣的好將在多國會議展出,要求一次性給所有來賓打招呼;這個時候怎麼辦?

這就使用到了多播委託了;多播委託一次呼叫通知多個函式執行,**如下修改:

delegate void greetinghandler();

class greetpeople

public greetpeople(string name, string country)

public void greeting()

handler();}}

else if (countrydic.trygetvalue(country, out handler))

else

console.writeline();

}public static void englishgreeting()

public static void chinesegreeting()

static void main()

}

委託的說明和舉例

委託是c 中的乙個全新的概念.類似於c 中的函式指標.但是,不像c 中的函式指標,委託是完全物件導向的 不像指向成員函式的指標,委託封裝乙個物件的例項方法或靜態方法.乙個委託宣告定義乙個從system.delegate派生的類.乙個委託例項封裝乙個或多個方法,每乙個被稱為可調 用的實體.委託的最有用...

pybot 引數說明及舉例

robot framework a generic test automation framework robot tests.robot 舉例 1.pybot i 3 d csras5.5.0 執行目錄下tag為3的所有用例 2.pybot include 3or4 d csras5.5.0 執行...

c 引用 舉例說明

簡介 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。c 11中新增了 右值引用 我們這裡所說的引用通常指 左值引用 例 int a 10 int rea a rea指向a,是a的另乙個名字 int rerea 錯誤 引用必須被初始化輸出a 和 rea 都是10。需要注意定...