谁能帮忙解释一下C#代理

解决方案 »

  1.   

    delegate类似于函数指针,但是优于函数指针,因为它面向对象类型安全的,用起来就像下面这样class Program
        {
            public delegate void MyDelegate(String name); //声明代理        public static void MyDelegateFunc(String name)
            {
                System.Console.WriteLine("hello:" + name);
            }
            static void Main(string[] args)
            {
                MyDelegate m = new MyDelegate(MyDelegateFunc);  //创建代理对象
                m("snow");                                                           //调用代理
                System.Console.Read();
            }
        }
      

  2.   

    同意楼上观点;.Net的事件机制就是采用了委托
      

  3.   

    “代理”相当与C中的函数指针原型,区别是C#是类型安全的。
    “代理”(delegate)(代表、委托)“代理”是类型安全的并且完全面向对象的。protected delegate string SqlGainer(string strKey, out CommandType type);
    protected string GetSql(SqlGainer gainer, string key, out CommandType cmdType)
    {
    return gainer(key, out cmdType);
    }http://www.cnblogs.com/xworld/archive/2007/06/26/795898.htmlhttp://www.cnblogs.com/powerlc/archive/2005/08/31/227239.html
      

  4.   

    技术讲座:.NET委托、事件及应用兼谈软件项目开发
    用面向对象思维理解.NET委托:函数是对象、委托是函数对象的类型
      

  5.   

    谢谢hulihui以及楼上各位朋友!
      

  6.   

    代理说白了就是方法的签名;
    方法定义的时候可能要定义调用的参数,private string GetName(string userId){} //userId 是一个参数;
    代理定义的时候可能要定义调用的方法,private delegate string GetAString(string x); // x 是一个方法;就拿一个简单的Button控件的Click事件,我们在设计button的时候对于Button的Click事件所要执行的操作未知,这个未知的操作就像一个变量参数;
    我们怎么使系统得知Click事件,从而获得windows窗口句柄呢?那就得监视WinProc,捕获Windows消息,当然这些都是早期的Windows下开发人员的工作,
    .Net将这部分工作用代理封装起来,这样我们写程序时不用知道底层是怎么获取Windows消息,触发事件的,我们只用知道点击Button后执行button_Click方法,
    而button_Click方法就是由代理来执行的;
    如下所示:
    Button.Click += EventHandler(button_Click);//这样就创建了 EventHandler 的代理对象 
    //button_Click 是方法名,也就是方法的地址。
      

  7.   

    lnpusky 
    说的很牛啊