zoukankan      html  css  js  c++  java
  • 初试Delegate 上海

    在.NET Framework  中包含一种称作代理的机制(delegate),它类似于C/C++的函数指针,但它是面向对象的和类型安全的。
          在c#代理同类和接口一样,也是一种引用类型,用户可以使用代理封装一个具有特定参数和返回类型的的方法,包括静态方法和实例方法,代理是实现.NET Framework中事件处理机制的基础。
              代理的声明实际上定义了一个从System.MulticastDelegate类派生的类,这个类是由C#编译器根据代理的声明语句自动生成的。
       主要有两个:
                 public void virtual Invoke(object value ,int32 item,Int32 numItems);//这个方法用来调用代理实例所封装的方法
                  public virtual IAsyncResult BeginInvoke(object value,int32 item,int32 numItems,AsyncCallback callback,Object object);      
                public virtual void EndInvoke(IAsyncresult result);
       ////////////////上面两个方法是用来执行异步调用
       下面看个小例字(注:本人不善意写注释
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    using Bookstore;

    namespace Bookstore
    {
        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);
        /// <summary>
        ///
        /// </summary>
        public class BookDB
        {
            ArrayList list = new ArrayList();

            public void AddBook(string title, string author, decimal price, bool pagerBack)
            {
                list.Add(new Book(title, author, price, pagerBack));

            }
            public void ProcessPaperbackBooks(processBookDelegate processBook)
            {
                foreach (Book b in list)
                {
                    if (b.Paperback)
                        processBook(b);
                }
            }
        }
    }
    namespace BookTestClient
    {
        using Bookstore;
       //
        class PriceTotaller
        {
            int countBooks = 0;
            decimal priceBooks = 0.0m;
            internal void AddBookTotal(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(string[] args)
            {
                BookDB bookDB = new BookDB();

                AddBooks(bookDB);
                //
                Console.WriteLine("Paperback Book Titles:");
                bookDB.ProcessPaperbackBooks(new processBookDelegate(PrintTitle));

                //
                PriceTotaller totaller = new PriceTotaller();
                //
                bookDB.ProcessPaperbackBooks(new processBookDelegate(totaller.AddBookTotal));
                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", 111.95m, true);
                bookDB.AddBook("The Unicode Standard 2.0 ", "The Unicode Consortium", 311.95m, true);
                bookDB.AddBook("The ms_dos Encyclopedia", "Ray Duncan", 1211.95m,false);
                bookDB.AddBook("Dogbert 's Clues for the clueless", "Scott Adams", 12.00m, true);
            }
        }
       
    }

  • 相关阅读:
    Atitit.atiRI  与 远程调用的理论and 设计
    Atitit.提升 升级类库框架后的api代码兼容性设计指南
    Atitit.研发管理软件公司的软资产列表指南
    Atitit.软件开发的三层结构isv金字塔模型
    Atitit.加密算法ati Aes的框架设计
    Atittit.研发公司的组织架构与部门架构总结
    IIS HTTP Error 500.24
    Visual Studio 快捷键
    软件学习遐想
    navigator属性
  • 原文地址:https://www.cnblogs.com/luozhai714/p/672864.html
Copyright © 2011-2022 走看看