网易云课堂C#面对对象编程Two

集合:动态数组(ArrayList),列表(List),字典(Dictionary),队列(Queue),栈(Stack)

委托:委托是持有一个或者多个方法的对象,并且该对象可以被执行。委托也可以声明,是一种引用类型

delegate void ActCute();

既然是一种类型,则可以定义该类型的对象

ActCute actcute;

例子:

abstract public class Pet
    {
        public string _name;
        public Pet(string name)
        {
            _name = name;
        }
    }
    public class Dog : Pet
    {
        public Dog(string Name) : base(Name)
        {
        }
        public void WagTail()
        {
            Console.WriteLine(_name+"wag tail");
        }
    }
    public class Cat: Pet
    {
        public Cat(string Name) : base(Name)
        {
        }
        public void InnocentLook()
        {
            Console.WriteLine(_name + "InnocentLook");
        }
    }
  class program
    {
        delegate void ActCute();//主函数外声明委托
        public static void Main(string[] args)
        {
            Dog dog = new Dog("A");
            Cat cat = new Cat("B");
            ActCute del = null;
            del = dog.WagTail;
            del += cat.InnocentLook;//给委托添加方法
            del();
            Console.ReadKey();
        }
    }


Lambda表达式:

匿名方法:

delegate void ActCute();
ActCute del;
del=delegate(){...};//声明匿名方法
即del=()=>{...};

例:

class program
    {
        delegate void ActCute();
        public static void Main(string[] args)
        {
            Dog dog = new Dog("A");
            Cat cat = new Cat("B");
            ActCute del = null;
            del = dog.WagTail;
            del += cat.InnocentLook;
            del += () =>
            {
                Console.WriteLine("do nothing");
            };//添加匿名方法
            del();
            Console.ReadKey();
        }
    }

事件:

发布者和订阅者:通知某件事情发生的是发布者。对某件事情关注的就是订阅者。

触发和注册:事件发生时,通知所有关注该事件的订阅者。想在事件发生时被通知,订阅者必须注册以表示关注。

用程序语言解释:时间发生时,通知订阅者即调用订阅者的注册函数。注册,就是告诉发布者调用哪一个注册函数。

例:

abstract public class Pet
    {
        public string _name;
        public Pet(string name)
        {
            _name = name;
        }
    }
    public class Dog : Pet
    {
        public delegate void Handler();//声明委托。
        public static event Handler NewDog;//声明事件
        public Dog(string Name) : base(Name)//触发条件即事件发生,即触发条件是new了一条新狗
        {
            if (NewDog != null)
            {
                NewDog();
            }
        }
    }
    class Client//订阅者
    {
        public void WantDog()
        {
            Console.WriteLine("Buy a dog");
        }
    }
class program
    {
        public static void Main(string[] args)
        {
            Client c1 = new Client();//创建订阅者
            Client c2 = new Client();
            Dog.NewDog += c1.WantDog;//订阅,订阅者告诉触发者,当事件发生时要触发自己的哪个方法
            Dog.NewDog += c2.WantDog;
            Dog dog = new Dog("A");//new 出新狗,触发NewDog()中的方法
            Console.ReadKey();
        }
    }

事件即先声明委托,然后声明事件。创建订阅者和订阅者的方法,创建触发事件。将订阅者想在事件触发时所执行的方法委托给事件。最后当事件发生时,所有订阅者注册的方法都被执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值