⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delegatesexample.cpp

📁 Visual_C++[1].NET_Bible1 Visual_C++宝典书中的全部源码
💻 CPP
字号:
#include "stdafx.h"

#using <mscorlib.dll>
#include <tchar.h>

using namespace System;
using namespace System::Collections;

__gc class Book
{
public:
  Book(String* title, String* author)
  {
    this->title = title;
    this->author = author;
  }

protected:
  String* title;
  String* author;

public:
  __property String* get_Title()
  {
    return this->title;
  }
  __property void set_Title(String* title)
  {
    this->title = title;
  }

public:
  __property String* get_Author()
  {
    return this->author;
  }
  __property void set_Author(String* author)
  {
    this->author = author;
  }
};

__gc class Library
{
public:
  Library()
  {
    books = new ArrayList();

    Book* b1 = new Book("Visual C++.NET Bible", "Tom Archer & Andrew Whitechapel");
    books->Add(b1);

    Book* b2 = new Book("Inside C#", "Tom Archer & Andrew Whitechapel");
    books->Add(b2);

    Book* b3 = new Book("The Career Programmer", "Christopher Duncan");
    books->Add(b3);
  }

protected:
  ArrayList* books;

public:
  __delegate void SendAllBooksCallback(Book* book);
  void SendAllBooks(SendAllBooksCallback* callback)
  {
   Console::WriteLine(S"[Library::SendAllBooks] Using delegate object to send data to client");
   for (int i = 0; i < books->Count; i++)
   {
     callback(static_cast<Book*>(books->Item[i]));
   }
  }
};

__gc class BookReader
{
public:
  void ReadAllBooks()
  {
    Console::WriteLine(S"[BookReader::ReadAllBooks] Instantiating a Library object");
    Library* library = new Library();

    Console::WriteLine(S"[BookReader::ReadAllBooks] Creating a delegate object");
    Library::SendAllBooksCallback* myCallback = 
      new Library::SendAllBooksCallback(this, &BookReader::ReadBook);

    Console::WriteLine(S"[BookReader::ReadAllBooks] Calling Library::SendAllBooks (passing delegate)");
    library->SendAllBooks(myCallback);
  }

  void ReadBook(Book* book)
  {
    Console::WriteLine("Reading book {0} by {1}", book->Title, book->Author);
  }
};

int _tmain(void)
{
  Console::WriteLine(S"[_tmain] Instantiating a BookReader object");
  BookReader* pReader = new BookReader();

  Console::WriteLine(S"[_tmain] Calling BookReader::ReadAllBooks");
  pReader->ReadAllBooks();

  Console::ReadLine();
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -