C#对委托的初步理解理解

Posted panter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#对委托的初步理解理解相关的知识,希望对你有一定的参考价值。

作为新手对委托的学习:

1.定义委托:委托实际上是一个类,在定义委托前就知道了方法的返回类型和方法的参数类型(可以把委托理解为只知道方法的返回类型和方法的参数类型,不知道方法体)

public  delegate string TestDelegate(string test);

/*编译后会生成如下的一个完整类:
public sealed class GreetingDelegate:System.MulticastDelegate
{
public GreetingDelegate(object @object, IntPtr method);
public virtual IAsyncResult BeginInvoke(string name, AsyncCallback callback, object @object);
public virtual void EndInvoke(IAsyncResult result);
public virtual void Invoke(string name);
}
*/

2.实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
    public delegate string TestDelegate(string name);//定义委托,委托实际上是一个类
    //新建一个类来测试委托调用方法
    public class Test
    {
        public void GreetPeople(string name, TestDelegate delegate1)
        {
            //if (delegate1 != null)//如果有方法注册委托变量
            //{
            //    delegate1(name);//通过委托调用方法
            //}

            delegate1?.Invoke(name);//(与上面的if等价)
        }
    }
    class Program
    {
        private static string TestMethod(string name)
        {
            Console.WriteLine("你好," + name);
            return null;
        }

        static void Main(string[] args)
        {
            Test gm = new Test();

            //使用委托调用TestMethod方法
            gm.GreetPeople("panter", TestMethod);
            Console.WriteLine();

            //使用委托调用lambda
            Console.Write("使用了lambda:");
            gm.GreetPeople("潘特", lambdatest =>
            {
                Console.WriteLine("你好,"+lambdatest);
                return null;
            });
            Console.ReadKey();
        }
    }
}

 

结果:

 

以上是关于C#对委托的初步理解理解的主要内容,如果未能解决你的问题,请参考以下文章

C#基础——事件初步

浅谈对C#委托理解

C#编程之委托与事件四

通俗的理解委托

C# 再次理解委托事件与函数作为参数

编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变