C# 委托(Delegate)是一種將方法作為參數(shù)傳遞的類型,可以用于實現(xiàn)回調函數(shù)、事件處理程序等。委托類型定義了方法的簽名,可以將符合該簽名的任何方法賦值給該委托變量。在 C# 中,委托是一種類,可以實例化并用于調用方法。
以下是一個簡單的委托的示例:
using System;
delegate void GreetingDelegate(string name);
class Program
{
static void Main()
{
GreetingDelegate greeting = SayHello;
greeting("John");
}
static void SayHello(string name)
{
Console.WriteLine("Hello, " + name + "!");
}
}
在上面的示例中,我們定義了一個名為 'G的委托類型,該委托類型接受一個字符串參數(shù)并返回 'voidvoid。接下來,在Main方法中,我們創(chuàng)建了一個委托類型的變量greeting,并將其賦值為 'SaySayHello方法。最后,我們調用 'ggreeting變量,將字符串參數(shù)傳遞給它,它會調用 'SaySayHello方法并輸出字符串。
在實際應用中,委托通常與事件一起使用,用于處理事件。要編寫一個包含委托的程序,您需要考慮以下步驟:
- 定義委托類型:委托類型應該與要調用的方法的簽名相匹配。
- 創(chuàng)建委托變量:可以使用 'new
- 調用委托變量:可以像調用方法一樣調用委托變量,并傳遞參數(shù)。
需要注意的是,委托變量在調用時可以同時調用多個方法,這被稱為多路廣播(Multicast)。可以使用 '+運算符將多個方法添加到委托變量中,使用-=運算符將方法從委托變量中移除。
以下是一個使用委托處理事件的示例:
using System;
class Program
{
static void Main()
{
var publisher = new Publisher();
var subscriber = new Subscriber();
publisher.SomethingHAppened += subscriber.HandleSomethingHappened;
publisher.DoSomething(); // 觸發(fā)事件
}
}
class Publisher
{
public event EventHandler SomethingHappened;
public void DoSomething()
{
Console.WriteLine("Something happened!");
if (SomethingHappened != null)
{
SomethingHappened(this, EventArgs.Empty);
}
}
}
class Subscriber
{
public void HandleSomethingHappened(object sender, EventArgs e)
{
Console.WriteLine("Something happened and I was notified!");
}
}
在上面的示例中,Publisher類聲明了一個名為SomethingHappened的事件,Subscriber類中定義了一個名為HandleSomethingHappened的方法,該方法符合EventHandler委托類型的簽名。在Main方法中,我們創(chuàng)建了一個Publisher對象和一個Subscriber對象,然后將Subscriber的HandleSomethingHappened方法添加到Publisher的SomethingHappened事件中。當Publisher觸發(fā)SomethingHappened事件時,Subscriber中的HandleSomethingHappened方法將被調用。
總之,委托是 C# 中一種非常有用的機制,可以方便地實現(xiàn)回調函數(shù)、事件處理程序等。委托的使用可以使代碼更加靈活和可擴展。