📜  什么是委托以及如何使用它们 c# (1)

📅  最后修改于: 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 来引用 Method1Method2 方法。然后,我们可以通过调用委托来调用实际的方法。

如何使用委托?

我们可以使用委托来实现很多功能,例如事件处理、回调和异步编程等。

例如,下面是一个简单的事件处理程序:

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# 特性,它允许我们将方法视为对象,并在运行时将它们传递给其他方法。它们是事件处理、回调和异步编程的基础。

要使用委托,请定义它们并创建委托实例。然后,使用委托实例来调用相应的方法。