继续.Net 之旅

昨天简要分析了IEnumerable和IEnumerator这两个接口的妙用,其实在FCL里这样的用法到处都是,比如IComparable, IComparer,他们充分展示了工厂模式和其他模式直接合作。

今天我想说的另外一个比较重要模式:观察者模式(Observer)

这个模式在GUI组件设计中使用较为广泛,这边我要讲的不是Observer本身,而是.net框架对Observer这个模式本身的支持。

大家应该都只到.net之中有一个比较重要的名词:委托。

如何声明委托,它是有一个叫做delegate的关键字来申明。有很多人开始学习这个新东西的时候经常被她迷惑,这里我想来说说我的看法:

委托本身并没有什么太多的东西,他是一种类型,限制方法的类型,他明确了方法参数和返回值。它通过封装方法地址(类似于函数指针),只不过在.net框架的庇护,是安全的。

既然委托是类型,他就有自己的爸爸,他是谁呢?呵呵,不是别人,他就是System.Delegate。

还有一个比较有用的关于委托的特点,就是多播,她也是.net关于支持Observer模式的一个重要的feature:

delegate int Calulate(int x, int y)

public int Add(int x, int y)
        {
            return x * 10 + y;
        }

        public int Minus(int x, int y)
        {
            return x - y;
        }

        private void Test()
        {
            Calulate methodadd = new Calulate(Add);
            Calulate methodMinus = new Calulate(Minus);

            Calulate methods = methodadd + methodMinus;
            int result =  methods(10, 20);
        }

你说他的运行结果是什么,大家可以自己去尝试一下。

注:为了便于学习,这只是一个简单的例子,更多知识还等待大家去研究。

事件,一个与天然和委托不可分离的特色。与委托不同,事件是成员,而委托就是这个成员的类型。

请读者自己思考事件和委托的不同。 :)

最后我先提一下委托和接口之间的异同,我只说一句话:他们都同属类型,基本上可以使用接口的地方都可以使用委托替换,反之亦然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值