当前位置:编程学习 > C#/ASP.NET >>

老兄们,给说说委托是怎么回事,什么时候能用到他,可以一个委托有多个处理函数么

老兄们,给说说委托是怎么回事,什么时候能用到他,可以一个委托有多个处理函数么 --------------------编程问答-------------------- 委托 用C++的概念来说类似函数指针, 一个委托代表一个函数或一个函数数组, 最简单的例子是做一个控件, 放个TextBox, 需要的功能是在TextBox变化的时候通知控件的容器. 这个时候就需要使用委托. 建议看看MSDN帮助中关于控件事件的内容.

当然还有其他的用法, 比如动态调用DLL的时候,也可以声明委托指向需要调用的不知名的函数.
--------------------编程问答-------------------- 委托一般不会用到,IDE都自动生成的。除非你动态生成控件,比如:
LinkButton AButton = new LinkButton();
这时要挂接事件需要用到委托
AButton.Click += new System.EventHandler(AButton_Click);
还有就是开发控件时会用到,一般情况不会用到,当你需要委托才能完成工作时,委托就不是难点了 --------------------编程问答-------------------- 委托是方法或函数的指针,

也可以把委托想象成函数或方法的类型
//声明一个Class1对象
public class Class1{}
Class1 o = new Class1()
//声明一个Delegate1委托
public void Delegate1Method(int id){};
//声明一个事件
public event Delegate1 Delegate1Event1;
//将方法帮定到事件
this.Delegate1Event1 += new Delegate1(this.Delegate1Method); --------------------编程问答-------------------- 委托最常用的是回调(CallBack)...

对于只知道拖控件的人来讲就是事件(Event)用的多了... --------------------编程问答-------------------- using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class delegate_ : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        test t = new test();
        t.event_titleChange += new test.title_change(change);//为事件指定了委托对象,被委托的函数这里不用写参数
        t.title = "omeweb";
        t = null;

    }

    protected void change(string title)//这里注意,参数要和类里面的委托一致
    {
        Response.Write("title has changed as " + title);
    }
}

public class test
{
    private string _title, _price;
    public string title
    {
        set 
        {
            _title = value;
            event_titleChange(value);//触发事件,注意有一个参数.这里能执行的必须是事件,而不是委托
        }
        get { return _title; }
    }

    public string price
    {
        set { _price = value; }
        get { return _price; }
    }

    public delegate void title_change(string title);//声明一个委托,而且带了一个参数
    public event title_change event_titleChange;//声明一个事件,处理委托,指定委托类型

}
--------------------编程问答-------------------- 动态调用方法 比如说事件就是特殊的委托 --------------------编程问答-------------------- 委托其实蛮重要的,设计模式中会提到的.
因为你用了委托,可以在子类中来实现,而不必在父类中去实现了.
这样会实现一定程度的解偶,而且也可以更加强的灵活性.
其实我们使用委托,说白了就是让子类来决定需要调用甚么函数来实现,而父类关心的只是需要传甚么
参数给子类就好了.
委托是很重要的.
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,