C# 我理解的接口、抽象类、以及事件
一、摘要
面试中无数次被问及到什么是接口,什么是抽象类,接口和抽象类有什么区别?什么是委托,什么是事件。
请写出猫叫了,老鼠跑了的例子。。。。。
这些东西对于一些初学者来说可能还真的有点搞不懂,对于一般工作5,6年以上的人来说,实在不屑一提,
二、个人理解
类:对事物或者某一个物体的概括描述
抽象类:对于一类事物的高度抽象。可以实现任何接口
接口:对方法的一组抽象提取。
事件:暴露给关联类的自定义实现,用于解除两个类之间的耦合。
- 抽象类
在基于模板Template模式中,也是我们会无意中就会使用到的方法。将一些不变的公共的部分,提取出来方法父类当中,而对于每一个独立变化的点,我们将
他们封装为抽象方法。

对于上述的一个模板,我们标记为红色的方法,打印结果,它有可能在控制台打印输出,或者放在浏览器中显示等等。对于这个点,它是可变的,也就是我们所说的
它是抽象的。
- 接口
在策略Strategy模式当中,我们了解到它是对抽象的策略算法的调用。例如,超市里面计算商品的结果。
可能部分商品打3,5折,也有可能不打折,或者还有很多种可能,而我们最终要得到商品的总价格。对于上述的策略,我们认为它是可变的,是抽象的。
经典的策略模式代码可能如下:

对于不同的策略方法,我们只要再实现对应不同的IAction即可。
在C#中,我们知道有个AOP的概念,俗称面向切面编程。如果我们不通过自定义的特性Attribute,或者第三方AOP方法拦截去实现,有没有办法实现呢。
以下是我在项目中经常使用到的方法,懒人就是懒啊。

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

在经典的观察者模式当中,或许也会存在一些耦合,仔细观察上述代码,两个类之间的没有任何一方类的调用,我们称它们没有任何的耦合。
那么如何能让她们相互通知,那就是依赖于我们的事件。

代码虽然很简单,但是项目当中,大伙从来不知道如何妙用它。最近的项目看见同事经常在父窗体调用子窗体,然后子窗体需要刷新父窗体的控件的时候。
直接在子窗体中将父窗体放入子窗体的构造函数中,直接产生了依赖。如果能在子窗体中声明一个事件,将它理解为要发送的消息。父窗体来实现这个接受消息的函数,是不是更加优雅点呢。
C# 我理解的接口、抽象类、以及事件的更多相关文章
- 我对面向对象设计的理解——Java接口和Java抽象类
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- 一篇文章让你彻底理解java中抽象类和接口
目录 1.我所理解的抽象类 2.我所理解的接口 3.抽象类和接口本质区别 相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方.往往这二者可以让初学者摸不着头脑,无论是在实际编 ...
- 深入理解Spring的容器内事件发布监听机制
目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监 ...
- OpenJDK源码研究笔记(十四):三种经典的设计方法,接口,接口-抽象类-具体实现类,接口-具体实现类
在研究OpenJDK源码过程中,我发现常用的设计方法就是2种:接口,接口-抽象类-具体实现类 . 在一些其它开源框架和业务开发中,经常存在着第3种设计,接口-具体实现类. 1.只有接口,没有实现类. ...
- Golang 入门系列(四)如何理解interface接口
前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友,可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category ...
- 在java.util中有EventListener接口:所有事件监听者都要实现这个接口。
在java.util中有EventListener接口:所有事件监听者都要实现这个接口. java.util中有EventObject类:所有的事件都为其子类. 事件范例在\CoreJava\Gi ...
- java 接口 继承 接口 抽象类 继承 实体类
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 接口 可以 继承 接口 抽象类 可以 实现 接口 抽象类 继承实体类 需要 实体类 有 ...
- vue项目构建实战基础知识:SPA理解/RESTful接口介绍/static目录配置/axios封装/打包时map文件去除
一.SPA 不是指水疗.是 single page web application 的缩写.中文翻译为 单页应用程序 或 单页Web应用,更多解释请自行搜索. 所有的前端人员都应该明白我们的页面的 u ...
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 答:接口可以继承接口.抽象类可以实现(implements)接口,抽象类 ...
- 理解Hybrid接口的应用
Hybrid接口既可以连接普通终端的接入链路又可以连接交换机间的干道链路,特允许多个vlan的帧通过,并可以在出接口方向将某些vlan帧的标签剥掉. 通过配置Hybrid接口,能过实现对VLAN标签的 ...
随机推荐
- 使用MarkdonPad2学习心得
使用MarkdonPad2学习心得 心得体会 自从接触了娄老师的课程后,逐渐的适应了使用博客园.实验楼等网络学习资源学习课程,虽说和传统的授课方式有些不同,但毕竟我们就是与电脑与网络打交道,所以在学习 ...
- Scrum敏捷精要
本文抽取Scrum中的一些重要思想和概念,对Scrum敏捷执行的主题流程进行精要的介绍. 一.基本思想 个体和互动 高于 流程和工具 工作的软件 高于 详尽的文档 客户合作 ...
- Android响应式界面开发要点
现在很多项目需要到达同一个Apk既可以在Phone上跑也尅在tablet上跑,即界面要适应不同尺寸和类型的需要而自动调整.这个即为响应式设计.在web开发商响应式设计已经是个常谈的内容了,而对于and ...
- 怎样写 OpenStack Neutron 的 Extension (二)
接着之前一篇文章,再来谈谈 Extension 的具体实现问题.我使用的是本地数据库加远程API调用的方法,所以先要定义一下数据库中 myextension 如何存储.首先,我们可以在自己的 plug ...
- grootJs的vm结构
按看这段代码生成的vm groot.view("myview", function (vm, ve) { vm.say = "hello word!"; }) ...
- [工具类]将时间转换为unix时间戳格式
写在前面 由于在数据库中存的时间有时间戳格式的数据,在解析以及保存的时候,就需要考虑到数据格式的兼容性问题.看到数据库中的时间字段基本上都是以时间戳格式存储的,没办法,只能将时间进行转换了,考虑到其他 ...
- AngularJS - 快速入门
刚开始接触时总是去wiki或各种百科以了解一番. 它们会告诉我一些MVVM.双向数据绑定.依赖注入等等名词,觉得这些名词好上档次,然后我很可能就不打算用这个东西了. AngularJS是什么? 完全使 ...
- JAVA 注解的几大作用及使用方法详解【转】
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- java和linux的编码
最近要使用中科院计算所的关键词工具NLPIR,用java调用,在windows下测试后放到linux下跑,就发现会有乱码. windows下默认是GBK,linux下是utf-8,因此在意料之中(尽管 ...
- Tomcat_修改代码后tomcat是否需要重启
在修改一个类时,如果没有修改到已经贮存于虚拟机的实例,在你重新编译后,发布至classes,都不需要重启. 怎样才叫已经贮存于虚拟机的实例呢: 1.成员变量 2.类名称 3.方法名 ………… 如果 ...