请给一个用委托的典型例子。谢谢。

解决方案 »

  1.   

    UP
    在多线程编程,定义事件,事件处理函数,其实委托可以看作封装以前C++中的函数指针的一些信息,在类型上更安全
      

  2.   

    asp.net服务器控件的所有事件都可以用自己写的方法来实现,这个就是最典型的例子了
      

  3.   

    以下例子,委托做为方法的参数进行筛选查询//bookstore.csusing System;
    using System.Collections;namespace Bookstore
    {
        // 定义一本书结构
        public struct Book
        {
            public string Title; // 标题         public string Author; // 作者         public decimal Price; // 价格        public bool Paperback; // 是否为平装本         //构造Book
            public Book(string title, string author, decimal price, bool paperBack)
            {            Title = title;            Author = author;            Price = price;            Paperback = paperBack;        }    }    // 为书籍定义一个委托
        public delegate void ProcessBookDelegate(Book book);    // 书籍数据库
        public class BookDB
        {        // 定义书籍数组列表
            ArrayList list = new ArrayList();        // 增加每一本书
            public void AddBook(string title, string author, decimal price, bool paperBack)
            {            list.Add(new Book(title, author, price, paperBack));        }        // 为平装本书籍调用委托
            public void ProcessPaperbackBooks(ProcessBookDelegate processBook)
            {            foreach (Book b in list)
                {
                    // 平装本
                    if (b.Paperback)                    // 调用委托
                        processBook(b);
                }
            }
        }
    } //PriceTotaller.cs
    using System;namespace Bookstore
    {
        public class PriceTotaller
        {
            int countBooks = 0;        //定义书籍总价格
            decimal priceBooks = 0.0m;        //统计书籍数量
            internal void AddBookToTotal(Book book)
            {
                countBooks += 1;
                priceBooks += book.Price;
            }        //统计平均价格
            internal decimal AveragePrice()
            {
                return priceBooks / countBooks;
            }
       }
    }//default.aspx.cs
    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;namespace Bookstore
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                BookDB bookDB = new BookDB();            AddBooks(bookDB);            // 显示所有平装书籍的标题            Response.Write("平装书标题:");            // 创建一个委托对象            bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
     
                 PriceTotaller totaller = new PriceTotaller();            bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(totaller.AddBookToTotal));            Response.Write("<P>总价格:¥" + totaller.AveragePrice().ToString(".00"));
            }
            
            //打印标题
            private void PrintTitle(Book b)
            {
                Response.Write(b.Title + "、");
            }        private void AddBooks(BookDB bookDB)
            {            bookDB.AddBook("C语言设计","谭浩强", 19.95m, true);            bookDB.AddBook("ASP.NET2.0高级编程","林祖冲", 39.95m, true);            bookDB.AddBook("Windows操作指南","王阳明", 129.95m, false);            bookDB.AddBook("面向对象编程设计","李明", 12.00m, true);        }
        }   
    }
      

  4.   

    你拖一个Button在页面上,然后双击代码里面就会有
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    这就是定义的一个委托