zoukankan      html  css  js  c++  java
  • C# 我理解的接口、抽象类、以及事件

    一、摘要

    面试中无数次被问及到什么是接口,什么是抽象类,接口和抽象类有什么区别?什么是委托,什么是事件。

    请写出猫叫了,老鼠跑了的例子。。。。。

    这些东西对于一些初学者来说可能还真的有点搞不懂,对于一般工作5,6年以上的人来说,实在不屑一提,微笑

    二、个人理解

    类:对事物或者某一个物体的概括描述

    抽象类:对于一类事物的高度抽象。可以实现任何接口

    接口:对方法的一组抽象提取。

    事件:暴露给关联类的自定义实现,用于解除两个类之间的耦合。

    • 抽象类

    在基于模板Template模式中,也是我们会无意中就会使用到的方法。将一些不变的公共的部分,提取出来方法父类当中,而对于每一个独立变化的点,我们将

    他们封装为抽象方法。

    image

    对于上述的一个模板,我们标记为红色的方法,打印结果,它有可能在控制台打印输出,或者放在浏览器中显示等等。对于这个点,它是可变的,也就是我们所说的

    它是抽象的。

    • 接口

    在策略Strategy模式当中,我们了解到它是对抽象的策略算法的调用。例如,超市里面计算商品的结果。

    可能部分商品打3,5折,也有可能不打折,或者还有很多种可能,而我们最终要得到商品的总价格。对于上述的策略,我们认为它是可变的,是抽象的。

    经典的策略模式代码可能如下:

    image

    对于不同的策略方法,我们只要再实现对应不同的IAction即可。

    在C#中,我们知道有个AOP的概念,俗称面向切面编程。如果我们不通过自定义的特性Attribute,或者第三方AOP方法拦截去实现,有没有办法实现呢。

    以下是我在项目中经常使用到的方法,懒人就是懒啊。微笑

    image

    • 事件

    我个人将它理解为解除两个类之间的耦合的最佳工具。还是用猫叫了,老鼠跑了来演示下。

    image

    在经典的观察者模式当中,或许也会存在一些耦合,仔细观察上述代码,两个类之间的没有任何一方类的调用,我们称它们没有任何的耦合。

    那么如何能让她们相互通知,那就是依赖于我们的事件。

    image

    代码虽然很简单,但是项目当中,大伙从来不知道如何妙用它。最近的项目看见同事经常在父窗体调用子窗体,然后子窗体需要刷新父窗体的控件的时候。

    直接在子窗体中将父窗体放入子窗体的构造函数中,直接产生了依赖。如果能在子窗体中声明一个事件,将它理解为要发送的消息。父窗体来实现这个接受消息的函数,是不是更加优雅点呢。微笑

  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/binfire/p/5043956.html
Copyright © 2011-2022 走看看