作者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
1F:推 liunate:Hungry事件是不是要加一个event关键字在前面? 05/14 13:53
2F:推 dk3208:加上去之後Hungry就不能在Main()里透过Bob.Hungry(...)触发 05/14 16:45