C# 委托(Delegate)是一種將方法作為參數(shù)傳遞的類(lèi)型,可以用于實(shí)現(xiàn)回調(diào)函數(shù)、事件處理程序等。委托類(lèi)型定義了方法的簽名,可以將符合該簽名的任何方法賦值給該委托變量。在 C# 中,委托是一種類(lèi),可以實(shí)例化并用于調(diào)用方法。
以下是一個(gè)簡(jiǎn)單的委托的示例:
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è)名為 'G的委托類(lèi)型,該委托類(lèi)型接受一個(gè)字符串參數(shù)并返回 'voidvoid。接下來(lái),在Main方法中,我們創(chuàng)建了一個(gè)委托類(lèi)型的變量greeting,并將其賦值為 'SaySayHello方法。最后,我們調(diào)用 'ggreeting變量,將字符串參數(shù)傳遞給它,它會(huì)調(diào)用 'SaySayHello方法并輸出字符串。
在實(shí)際應(yīng)用中,委托通常與事件一起使用,用于處理事件。要編寫(xiě)一個(gè)包含委托的程序,您需要考慮以下步驟:
- 定義委托類(lèi)型:委托類(lèi)型應(yīng)該與要調(diào)用的方法的簽名相匹配。
- 創(chuàng)建委托變量:可以使用 'new
- 調(diào)用委托變量:可以像調(diào)用方法一樣調(diào)用委托變量,并傳遞參數(shù)。
需要注意的是,委托變量在調(diào)用時(shí)可以同時(shí)調(diào)用多個(gè)方法,這被稱(chēng)為多路廣播(Multicast)。可以使用 '+運(yùn)算符將多個(gè)方法添加到委托變量中,使用-=運(yùn)算符將方法從委托變量中移除。
以下是一個(gè)使用委托處理事件的示例:
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類(lèi)聲明了一個(gè)名為SomethingHappened的事件,Subscriber類(lèi)中定義了一個(gè)名為HandleSomethingHappened的方法,該方法符合EventHandler委托類(lèi)型的簽名。在Main方法中,我們創(chuàng)建了一個(gè)Publisher對(duì)象和一個(gè)Subscriber對(duì)象,然后將Subscriber的HandleSomethingHappened方法添加到Publisher的SomethingHappened事件中。當(dāng)Publisher觸發(fā)SomethingHappened事件時(shí),Subscriber中的HandleSomethingHappened方法將被調(diào)用。
總之,委托是 C# 中一種非常有用的機(jī)制,可以方便地實(shí)現(xiàn)回調(diào)函數(shù)、事件處理程序等。委托的使用可以使代碼更加靈活和可擴(kuò)展。