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();
        }
    }
}

 

结果:

 

posted @ 2017-03-21 09:56  panter  阅读(298)  评论(0编辑  收藏  举报