📜  委托统一 - C# (1)

📅  最后修改于: 2023-12-03 15:09:20.147000             🧑  作者: Mango

委托统一 - C#

什么是委托?

在 C# 中,委托是一种类型,代表着对一个或多个方法的引用。可以把委托看做是一个包含了多个方法的容器。通过委托,我们可以将方法传递给其他方法,或者将方法用作参数传递给方法。

委托的定义

要定义一个委托,需要使用 delegate 关键字。下面是一个示例代码:

delegate void MyDelegate(string message);

上面的代码中,定义了一个名为 MyDelegate 的委托,它接受一个参数类型为字符串,没有返回值。

如何使用委托?

创建委托之后,我们可以用它来引用一个方法。下面是一个示例代码:

class Program
{
    static void Main(string[] args)
    {
        MyDelegate del = new MyDelegate(PrintMessage);
        del("Hello, world!");
    }

    static void PrintMessage(string message)
    {
        Console.WriteLine(message);
    }
}

上面的代码中,我们首先创建了一个名为 del 的委托,这个委托引用了一个名为 PrintMessage 的方法。然后,我们传递了一个字符串 "Hello, world!" 并调用了这个委托,最终输出了这个字符串。

委托的优势

委托可以让我们实现回调函数的功能。而且,使用委托可以使代码更加灵活和可重用。下面是一个示例代码:

class Program
{
    static void Main(string[] args)
    {
        List<string> names = new List<string>();
        names.Add("Alice");
        names.Add("Bob");
        names.Add("Charlie");

        ProcessNames(names, PrintName);
    }

    static void ProcessNames(List<string> names, MyDelegate process)
    {
        foreach (string name in names)
        {
            process(name);
        }
    }

    static void PrintName(string name)
    {
        Console.WriteLine("Hello, " + name + "!");
    }
}

上面的代码中,我们首先创建了一个字符串列表 names,并向其中添加了三个名字。然后,我们调用了一个名为 ProcessNames 的方法,并将 PrintName 方法传递给它。

ProcessNames 方法接受一个字符串列表和一个名为 process 的委托参数。在 ProcessNames 方法中,我们遍历字符串列表,并调用委托参数中引用的方法。

在调用 ProcessNames 方法时,我们将 PrintName 方法传递给了它。因此,每次遍历字符串列表时,我们都会调用一次 PrintName 方法,并输出相应的字符串。

总结

委托在 C# 中是一个非常重要的概念。使用委托可以让代码更加灵活和可重用,同时也可以实现回调函数的功能。无论是 Windows 应用程序还是 Web 应用程序,委托都是非常常见的。

注意:了解委托的基本概念后,可以通过泛型委托和匿名方法来进一步扩展委托的功能。