// 用以测试书籍数据库的类:
class Test
{
// 打印书籍题目的静态方法
static void PrintTitle(Book b)
{
ConsoleWriteLine( {} bTitle);
}
// 程序执行的入口
static void Main()
{
BookDB bookDB = new BookDB();
// 用几本书来输初始化书籍数据库:
AddBooks(bookDB);
// 打印平装书的题目:
ConsoleWriteLine(Paperback Book Titles:);
// 创建与静态方法 TestPrintTitle 关联的新的委托对象:
bookDBProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
// 通过PriceTotaller的实例获取平装书的平均价格:
PriceTotaller totaller = new PriceTotaller();
// 创建与对象 totaller 上的非静态方法 AddBookToTotal 关联的新的委托对象:
bookDBProcessPaperbackBooks(new ProcessBookDelegate(totallerAddBookToTotal));
ConsoleWriteLine(平装书的平均价格: ${:###}
totallerAveragePrice());
}
// 向数据库添加书以初始化书籍数据库:
static void AddBooks(BookDB bookDB)
{
bookDBAddBook(The C Programming Language
Brian W Kernighan and Dennis M Ritchie m true);
bookDBAddBook(The Unicode Standard
The Unicode Consortium m true);
bookDBAddBook(The MSDOS Encyclopedia
Ray Duncan m false);
bookDBAddBook(Dogberts Clues for the Clueless
Scott Adams m true);
}
}
}
输出
Paperback Book Titles:
The C Programming Language
The Unicode Standard
Dogberts Clues for the Clueless
平装书的平均价格: $
声明委托以下语句
public delegate void ProcessBookDelegate(Book book);声明一个新的委托类型每个委托类型都描述参数的数目和类型以及它可以封装的方法的返回值类型每当需要一组新的参数类型或新的返回值类型时都必须声明一个新的委托类型
实例化委托 声明了委托类型后必须创建委托对象并使之与特定方法关联与所有其他对象类似新的委托对象用 new 表达式创建但是当创建委托时传递给 new 表达式的参数很特殊它的编写类似于方法调用但没有方法的参数下列语句
bookDBProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));创建与静态方法 TestPrintTitle 关联的新的委托对象下列语句 bookDBProcessPaperbackBooks(newProcessBookDelegate(totallerAddBookToTotal));创建与对象 totaller 上的非静态方法 AddBookToTotal 关联的新的委托对象在例子中新的委托对象都立即传递给 ProcessPaperbackBooks 方法 请注意一旦创建了委托它所关联到的方法便永不改变委托对象不可改变 调用委托 创建委托对象后通常将委托对象传递给将调用该委托的其他代码通过委托对象的名称(后面跟着要传递给委托的参数括在括号内)调用委托对象下面是委托调用的示例 processBook(b);
[] []