C# 委托、lambda表达式和事件

什么是委托?委托就是持有一个或多个方法的对象,并且该对象可以执行,可以传递。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        // 定义委托事件
        delegate void ActCute();
        static void Main(string[] args)
        {
            ActCute del = null;
            Dog dog1 = new Dog("dog");
            Cat cat1 = new Cat("cat");
            // 委托事件的添加
            del = dog1.WagTail;
            del += cat1.InnocentLook;
            // 定义lambda 表达式
            del += () =>
            {
                Console.WriteLine("这是lambda表达式定义的方法!!!");
            };
            // 按照添加的顺序依次调用
            del();
        }
        public class Dog
        {
            private string Name;
            public Dog(string name)
            {
                Name = name;
            }
            public void WagTail()
            {
                Console.WriteLine(Name + "正在摇尾巴...");
            }
        }
        public class Cat
        {
            private string Name;
            public Cat(string name)
            {
                Name = name;
            }
            public void InnocentLook()
            {
                Console.WriteLine(Name + "正在摆弄无辜表情...");
            }
        }
    }
}

事件:一种封装受限制的委托。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Client1 c1 = new Client1();
            Client1 c2 = new Client1();
            // 绑定委托
            Dog.NewDog += c1.WangADog;
            Dog.NewDog += c2.WangADog;
            Dog dog1 = new Dog("jack");
        }
        public class Dog
        {
            private string Name;
            public delegate void Handler();  // 定义委托类型
            public static event Handler NewDog;  // 在委托事情上定义事件
            public Dog(string name)
            {
                Name = name;
                if (NewDog != null)
                {
                    NewDog();
                }
            }
            public void WagTail()
            {
                Console.WriteLine(Name + "正在摇尾巴...");
            }
        }
        class Client1
        {
            public void WangADog()
            {
                Console.WriteLine("我想要一条狗!!!");
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/namejr/p/10274212.html