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

    一、摘要

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

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

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

    二、个人理解

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

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

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

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

    • 抽象类

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

    他们封装为抽象方法。

    image

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

    它是抽象的。

    • 接口

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

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

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

    image

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

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

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

    image

    • 事件

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

    image

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

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

    image

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

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

  • 相关阅读:
    对于基础资料的关联操作
    单据关联关系记录
    单据转换插件中新增行
    APK签名校验绕过
    android 安全需要关注
    安卓从业者应该关注:Android 6.0的运行时权限
    让阿里云的Centos,PHP组件 ImageMagick支持png和jpeg格式
    cocos2d-x 常规库的图文件配置
    cocos2d-x 添加 libLocalStorage 库...
    cocos2d-x3.9 默认是 gnustl_static 配置,但是 这个库缺少c++的基础功能... c++_static 功能全面些
  • 原文地址:https://www.cnblogs.com/binfire/p/5043956.html
Copyright © 2011-2022 走看看