[终身学员辅导]晓东-04.NET Framework-事件单向广播,双向广播

[ 619 查看 / 0 回复 ]

交谈中请勿轻信汇款、中奖信息,勿轻易拨打陌生电话。

AzrealKillua  21:18:09
老师 今天写了几个事件的东西 你帮我看看
张波老师  21:18:19
ok
AzrealKillua  21:19:11
有2个问题 ,一是我能否在事件的订阅者的类内部 注册事件?
AzrealKillua  21:19:34
还有一个我怎么可以使这样一种情况成立:
21:20:01
成功接收文件
 
打开文件  打开所在文件夹
   
AzrealKillua  21:20:29
狗叫了-》主人醒了&&小偷跑了-》主人追小偷
AzrealKillua  21:21:07
也就是主人醒了并且小偷跑了 的情况下 才触发主人追小偷的事件
张波老师  21:21:49
完全可以
张波老师  21:22:05
你这个问题其实就是"双向通知依赖"
AzrealKillua  21:22:05
dog.OnDogCry += master.Wake;
            master.OnWake += thief.Run;
            thief.OnRun += master.Run;
            dog.DogCry();
我这里是一根单向的链 想让他并发
AzrealKillua  21:22:36
后面会讲到?
张波老师  21:23:27
会的.你现在要掌握的是"单向广播",积累几个月之后,我们再讲"双向广播",是在设计模式中讲的.
张波老师  21:24:23
你很有想法,很好!
AzrealKillua  21:24:33
哦 ,我是突然想到的 ,因为 如果狗叫了后小偷没有跑 那么链就断掉了 后面就不安全了
张波老师  21:25:41
是的.后面还会讲这种例子,典型的就是"拍卖商品",拍卖师和拍卖人之间,就是"双向广播"
AzrealKillua  21:25:56
哦,那第一个问题呢
张波老师  21:26:27
能否在事件的订阅者的类内部 注册事件?
这个问题不是问题,
AzrealKillua  21:26:37
是啊
AzrealKillua  21:27:07
难道要在订阅类里new一个发布者么?
AzrealKillua  21:27:19
或者只能发布者是静态的?
张波老师  21:27:34
在事件模式中,事件发起者,和事件接收者已经被抽象和隔离开来,所以,事件接收者是谁已经不重要了,当然可以是自己,也可以是别人,可以是实例方法 ,也可以是静态方法
张波老师  21:28:53
后面还会使用到匿名委托和lambda语法...都遵循了"事件发起者,和事件接收者分离"的原则
AzrealKillua  21:29:59
也就是说我在类的内部去订阅事件不好?
张波老师  21:30:08
你的作业写的很好,可以做示例演示了
张波老师  21:31:18
没有好不好,,只有看你使用的情形不同.对事件来说,谁订阅,处理事件,对它来说,都不重要,也就体现不出好,还是不好
张波老师  21:32:28
就像看新闻一样,广播给不同的人,有的人骂娘,有的人开心,对新闻来说,没有好不好,它只管广播,别人怎么处理,是别人的事
AzrealKillua  21:35:08
public class Wife
    {
        OldPerson.中风+=new EventHandler(ActionWife);
        public static void ActionWife(object send, EventArgs e)
        {
            Console.WriteLine("wife掐人中");
        }
我在老人那个例子中的wife类里这样注册事件,不行么?
AzrealKillua  21:36:09
提示注册事件那行代码错误 
AzrealKillua  21:36:19
说需要返回值
张波老师  21:37:42
你刚才提交的作业中不是这样写的啊,作业里写的是对的
AzrealKillua  21:37:58
恩 我原来想这样直接在类里注册
AzrealKillua  21:38:09
结果报错 所以就没写
AzrealKillua  21:38:19
但是不知道错在哪里
张波老师  21:38:27
public class Wife
    {
        OldPerson.中风+=new EventHandler(ActionWife);
        public static void ActionWife(object send, EventArgs e)
        {
            Console.WriteLine("wife掐人中");
        }

张波老师  21:38:48
  OldPerson.中风+=new EventHandler(ActionWife);
这一句不是定义成员变量,要放在一个过程中写
AzrealKillua  21:39:10
哦 
张波老师  21:39:19

AzrealKillua  21:39:20
放在构造函数中就可以了吧
张波老师  21:39:33
可以
AzrealKillua  21:39:58
看到个+=号还以为可以呢
AzrealKillua  21:40:06
谢谢了
张波老师  21:40:24
呵呵,不客气!
AzrealKillua  21:41:32
真是果然还是要别人指点下啊 ,这么小的一个问题竟然一直想不明白
张波老师  21:43:57
呵呵 互相配合,更有效率
本主题由 管理员 张波老师 于 2010-7-28 22:10:39 执行 移动主题 操作
TOP