国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

初探.NET中的delegate類型與.NET事件

2024-07-10 12:58:43
字體:
來源:轉載
供稿:網友
 

1.了解delegate
delegate可以認為是一種函數的指針,一個delegate類型的實例代表可以代表一個方法,在實際使用中我們可以在不知道方法名稱的情況下調用到這個方法。前面說太多可能會使大家變得糊涂,或者摸不著頭腦,我舉個例子,來詳細說明此種類型的用法:


整個例程的代碼,是控制臺項目.

//代碼開始
using system;

namespace consoleapp1
{
 
 public delegate string functionpointer(string strname);
 class class1
 {
  
  [stathread]
  static void main(string[] args)
  {
   //
   // todo: 在此處添加代碼以啟動應用程序
   system.console.writeline("hello world!");
   functionpointer fpa = new functionpointer(afunction);
   functionpointer fpb = new functionpointer(bfunction);
   invokemethod(fpa);
   invokemethod(fpb);
   system.console.readline();
   //
  }
  public static string afunction(string snamea)
  {
   return "afunction say i'm " + snamea;
  }
  public static string bfunction(string snameb)
  {
   return "bfunction say i'm " + snameb;
  }
  public static void invokemethod(functionpointer fp)
  {
   system.console.writeline(fp("storm"));
  }
 }
}
//代碼結束

步驟1:要使用delegate類型首先應該建立delegate樣板,所謂delegate樣板其實就是delegate能夠調用的方法的簽名,什么是方法的簽名?方法的簽名可以認為是方法的參數類型、數量、返回值類型這些特征。

定義的形勢如下: 訪問修飾符(public) delegate 返回值類型 名稱(參數列表);

說明:返回值類型應該是你定義的delegate類型所準備調用的方法的返回值類型,參數列表應該與你準備使用delegate來調用的方法的參數列表相同(指的是數量、類型、順序相同,名稱當然無所謂了)
一個實際的例子就是上面程序的
                public delegate string functionpointer(string strname);

步驟2:定義delegate準備調用的方法,當然該方法要與你剛才聲明的delegate有相同的返回值和參數表;
例如上面程序的:
                public static string afunction(string snamea)
                {
                     return "afunction say i'm " + snamea;
                }
                public static string bfunction(string snameb)
               {
                     return "bfunction say i'm " + snameb;
               }

步驟3:定義delegate類型的處理函數,在這里可以定義如何調用你的delegate類型所指的方法,在實際使用中可以在這里來動態決定傳入的參數等信息。
如上面程序的
                public static void invokemethod(functionpointer fp)
               {
                     system.console.writeline(fp("storm97"));
               }

步驟4:建立delegate實例,傳入欲調用的方法名,要使用delegate類型必須建立他的實例,一個實例代表了一個方法的引用(可以這樣說)


delegate實例定義的形式:
           xxx(代表你定義的某個delegate類型的名稱)  實例名(假設是實例a) = new xxx([欲調用的方法名(假設是方法a)]);
意思是實例變量a指向方法a的程序代碼段;
如:

  static void main(string[] args)
  {
   //
   // todo: 在此處添加代碼以啟動應用程序
   system.console.writeline("hello world!");
   //建立第一個delegate的實例fpa,該實例代表方法afunction;
   functionpointer fpa = new functionpointer(afunction);
   //建立第一個delegate的實例fpa,該實例代表方法bfunction;
   functionpointer fpb = new functionpointer(bfunction);
   ......
   //
  }
下面就可以運行整個程序了。
如:
  static void main(string[] args)
  {
   //
   ......
   //調用方法afunction
   invokemethod(fpa);
   //調用方法bfunction
   invokemethod(fpb);
   //
  }

輸出結果: afunction say i'm storm97
                      bfunction say i'm storm97

當然,從這個例子看不出delegate有什么優勢,因為這個程序太簡單了,也許有人會說調用方法要這么麻煩嗎,我直接調用就算了,何必要繞個大圈兒去調用呢,其實在實際應用中這種方式會給我們帶來很大的靈活性,以后在實際使用過程中你們會慢慢體會到的。:)


最大的網站源碼資源下載站,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇州市| 黎川县| 克东县| 呈贡县| 榕江县| 普洱| 修文县| 红桥区| 崇州市| 苏尼特右旗| 延庆县| 辛集市| 香格里拉县| 阜新市| 时尚| 昆明市| 郁南县| 邓州市| 凤冈县| 汶川县| 若羌县| 西峡县| 图木舒克市| 东至县| 淳安县| 丘北县| 凤庆县| 上林县| 易门县| 四子王旗| 陆川县| 民和| 黄冈市| 蓬莱市| 克拉玛依市| 南部县| 于田县| 颍上县| 贡觉县| 炉霍县| 大余县|