乙個簡單的小例子讓你明白c 中的委託

2021-08-26 06:35:40 字數 3728 閱讀 7335

模擬主持人發布乙個問題,由多個嘉賓來回答這個問題。

分析:從需求中抽出host (主持人) 類和guests (嘉賓) 類。

作為問題的發布者,host不知道問題如何解答。因此它只能發布這個事件,將事件委託給多個嘉賓去處理。因此在host 類定義事件,在guests類中定義事件的響應方法。通過多番委託的"+="將響應方法新增到事件列表中,最終 host 類將觸發這個事件。實現過程如下:

**其實很少下面貼出來所有**:

questionargs.cs

view plain

copy to clipboard

print?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceeventdemo }

} using system; using system.collections.generic; using system.linq; using system.text; namespace eventdemo } }

program.cs

view plain

copy to clipboard

print?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceeventdemo

, newguestb(),

newguestc()

};//用+=號,將嘉賓的答題方法加入到委託鏈

host.questionevent+=newquestionhandler(garray[0].answer);

host.questionevent+=newquestionhandler(garray[1].answer);

host.questionevent+=newquestionhandler(garray[2].answer);

//觸發事件

host.startanswer();

console.readline();}}

}"color:#ff0000;">

using system; using system.collections.generic; using system.linq; using system.text; namespace eventdemo , new guestb(), new guestc() }; //用+=號,將嘉賓的答題方法加入到委託鏈 host.questionevent += new questionhandler(garray[0].answer); host.questionevent += new questionhandler(garray[1].answer); host.questionevent += new questionhandler(garray[2].answer); //觸發事件 host.startanswer(); console.readline(); } } }

host.cs

view plain

copy to clipboard

print?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceeventdemo

publichost()

public

stringname

public

voidstartanswer() }}

using system; using system.collections.generic; using system.linq; using system.text; namespace eventdemo public host() public string name public void startanswer() } }

guests.cs

view plain

copy to clipboard

print?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceeventdemo

public

virtual

voidanswer(objectsender,questionargse) }}

using system; using system.collections.generic; using system.linq; using system.text; namespace eventdemo public virtual void answer(object sender, questionargs e) } }

guestc.cs

view plain

copy to clipboard

print?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceeventdemo

開始答題:我不知道",this.name); }}

} using system; using system.collections.generic; using system.linq; using system.text; namespace eventdemo 開始答題:我不知道", this.name); } } }

guestb.cs

view plain

copy to clipboard

print?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceeventdemo

開始答題:我不知道",this.name); }}

} using system; using system.collections.generic; using system.linq; using system.text; namespace eventdemo 開始答題:我不知道", this.name); } } }

guesta.cs

view plain

copy to clipboard

print?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceeventdemo

開始答題:我不知道",this.name); }}

} using system; using system.collections.generic; using system.linq; using system.text; namespace eventdemo 開始答題:我不知道", this.name); } } }

執行結果:

乙個簡單的C 多播委託的小例子

多播委託是指乙個由委託串成的鍊錶,當鍊表上的乙個委託被 時,所有鍊錶上該委託的後續委託將會被順序執行。需要注意,多播委託必須是同型別的,返回型別必須為void,並且不能帶輸入引數 但可以帶引用引數 system.muliticastdelegate定義了對多播委託的支援。class program ...

乙個小例子對多型簡單的理解

class parent public void writeway class child extends parent public void writeway public class pc 乙個叫做張三的人,偽裝 比如貼上鬍子,看上去像自己父親的年齡 然後對外稱自己為張某某 成了自己的父親張某...

乙個小例子對多型簡單的理解

class parent public void writeway class child extends parent public void writeway public class pc 乙個叫做張三的人,偽裝 比如貼上鬍子,看上去像自己父親的年齡 然後對外稱自己為張某某 成了自己的父親張某...