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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-18 12:00:46
字體:
供稿:網(wǎng)友

  1.了解delegate
  
  delegate可以認為是一種函數(shù)的指針,一個delegate類型的實例代表可以代表一個方法,在實際使用中我們可以在不知道方法名稱的情況下調(diào)用到這個方法。前面說太多可能會使大家變得糊涂,或者摸不著頭腦,我舉個例子,來具體說明此種類型的用法:
  
  整個例程的代碼,是控制臺項目.
  
  //代碼開始
  using System;
  
  namespace ConsoleApp1
  {
  
  public delegate string FunctionPointer(string strName);
  class Class1
  {
  
  [STAThread]
  static void Main(string[] args)
  {
  //
  // TODO: 在此處添加代碼以啟動應(yīng)用程序
  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"));
  }
  }
  }
  //代碼結(jié)束
  
  步驟1:要使用delegate類型首先應(yīng)該建立delegate樣板,所謂delegate樣板其實就是delegate能夠調(diào)用的方法的簽名,什么是方法的簽名?方法的簽名可以認為是方法的參數(shù)類型、數(shù)量、返回值類型這些特征。
  
  定義的形勢如下: 訪問修飾符(public) delegate 返回值類型 名稱(參數(shù)列表);
  
  說明:返回值類型應(yīng)該是你定義的delegate類型所預(yù)備調(diào)用的方法的返回值類型,參數(shù)列表應(yīng)該與你預(yù)備使用delegate來調(diào)用的方法的參數(shù)列表相同(指的是數(shù)量、類型、順序相同,名稱當(dāng)然無所謂了)
  一個實際的例子就是上面程序的
  public delegate string FunctionPointer(string strName);
  
  步驟2:定義delegate預(yù)備調(diào)用的方法,當(dāng)然該方法要與你剛才聲明的delegate有相同的返回值和參數(shù)表;
  例如上面程序的:
  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類型的處理函數(shù),在這里可以定義如何調(diào)用你的delegate類型所指的方法,在實際使用中可以在這里來動態(tài)決定傳入的參數(shù)等信息。
  如上面程序的
  public static void InvokeMethod(FunctionPointer fp)
  {
  System.Console.WriteLine(fp("storm97"));
  }
  
  步驟4:建立delegate實例,傳入欲調(diào)用的方法名,要使用delegate類型必須建立他的實例,一個實例代表了一個方法的引用(可以這樣說)
  
  delegate實例定義的形式:
  XXX(代表你定義的某個delegate類型的名稱) 實例名(假設(shè)是實例A) = new XXX([欲調(diào)用的方法名(假設(shè)是方法A)]);
  意思是實例變量A指向方法A的程序代碼段;
  如:
  
  static void Main(string[] args)
  {
  //
  // TODO: 在此處添加代碼以啟動應(yīng)用程序
  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)
  {
  //
  ......
  //調(diào)用方法aFunction
  InvokeMethod(fpa);
  //調(diào)用方法bFunction
  InvokeMethod(fpb);
  //
  }
  
  輸出結(jié)果: aFunction say I'm storm97
  bFunction say I'm storm97

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 启东市| 云南省| 三都| 宜城市| 泽库县| 漳平市| 大安市| 礼泉县| 南郑县| 唐河县| 榆中县| 古交市| 灯塔市| 阿鲁科尔沁旗| 呼玛县| 东兴市| 淄博市| 思茅市| 绩溪县| 穆棱市| 林西县| 芜湖县| 贞丰县| 孝义市| 涪陵区| 定边县| 绥德县| 北碚区| 松滋市| 扶沟县| 安庆市| 右玉县| 牡丹江市| 廊坊市| 佛学| 长葛市| 沐川县| 师宗县| 和田市| 油尖旺区| 达尔|