关于事件和Timmer的两个问题

冰冷的小爪 2015-09-09 09:01:22
问题一:
class A
{
public classB B;
delegate1 Method1;
public ClassA()
{
B . event += Method1;
}
public void method1(){......}
public void aMthod (bool tf)
{
if (tf==true)
{
Method1 = method1;
}
else{ Method1 = null }
}
}
//然后我先执行aMthod,传入True,再使得B的event发生,没任何反应,但是,如果在
public ClassA()
{
Method1 = method1;//加上这句,就有反应,无论先传入false还是true
B . event += Method1;
}
//问题来了,是不是+=的时候,右侧必须不为null才行?
问题二:
我使用监听事件,来动态创建一个TapPage,TapPage内加载我一个用户控件,控件中有一个Timmer,默认是启动的,但是结果没有执行Timmer中的代码,这是为什么?
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰冷的小爪 2015-09-09
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
1,同上 构造函数是在new的时候就先执行了,而你的aMthod 方法是后执行的 你需要写个带参数的构造函数,用带参数的构造函数去初始化类,初始化的时候就直接传入true或false 而且,你应该判断如果是true,就执行+=,否则就不执行+=,给事件加个null是没有意义的行为 2.无代码无真相 你把timer的回调函数写哪里了?
+=null没有意义,但是+=Method1我想用来根据条件,使得引发的行为改变,只是我这个行为默认为null,其实给它一个默认值也没事,只是见到有这个怪异的现象,提出来看看
冰冷的小爪 2015-09-09
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:

public  ClassA()//默认的无参数构造函数
     {
         B . event += method1;//如果调用无参数的构造函数,那么永远会执行事件
     }
public  ClassA(bool b)//带参数的构造函数
     {
if(b)
{
         B . event += method1;
}
     }
然后你初始化类A的时候,要这样: A a=new A(true);
//其实我写漏了,应该如下,只有Method1构造的时候还是空 public ClassA(ClassB b) { this .B = b; B . event += Method1; } //然后我执行aMthod (true),再引发B.event(),不会执行method1(),但如下,就可以了 public ClassA(ClassB b) { this .B = b; Method1 = method1; B . event += Method1; } 对于问题二:我在视图设计器中,使得 Timmer.Enable=false; 然后在loaded事件代码中,写 Timmer.Enable=true;就可以了,具体原因不知道
寂空冷 2015-09-09
  • 打赏
  • 举报
回复
问题一: 既然事件是在B类中,那么你应该判断B类的事件是否已注册,判断如下: if(B.Event!=null) { B . event(有参数传参数,无参数则为空); }
於黾 2015-09-09
  • 打赏
  • 举报
回复

public  ClassA()//默认的无参数构造函数
     {
         B . event += method1;//如果调用无参数的构造函数,那么永远会执行事件
     }
public  ClassA(bool b)//带参数的构造函数
     {
if(b)
{
         B . event += method1;
}
     }
然后你初始化类A的时候,要这样: A a=new A(true);
於黾 2015-09-09
  • 打赏
  • 举报
回复
1,同上 构造函数是在new的时候就先执行了,而你的aMthod 方法是后执行的 你需要写个带参数的构造函数,用带参数的构造函数去初始化类,初始化的时候就直接传入true或false 而且,你应该判断如果是true,就执行+=,否则就不执行+=,给事件加个null是没有意义的行为 2.无代码无真相 你把timer的回调函数写哪里了?
小鬼当家家 2015-09-09
  • 打赏
  • 举报
回复
问题1: 有可能是你的执行顺序不对。你先创建一个A的对象,首先执行的诗构造函数,也就是 public ClassA() { B . event += Method1; } 然后你再执行aMthod ,无论怎样B.event都为空。 至于问题2,没有代码,不知道问题在哪

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧