📅  最后修改于: 2023-12-03 15:21:48.918000             🧑  作者: Mango
在 C# 中,委托是一种类型,它用于引用函数。换句话说,它是一种指向函数的类型。因此,它们也被称为“函数指针”。
使用委托,我们可以将方法作为参数传递给另一个方法。这样,我们就可以在运行时决定要调用哪个方法。
下面是一个简单的委托示例:
public delegate void MyDelegate(string message);
public class MyClass
{
public void Method1(string message)
{
Console.WriteLine($"Method1: {message}");
}
public void Method2(string message)
{
Console.WriteLine($"Method2: {message}");
}
}
public class Program
{
static void Main(string[] args)
{
MyClass obj = new MyClass();
MyDelegate del1 = new MyDelegate(obj.Method1);
MyDelegate del2 = new MyDelegate(obj.Method2);
del1("Hello");
del2("World");
}
}
在上面的示例中,我们使用委托 MyDelegate
来引用 Method1
和 Method2
方法。然后,我们可以通过调用委托来调用实际的方法。
我们可以使用委托来实现很多功能,例如事件处理、回调和异步编程等。
例如,下面是一个简单的事件处理程序:
public delegate void ButtonClickEventHandler(object sender, EventArgs e);
public class Button
{
public event ButtonClickEventHandler Click;
public void OnClick()
{
Click?.Invoke(this, EventArgs.Empty);
}
}
public class Program
{
static void Main(string[] args)
{
Button button = new Button();
button.Click += Button_Click;
button.OnClick();
}
private static void Button_Click(object sender, EventArgs e)
{
Console.WriteLine("Button clicked");
}
}
在上面的示例中,我们定义了一个事件处理程序 ButtonClickEventHandler
委托。然后,我们创建一个按钮对象并订阅它的 Click
事件。当按钮被单击时,我们调用 OnClick
方法触发 Click
事件。然后,事件处理程序 Button_Click
将被调用。
除了事件处理,我们还可以使用委托进行回调和异步编程。例如,我们可以使用 Thread
类中的 Start
方法将方法作为参数传递,从而实现多线程编程。
public delegate void SimpleDelegate();
public class Program
{
static void Main(string[] args)
{
SimpleDelegate del = new SimpleDelegate(Method);
Thread thread = new Thread(new ThreadStart(del.Invoke));
thread.Start();
Console.WriteLine("Main thread");
}
private static void Method()
{
Console.WriteLine("Thread method");
}
}
在上面的示例中,我们定义了一个简单的委托 SimpleDelegate
。然后,我们创建一个委托实例并传递给 Thread
类的构造函数。最后,我们调用 Start
方法启动线程并调用委托实例。这将导致委托实例引用的方法在新线程上运行。
委托是一种强大的 C# 特性,它允许我们将方法视为对象,并在运行时将它们传递给其他方法。它们是事件处理、回调和异步编程的基础。
要使用委托,请定义它们并创建委托实例。然后,使用委托实例来调用相应的方法。