C#,由委托到Observer设计模式,再到事件机制

本文详细介绍了C#中的委托概念,包括如何声明和使用委托,展示了委托可以绑定多个方法的特性。接着探讨了Observer设计模式,以烧水器为例解释了观察者模式的工作原理。最后,讨论了C#中的事件处理机制,指出event关键字在保持封装性的同时允许外部注册和注销事件。
摘要由CSDN通过智能技术生成

1. 什么是委托?

处理诸如int,bool等基本数据类型,它们是数据的类型。委托,是方法的类型。

如 int a; //a可以是1,2,3,4,5.........

那么delegate D;//D相当于int,是一种类型

D d; //声明了变量,d可以是fun1,fun2,fun3........这里funX是函数的名字。


2.如何使用委托?

函数并不像数那么简单直接赋值就可以了,函数有返回值,或者无返回值,还有参数列表。

如果说定义了一个委托,那么这个委托就对应了一种函数(返回值+参数列表),像具有了int和double一样的类型。

为了使得声明委托能够和一种函数对应,我们使用这样的方法声明委托:

        public delegate void MyDelegate(int a);//委托的声明,public规定了delegate的可见性
        public static void myFunction(int a) //普通方法的声明
        {
            Console.WriteLine("a=" + a);
        }

这样,MyDelegate就对应了一种函数,相当一种函数的类型(对应于数据类型的int,double)。那么使用这个类型就可以声明变量了

        static void Main(string[] args)
        {
            MyDelegate d;
            d = myFunction;//将myFunction绑定到d,因为具有相同的返回值和参数列表,所以可以绑定
        }

委托的绑定

委托不同于普通数据类型(如int)的一个特性是:可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。

看下面的例子:

    class Program
    {
        public delegate void MyDelegate(int a);//委托的声明,public规定了delegate的可见性
        public static void myFunction1(int a) //普通方法1的声明
        {
            Console.WriteLine("a=" + a);
        }
        public static void myFunction2(int a) //普通方法2的声明
        {
            Console.WriteLine("a等于:" + a);
        }
        static void Main(string[] args)
        {
            MyDelegate d;
            d = myFunction1;
            d += myFunction2;
            d(3);//调用这个委托
            Console.ReadLine();
        }
    }
总结:

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

3. 观察者模式(observer)

事件处理机制的基础是一种叫观察者模式的设计模式。Observer设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。

举个简单的例子:

假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1、扬声器会开始发出语音,告诉你水的温度;2、液晶屏也会改变水温的显示,来提示水已经快烧开了。
现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值