作者FAITHY (被風吹過的夏天)
看板C_Sharp
標題Re: [問題] event 和 delegate
時間Thu May 13 19:00:10 2010
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 看了Event的使用
: 和delegate使用
: 我卻對delegate和event感到很模糊
: 我在想用C的角度 一般 要寫callback function 就用function pointer去指向function
: 後
: 再適當時機幫她呼叫
: 這點 使用delegate就做得到.....我還是無法理解event和delegate最重要的差異在哪
: 使用時機....
: C++是比較麻煩 要指向class的non static function要用pointer to member
: 但似乎C#完全沒管這些 直接class.Function就可以傳給delegate了
: 另外想問個小問題
: event的sender 假如 有個subscriber 和兩個不同class內的event註冊
: 當event發生 subscriber的function被呼叫了 sender進來
: 我怎麼知道 我要cast成哪個sender
: 相對的....我EventArgs e 我也不知道 e 該cast成什麼耶~?
: 目前想到這個 目前看書上也沒提到怎麼解決....還是根本沒這個困擾 我誤會了???
: 第三個問題是
: 通常event都宣告成public 直接 += new EventHandler( function)
: 但我想要寫一個SetEvent 的函式
: 使用者寫 SetEvent( function)
: {我裡面幫他 += }
: 但我不知道
: SetEvent(這裡面該填什麼 type耶)
: 我目前是寫
: SetEvent( EventHandler E)
: {
: MyEvent += new EventHandler(E);
: }
: 但是不給過....該怎麼改呢?
第三問題 大概寫了個類似的(如下) 測過並沒有問題
會不會是哪裡沒寫好
----
delegate void lifeEvent(
int i,
string s);
class people
{
public float height;
public float weight;
public lifeEvent Hungry;
public void Work()
{ }
public bool Rest()
{ return true; }
}
class Eat
{
static public void snack(
int i,
string s) { }
static public void meal(
int i,
string s) { }
}
class program
{
static people Bob =
new people();
static void Main()
{
people Jane =
new people();
Bob.height = 180.01f;
Bob.weight = 55.0f;
Jane.Rest();
Bob.Hungry +=
new lifeEvent(Eat.meal);
setfunction(Eat.snack);
Bob.Hungry(1, "dinner");
}
static void setfunction(
lifeEvent e)
{
Bob.Hungry +=
new lifeEvent(e);
}
}
: 以上
: 請各位指點 thx
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.18.50.4
推 liunate:Hungry事件是不是要加一個event關鍵字在前面? 05/14 13:53
推 dk3208:加上去之後Hungry就不能在Main()裡透過Bob.Hungry(...)觸發 05/14 16:45