zoukankan      html  css  js  c++  java
  • ylbtech-Unitity-CS:Delegates

    ylbtech-Unitity-CS:Delegates
    1.A,效果图返回顶部
     
    Invoking delegate a:
      Hello, A!
    Invoking delegate b:
      Goodbye, B!
    Invoking delegate c:
      Hello, C!
      Goodbye, C!
    Invoking delegate d:
      Goodbye, D!
    请按任意键继续. . .
    1.B,源代码返回顶部
    1.B.1,bookstore.cs
    // bookstore.cs
    using System;
    
    // 用于处理书店的一组类:
    namespace Bookstore 
    {
       using System.Collections;
    
       // 描述图书列表中的一本书:
       public struct Book
       {
          public string Title;        // 书名。
          public string Author;       // 作者。
          public decimal Price;       // 价格。
          public bool Paperback;      // 是否为平装本?
    
          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);
             }
          }
       }
    }
    
    // 使用 Bookstore 类:
    namespace BookTestClient
    {
       using Bookstore;
    
       // 计算图书总价格和平均价格的类:
       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;
          }
       }
    
       // 测尝试书数据库的类:
       class Test
       {
          // 打印书名。
          static void PrintTitle(Book b)
          {
             Console.WriteLine("   {0}", b.Title);
          }
    
          // 下面开始执行。
          static void Main()
          {
             BookDB bookDB = new BookDB();
    
             // 用一些书初始化数据库:
             AddBooks(bookDB);      
    
             // 打印所有平装本的书名:
             Console.WriteLine("Paperback Book Titles:");
             // 创建一个与静态方法 Test.PrintTitle 关联的
             // 新委托对象:
             bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
    
             // 使用 PriceTotaller 对象
             // 获取平装本的平均价格:
             PriceTotaller totaller = new PriceTotaller();
             // 创建一个与对象 totaller 的非静态方法
             // AddBookToTotal 关联的新委托对象:
             bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(totaller.AddBookToTotal));
             Console.WriteLine("Average Paperback Book Price: ${0:#.##}",
                totaller.AveragePrice());
          }
    
          // 用一些测尝试书初始化图书数据库:
          static void AddBooks(BookDB bookDB)
          {
             bookDB.AddBook("The C Programming Language", 
                "Brian W. Kernighan and Dennis M. Ritchie", 19.95m, true);
             bookDB.AddBook("The Unicode Standard 2.0", 
                "The Unicode Consortium", 39.95m, true);
             bookDB.AddBook("The MS-DOS Encyclopedia", 
                "Ray Duncan", 129.95m, false);
             bookDB.AddBook("Dogbert's Clues for the Clueless", 
                "Scott Adams", 12.00m, true);
          }
       }
    }
    View Code
    1.B.2,
    1.B2,源代码返回顶部
    1.B2.2,compose.cs
    // 版权所有(C) Microsoft Corporation。保留所有权利。
    // 此代码的发布遵从
    // Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
    //
    //版权所有(C) Microsoft Corporation。保留所有权利。
    
    // compose.cs
    using System;
    
    delegate void MyDelegate(string s);
    
    class MyClass
    {
        public static void Hello(string s)
        {
            Console.WriteLine("  Hello, {0}!", s);
        }
    
        public static void Goodbye(string s)
        {
            Console.WriteLine("  Goodbye, {0}!", s);
        }
    
        public static void Main()
        {
            MyDelegate a, b, c, d;
    
            // 创建引用 Hello 方法的 
            // 委托对象 a:
            a = new MyDelegate(Hello);
            // 创建引用 Goodbye 方法的 
            // 委托对象 b:
            b = new MyDelegate(Goodbye);
            // a 和 b 两个委托组成 c, 
            // c 将按顺序调用这两个方法:
            c = a + b;
            // 从组合委托中移除 a 而保留 d, 
            // 后者仅调用 Goodbye 方法:
            d = c - a;
    
            Console.WriteLine("Invoking delegate a:");
            a("A");
            Console.WriteLine("Invoking delegate b:");
            b("B");
            Console.WriteLine("Invoking delegate c:");
            c("C");
            Console.WriteLine("Invoking delegate d:");
            d("D");
        }
    }
    View Code
    1.B.2,
    1.C,下载地址返回顶部

     

    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    hadoop2.2编程:MRUnit测试
    TestLinkConverter编程纪要
    Redisson的分布式锁的简单实现
    Jmeter工具使用
    JVM的学习(三)
    Mybatis需要注意的地方及知识点
    JVM学习二(JAVA的四种引用)
    mysql的引擎
    JVM学习一(JVM的内存结构和垃圾回收)
    JDk1.8HashMap的源码分析
  • 原文地址:https://www.cnblogs.com/ylbtech/p/5062102.html
Copyright © 2011-2022 走看看