C#一个很简单的event编程,各位进来看看!谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/22 22:07:19
嗯刚刚接触event,教材上看不明白,虚心求教,各位高手用通俗点的话分析一下下边的错误代码吧,并附上修改后的代码,谢谢!最后我会加分……哦千万不要Copy网上的资料,用自己的话解释一下就可以了。
using System;
class A
{
public delegate void EventHandler(B e);//括号里这样(B e)有没有错啊?
public event EventHandler a;

public void Run()
{
Console.WriteLine("引发事件!");
a(this);//这一步应该错了吧???不能引发B中的方法啊,指点一下吧
}
}

class B
{
public B(A a)
{
a.a += new A.EventHandler(b);
}
private void b(object sender)//很多又写成(EventArgs e),怎么回事啊?
{
Console.WriteLine("Received and handled an event." );
}
}
class C
{
static void Main()//还有主函数该怎么写?我绝对是写错了
{
A x=new A();
B y=new B();
x.Run();
}
}

首先,public delegate void EventHandler(B e);//括号里这样(B e)是没有错的,这句只是定义事件所指向的函数应该符合什么样的签名,也就是说你的事件处理函数必须是返回void,而且要有一个B类型的参数。我下面的代码稍微改了一下,你看看就知道了。

然后,你的那个事件"a"不应该在B类里面注册,应该在A类里面注册,而且必须在调用事件"a"之前才行,你可以参考我的代码。

接着,在B类里面的b方法,显然是你想要调用的方法,所以不能是private,应该为public。而且这个方法必须符合A类里面那个事件的定义,即"a"的定义

最后,主函数里面,把那个B y=new B();注释掉就行了。
执行结果:
引发事件!
Received and handled an event.
Test.A: 事件引发ing...

下面是代码:

using System;
namespace Test
{
class A
{
public delegate void EventHandler(object sender, string e);
public event EventHandler a;

public void Run()
{
B obj = new B();
a += new EventHandler(obj.b);
Console.WriteLine("引发事件!");
a(this, "事件引发ing...");
}
}

class B
{
public B()