委托的运用
下面這篇代碼展示了委托的運(yùn)用,非常精彩,代碼版權(quán)歸"@microsoft"所有.
?
??1//版權(quán)所有?(C)?2000?Microsoft?Corporation。保留所有權(quán)利。??2
??3//?bookstore.cs
??4using?System;
??5
??6//?處理書店的一組類:
??7namespace?Bookstore?
??8{
??9???using?System.Collections;
?10
?11???//?描述圖書列表中的一本書:
?12???public?struct?Book
?13???{
?14??????public?string?Title;????????//?書的標(biāo)題。
?15??????public?string?Author;???????//?書的作者。
?16??????public?decimal?Price;???????//?書的價(jià)格。
?17??????public?bool?Paperback;??????//?該書是平裝本嗎?
?18
?19??????public?Book(string?title,?string?author,?decimal?price,?bool?paperBack)
?20??????{
?21?????????Title?=?title;
?22?????????Author?=?author;
?23?????????Price?=?price;
?24?????????Paperback?=?paperBack;
?25??????}
?26???}
?27
?28???//?聲明一個(gè)用來(lái)處理書的委托類型:
?29???public?delegate?void?ProcessBookDelegate(Book?book);
?30
?31???//?維護(hù)一個(gè)圖書數(shù)據(jù)庫(kù)。
?32???public?class?BookDB
?33???{
?34??????//?列出數(shù)據(jù)庫(kù)中的所有圖書:
?35??????ArrayList?list?=?new?ArrayList();???
?36
?37??????//?向數(shù)據(jù)庫(kù)中添加圖書:
?38??????public?void?AddBook(string?title,?string?author,?decimal?price,?bool?paperBack)
?39??????{
?40?????????list.Add(new?Book(title,?author,?price,?paperBack));
?41??????}
?42
?43??????//?對(duì)每一本平裝圖書上調(diào)用傳入的委托來(lái)處理該圖書:?
?44??????public?void?ProcessPaperbackBooks(ProcessBookDelegate?processBook)
?45??????{
?46?????????foreach?(Book?b?in?list)?
?47?????????{
?48????????????if?(b.Paperback)
?49????????????//?正在調(diào)用委托:
?50???????????????processBook(b);
?51?????????}
?52??????}
?53???}
?54}
?55
?56//?正在使用書店類:
?57namespace?BookTestClient
?58{
?59???using?Bookstore;
?60
?61???//?計(jì)算圖書總價(jià)格和平均價(jià)格的類:
?62???class?PriceTotaller
?63???{
?64??????int?countBooks?=?0;
?65??????decimal?priceBooks?=?0.0m;
?66
?67??????internal?void?AddBookToTotal(Book?book)
?68??????{
?69?????????countBooks?+=?1;
?70?????????priceBooks?+=?book.Price;
?71??????}
?72
?73??????internal?decimal?AveragePrice()
?74??????{
?75?????????return?priceBooks?/?countBooks;
?76??????}
?77???}
?78
?79???//?測(cè)試圖書數(shù)據(jù)庫(kù)的類:
?80???class?Test
?81???{
?82??????//?打印書的標(biāo)題。
?83??????static?void?PrintTitle(Book?b)
?84??????{
?85?????????Console.WriteLine("???{0}",?b.Title);
?86??????}
?87
?88??????//?在此處開始執(zhí)行。
?89??????static?void?Main()
?90??????{
?91?????????BookDB?bookDB?=?new?BookDB();
?92
?93?????????//?用一些書初始化數(shù)據(jù)庫(kù):
?94?????????AddBooks(bookDB);??????
?95
?96?????????//?打印平裝書的所有書名:
?97?????????Console.WriteLine("Paperback?Book?Titles:");
?98?????????//?創(chuàng)建與靜態(tài)方法
?99?????????//?Test.PrintTitle?關(guān)聯(lián)的新委托對(duì)象:
100?????????bookDB.ProcessPaperbackBooks(new?ProcessBookDelegate(PrintTitle));
101
102?????????//?獲取平裝書的平均價(jià)格,方法是使用
103?????????//?PriceTotaller?對(duì)象:
104?????????PriceTotaller?totaller?=?new?PriceTotaller();
105?????????//?創(chuàng)建一個(gè)與在對(duì)象?totaller?上的非靜態(tài)方法
106?????????//?AddBookToTotal?關(guān)聯(lián)的新委托對(duì)象:
107?????????bookDB.ProcessPaperbackBooks(new?ProcessBookDelegate(totaller.AddBookToTotal));
108?????????Console.WriteLine("Average?Paperback?Book?Price:?${0:#.##}",
109????????????totaller.AveragePrice());
110??????}
111
112??????//?用一些測(cè)試圖書初始化圖書數(shù)據(jù)庫(kù):
113??????static?void?AddBooks(BookDB?bookDB)
114??????{
115?????????bookDB.AddBook("The?C?Programming?Language",?
116????????????"Brian?W.?Kernighan?and?Dennis?M.?Ritchie",?19.95m,?true);
117?????????bookDB.AddBook("The?Unicode?Standard?2.0",?
118????????????"The?Unicode?Consortium",?39.95m,?true);
119?????????bookDB.AddBook("The?MS-DOS?Encyclopedia",?
120????????????"Ray?Duncan",?129.95m,?false);
121?????????bookDB.AddBook("Dogbert's?Clues?for?the?Clueless",?
122????????????"Scott?Adams",?12.00m,?true);
123??????}
124???}
125}
126輸出
Paperback Book Titles:
?? The C Programming Language
?? The Unicode Standard 2.0
?? Dogbert's Clues for the Clueless
Average Paperback Book Price: $23.97
轉(zhuǎn)載于:https://www.cnblogs.com/mazhiyuan/articles/286261.html
總結(jié)
- 上一篇: 角色转变
- 下一篇: Team Up!用Visual Stud