C# 委托(Delegate)是一种将方法作为参数传递的类型,可以用于实现回调函数、事件处理程序等。委托类型定义了方法的签名,可以将符合该签名的任何方法赋值给该委托变量。在 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的委托类型,该委托类型接受一个字符串参数并返回 "voidvoid。接下来,在Main方法中,我们创建了一个委托类型的变量greeting,并将其赋值为 "SaySayHello方法。最后,我们调用 "ggreeting变量,将字符串参数传递给它,它会调用 "SaySayHello方法并输出字符串。 在实际应用中,委托通常与事件一起使用,用于处理事件。要编写一个包含委托的程序,您需要考虑以下步骤: 定义委托类型:委托类型应该与要调用的方法的签名相匹配。 创建委托变量:可以使用 "new 调用委托变量:可以像调用方法一样调用委托变量,并传递参数。 需要注意的是,委托变量在调用时可以同时调用多个方法,这被称为多路广播(Multicast)。可以使用 "+运算符将多个方法添加到委托变量中,使用-=运算符将方法从委托变量中移除。 以下是一个使用委托处理事件的示例: using System; class Program { static void Main() { var publisher = new Publisher(); var subscriber = new Subscriber(); publisher.SomethingHappened += subscriber.HandleSomethingHappened; publisher.DoSomething(); // 触发事件 } } 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方法中,我们创建了一个Publisher对象和一个Subscriber对象,然后将Subscriber的HandleSomethingHappened方法添加到Publisher的SomethingHappened事件中。当Publisher触发SomethingHappened事件时,Subscriber中的HandleSomethingHappened方法将被调用。 总之,委托是 C# 中一种非常有用的机制,可以方便地实现回调函数、事件处理程序等。委托的使用可以使代码更加灵活和可扩展。