熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#中Delegate淺析與思考

2013-11-13 10:25:01  來源: .NET編程 
     什麼是托管函數
  
  托管函數是一個對類裡面的某個函數的一個引用它自己並沒有具體的函數定義只是指向某個函數實現
  
   與C++ Delphi的橫向比較
  
  在C++和Delphi中與托管函數對應的類型是函數指針形式如下:
  
  C++
  
  typedef (int GetNum)(real rNum);
  
  Delphi
  
  function GetNum(rNum:real): integer; external;
  
  這裡定義函數指針他們所能指向的函數定義的傳入參數必須是實型傳出為整形
  
  
  托管函數有什麼用
  
  由於托管函數是對類裡面某個函數的一個引用所以我們不必知道這個函數的具體名字是什麼而只需要調用托管函數讓托管函數去調用相應的函數就可以了 一個例子: 一個公司一個領導一個領導秘書三個員工分別管理市場策劃和生產這裡秘書就相當與一個托管函數 領導要下達什麼命令(獲得市場信息生產什麼產品)只需要對秘書說給我一份市場報告或者我們不生產原子彈轉向生產氫彈然後再由秘書根據領導的命令選擇的去找哪個員工再把員工獲得的信息返回給領導 這裡面三個員工對於領導是透明的領導並不知道自己下達的命令具體是由誰執行的
  
  
   如何定義&&如何使用 
   
  接著上面的例子我們聲明一個秘書托管函數原型
  
  class Secretory
  
  {
  
  //定義托管函數原型
  
  private delegate string Do(string command);
  
  //創建托管函數實例
  
  public Do Doit;
  
  //給秘書下達命令執行
  
  public void ExecuteCommand(string command)
  
  {
  
  switch(秘書根據命令判斷是要給誰執行的)
  
  {
  
  case 調研市場的人:
  
  Doit=new Do(new MarketMan()GetMarketInfo);
  
  Break;
  
  Case 生長產品的人:
  
  Doit=new Do(new ProductMan()ProduceProduct);
  
  Break;
  
  Default:
  
  Break;
  
  }
  
  }
  
  Doit(command);
  
  } 
   
   
  ///調研市場的那個人的類
  
  class MarketMan
  
  {
  
  public string GetMarketInfo(string command)
  
  { 根據命令調查信息 返回獲得信息 ;}
  
  }
  
  ///生產產品的人
  
  class ProductMan
  
  {
  
  public static string ProduceProduct(string command)
  
  { 根據命令生產產品並返回生產工程中的信息;}
  
  } 
   
  ok那麼如何執行呢?老板怎麼使用Secretory這個類呢?
  
  go on
  
  老板只需要把秘書叫(new)過來直接向他下達命令然後就可以喝茶去了~ ^_^
  
  class Boss
  
  {
  
  public void static main()
  
  {
  
  (new Secretory())Doit(我們要生產氫彈把以前的原子彈都扔到日本好了);
  
  }
  
  } 
   
   
  其他
  
  正入你們所見的上面的兩個類中的方法一個是靜態一個不是靜態的 托管函數所指的函數可以靜態的也可以不是靜態的
From:http://tw.wingwit.com/Article/program/net/201311/13550.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.