C#一个很简单的event编程,各位进来看看!谢谢!
来源:百度知道 编辑:UC知道 时间:2024/06/22 22:07:19
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()