委托有什么用?在什么情况下用委托。 请给一个用委托的典型例子。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 UP在多线程编程,定义事件,事件处理函数,其实委托可以看作封装以前C++中的函数指针的一些信息,在类型上更安全 asp.net服务器控件的所有事件都可以用自己写的方法来实现,这个就是最典型的例子了 以下例子,委托做为方法的参数进行筛选查询//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.csusing 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.csusing 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); } } } 你拖一个Button在页面上,然后双击代码里面就会有this.Button1.Click += new System.EventHandler(this.Button1_Click);这就是定义的一个委托 radiobuttonlist的怪问题,无法响应SelectedIndexChanged事件 系统奇怪的问题,多人访问速度就慢??? asp.net如何删除临时表。 帮忙看这段代码哪里不对,购物车 xml 文件数据怎么转换成sql server2000 数据库中,各位老大帮帮俺 初学者关于textbox框的问题 不能提交含有HMTL代码的TextBox吗? quickstart和thephile的问题 动态添加控件 请大家来看看这段垃圾代码怎么样能美化和优化一下 这样的公司我该不该留下来? 请问大家,如何在上传文件前,判断文件大小和文件类型呢
在多线程编程,定义事件,事件处理函数,其实委托可以看作封装以前C++中的函数指针的一些信息,在类型上更安全
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); }
}
}
this.Button1.Click += new System.EventHandler(this.Button1_Click);
这就是定义的一个委托