初学C#,对委托的初认识

之前一段时间处于备考阶段,现在有时间了,重学c#,当初学习了.net,发现是会傻傻的敲代码,不懂为什么这么用,现在重头开始看c#入门经典,看到委托这一块有点自己的理解吧,就来写博客了。

委托,这个词听起来很高大上,刚开始看到时候很懵,被这高大上的词吓到了,其实委托的机制非常简单,委托只是一种存储函数引用的类型,下面我们开始具体介绍。

委托的声明非常类似于函数,但没有函数体,有自己的关键字delegate,委托的声明指定了一个函数的返回类型和一个参数列表(可以有多个参数),定义后,就可以声明委托变量,把变量初始化为于委托相同的返回值且参数的一样的函数引用,之后就可以用委托变量进行调用这个函数了,和函数调用时一样的.

下面的示例使用委托进行访问两个函数中的一个。

代码如下:

class Program
    {
        delegate double ProcessDelegate(double param1, double param2);//ProcessDelegate这为委托名,要deledagte声明返回值double
        static double Multiply(double param1, double param2)
        {
            return param1 * param2;
        }

        static double Divide(double param1, double param2)
        {
            return param1 / param2;
        }

        static void Main(string[] args)
        {
            ProcessDelegate process;//声明委托变量
            Console.WriteLine("Enter 2 numbers separated with a comma:");
            string input = Console.ReadLine();
            int commaPos = input.IndexOf(',');
            double param1 = Convert.ToDouble(input.Substring(0, commaPos));
            double param2 = Convert.ToDouble(input.Substring(commaPos + 1,
                                             input.Length - commaPos - 1));//Substring(初始值的下标,长度);
            Console.WriteLine("Enter M to multiply or D to divide:");
            input = Console.ReadLine();
            if (input == "M")
                process = new ProcessDelegate(Multiply);
            else
                process = new ProcessDelegate(Divide);
            Console.WriteLine("Result: {0}", process(param1, param2));
            Console.ReadKey();
        

现在你就可以copy代码在你的编译器进行运行了。

要把一个函数的引用赋值给委托变量,这个的使用略显古怪,不过还是很容易理解的,跟数组的初始化差不多,都需要new关键字创建一个新的委托,如process = new ProcessDelegate(Multiply);这里的参数只要函数名,不需要函数名+()。

实际上有非常简单的方法,只要将函数名赋值给委托变量就好,如process=Multiply,此时编译器会自动化一个委托,写成完整式。但代码是写给其他人看的,最好用完整的,这样别人一看就懂了,。

然后就可以直接调用函数了,如上面的赋值,就可以这样调用函数:process(double a,double b),这样就可以访问函数Multiple。

以前就是本人对委托的初认识,委托还有许多的用途,主要是在事件和事件处理中,在下将在接下来的学习中进行理解,然后再发表看法吧。

第一次写博客,没什么经验,大佬们可以私信指点,发表看法。

转载请注明出处

你可能感兴趣的:(c#)