程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Visual Studio:針對Java開發人員的C#編程語言(2)(11)

Visual Studio:針對Java開發人員的C#編程語言(2)(11)

編輯:關於C語言

如前所述,委托實例必須包含對象引用。在上面的示例中,通過將方法聲明為靜態的(意味著我們自己不需要指定對象引用),我們避免了這樣做。然而,如果委托引用一個實例方法,就必須給出對象引用,如下所示:

MathClass obj = new MathClass();
myDelegate Operation = new myDelegate(obj.Power);

其中,Power 是 MathClass 方法的一個實例。因此,如果 MathClass 的方法沒有聲明為靜態的,我們就可以通過委托來調用它們,如下所示:

using System;
public class DelegateClass
{
 delegate long myDelegate(int i, int j);
 public static void Main(string[] args)
 {
  MathClass mathObj = new MathClass();
  myDelegate Operation = new myDelegate(mathObj.Add);
  Console.WriteLine("Call to Add method through delegate");
  long l = Operation(10, 20);
  Console.WriteLine("Sum of 10 and 20 is " + l);
  Console.WriteLine("Call to Multiply method thru delegate");
  Operation = new myDelegate(mathObj.Multiply);
  l = Operation(1639, 1525);
  Console.WriteLine("1639 multiplIEd by 1525 equals " + l);
 }
}

當這些方法聲明為 static 時,如果您運行此程序,您就會得到同前面一樣的輸出。

委托和事件

.Net 框架也將委托廣泛應用於事件處理任務(像 Windows 或 Web 應用程序中的按鈕單擊事件)。雖然在 Java 中事件處理通常通過實現自定義偵聽器類來完成,但是 C# 開發人員可以利用委托來進行事件處理。事件被聲明為帶有委托類型的字段,只是在事件聲明前面加上 event 關鍵字。通常,事件被聲明為公共的,但是任何可訪問性修飾符都是允許的。下面的代碼顯示了委托和事件的聲明。

public delegate void CustomEventHandler(object sender, EventArgs e);
public event CustomEventHandler CustomEvent;

事件委托是多路廣播的,這意味著它們可以具有對多個事件處理方法的引用。通過維護事件的注冊事件處理程序列表,委托可以擔當引發事件的類的事件發送程序。下面的示例向您展示了可以如何給多個函數預訂事件。類 EventClass 包含委托、事件和調用事件的方法。注意,只能從聲明事件的類中調用事件。然後,類 TestClass 就可以使用 +=/-= 運算符來預訂/取消預訂事件。當調用 InvokeEvent() 方法時,它會激發此事件,而已經預訂此事件的任何函數都會同步激發,如下面的代碼所示:

using System;
class TestClass
{
 static void Main(string[] args)
 {
  EventClass myEventClass = new EventClass();
  // Associate the handler with the events
  myEventClass.CustomEvent += new EventClass.CustomEventHandler(CustomEvent1);
  myEventClass.CustomEvent += new EventClass.CustomEventHandler(CustomEvent2);
  myEventClass.InvokeEvent();
  myEventClass.CustomEvent -= new EventClass.CustomEventHandler(CustomEvent2);
  myEventClass.InvokeEvent();
 }
 private static void CustomEvent1(object sender, EventArgs e)
 {
  Console.WriteLine("Fire Event 1");
 }
 private static void CustomEvent2(object sender, EventArgs e)
 {
  Console.WriteLine("Fire Event 2");
 }
}
public class EventClass
{
 public delegate void CustomEventHandler(object sender, EventArgs e);
 //Declare the event using the delegate datatype
 public event CustomEventHandler CustomEvent;
 public void InvokeEvent()
 {
  CustomEvent(this, EventArgs.Empty);
 }
}

此程序的輸出如下:

Fire Event 1
Fire Event 2
Fire Event 1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved