是函数的指针,因为在C、C++编程时,指针很容易使程序员在编程时出错,所以在C#中就改用delegate。

解决方案 »

  1.   

    delegate是一种比较安全的指针
    代表主要用于事件,要想彻底的了解代表,一定要弄清事件与代表的联系及用法
    下面我写了一个,未经测试,因为我只能在网吧上网,应该没有什么大问题吧^-^
    代表的一般用法:
    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
    }
    }
    }
      

  2.   

    delegate 是一种安全的函数指针,你可以把他看作接口,只不过他可以改变指向罢了
      

  3.   

    抱歉!运行通不过出错的代码为:cs1001 cs1514 cs1597
      

  4.   

    delegate的功能确实相当于C中的函数指针,但在C#中它是引用类型,具有面向对象、类型安全等特点,在理解这个概念时,我认为应该注意以下几个方面:
    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、请注意,函数或方法的签名应该与声明代理时的形式相同
      

  5.   

    我也来凑凑热闹:1、定义:public delegate void ChangedEvent();
           这是代理(事件)的声明,类似于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,写了好多了,也许有乱的地方,将就着看吧!