using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace 委托1 { public delegate void mydelegate(mybook mb);//创建委托类型 class Program { static void Main(string[] args) { BookDB myBD = new BookDB(); mybook[] mbs = { new mybook("abc", 11), new mybook("x files", 22), new mybook("lost", 33) }; foreach (mybook book in mbs)//初始化模拟数据库 { myBD.AddBook(book); } mydelegate md = delegate(mybook mb) { Console.WriteLine(mb.BOOKNAME); };//创建匿名方法的委托 myBD.processdelegate(md);//将委托传入执行 } } public class mybook//声明一个mybook数据类型 { private string bookname; private decimal bookprice; public string BOOKNAME { get { return bookname; } set { bookname = value; } } public decimal BOOKPRICE { get { return bookprice; } set { bookprice = value; } } public mybook(string bookname, decimal bookprice) { this.BOOKNAME = bookname; this.BOOKPRICE = bookprice; } } public class BookDB//声明一个mybook的模拟数据库 { ArrayList mybooklist = new ArrayList();//以arrarylist模拟数据源 public void AddBook(mybook book) { mybooklist.Add(book); } public void processdelegate(mydelegate md)//接受外部传入的代理方法 { foreach (mybook book in mybooklist) { md(book);//遍历每个数据项,并执行代理方法 } } } }
以上代码实现外部的方法,通过委托传入数据类型内部执行~
1利用委托的好处之一就是可以让方法的功能和方法的执行分开
2只要方法符合委托的签名,那么可以定义任意的方法过程来实现结果
3可以选择不同的委托处理方式,实现数据的动态处理