是函数的指针,因为在C、C++编程时,指针很容易使程序员在编程时出错,所以在C#中就改用delegate。
解决方案 »
- 两个线程更改app.conifg 如何保证不出错
- System.Data.OleDb.OleDbException: UPDATE 语句的语法错误
- 今天心情不错,散分!!!技术分250很郁闷!
- C#,用到Treeview选择了checkbox属性,怎么才能使得勾选父节点后子节点全部被选中?谢谢
- 关于GDI刷子的一个问题
- 关于i++和++i的区别,大家帮忙看一下~~~
- 问个DataGrid中连接的问题
- 关于DataGrid的一个问题,请高手帮忙
- VS的Debug环境和Release环境有什么区别,该怎么使用呢
- 正则表达式替换 "
- 怎么用 bin文件 vs.net正式版??????
- C#如何实现象Java Applet一样的功能?
代表主要用于事件,要想彻底的了解代表,一定要弄清事件与代表的联系及用法
下面我写了一个,未经测试,因为我只能在网吧上网,应该没有什么大问题吧^-^
代表的一般用法:
using System;
namespace ZXD
{
//声明一个代表
public delegate MyEventHandler(object sender,EventArgs e);
//在类中声明一个代表事件
public class A;
{
public A(){};
private int something=0;
public event MyEventHandler SomethingChanged;
//与事件相联系
protected void OnSomethingChanged(object sender,EventArgs e)
{
if(SomethingChanged != null)SomethingChanged(this,e);
}
public int Something
{ get{return i; }
set { i = value;
OnSomethingChanged(this,null);//有这句后,当你给i赋值时,就会调用相应的事件
}
}
}
public class Test
{
A a ;
public A AA
{ get { return a;} set { a=value;} }
public Test()
{
a = new A();
a.SomethingChanged += new MyEventHandler(TestOnSomethingChanged);//注册一个事件
}
public void TestOnSomethingChanged(object sender,EventArgs e)//事件处理函数
{
MessageBox.Show("hehe");
}
public void Main()
{
Test test = new Test();
Console.WriteLine(test.AA.Something.ToString());//输出0
test.AA.Something = 1;//由此调用SomethingChanged事件,继而调用MessageBox.show函数,此时应该显示一个对话框
Console.WriteLine(test.AA.Something.ToString());//输出1
}
}
}
1、delegate是一种类型,理解时可以拿class作比。
如:
public class a{}定义了一个类a
而:
public delegate void b(int c,int d)则定义了一个代理b
2、使用时,
如:定义一个类的实例 a m=new a();
定义一个代理的实例 b n=new b(函数或方法的名字)
3、请注意,函数或方法的签名应该与声明代理时的形式相同
这是代理(事件)的声明,类似于class CLS{};
2、使用
class UseEvent{
.........
public event ChangedEvent : Changed; //代理“类”的一个对象
//定义一个与之对应的响应函数
public void OnChanged(){
..........
Changed(); //类型是 ChangeEvent
.........
}
//触发事件
public void ChangeTest{
...
OnChanged();
....
}
class HandleEvent{
...
UseEvent ue;
public void HandleEvent(UseEvent useEvent)
{ue= useEvent;
ue.Changed += new ChangedEvent(IamChanged);
}public void CancleEvent{
ue.Changed -= new ChangedEvent(IamChanged);
}
public void IamChanged(){
//在此写你的代码,与事件处理相关的
// 例如 :Console.WriteLine("触发事件了!!!1");
...
}
// 以上是预备役过程//以下 代码 是如何使用
...
UseEvent ue = new UseEvent();
HandleEvent he = new HandleEvent(ue);
ue.ChangeTest(); //这行代码将触发事件
he.CancleEvent();
....
以上解释了使用事件的整个过程 OK,写了好多了,也许有乱的地方,将就着看吧!