三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 开发 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> C# -> [面向对象杂谈]接口与多态 -> 正文阅读
 

[C#][面向对象杂谈]接口与多态

[面向对象杂谈]接口与多态 人总是很忙的,但是一个人就是一个人,不存在分身术。
假设有个人王大柱,他是光明中学的校长,还是光明村的村委会成员,同时还是他儿子的父亲。
那么我们可以这么想:王大柱是一个类的具体的实现对象,这类名叫“王大柱类”,而王大柱类实现了三个接口:“I光明中学校长”、“I光明村村委会成员”、“I父亲”。
画图如下:

那么我们可以称这三个接口为这个类的三个“身份”。
我们可以这样制造一个王大柱出来:

王大柱类 王大柱 = new 王大柱类();

此时,“王大柱”这个变量就代表了[王大柱类]的实例。这个没问题吧?
戏剧性的事情来了。
>“王大柱”在学校是什么身份呢?按正常的角度,他应该是校长的身份,管理学校的方方面面才对。
>“王大柱”在村委会是什么身份呢?按正常角度,他应该是村委会成员,参与村委会的会议和讨论。
>“王大柱”在家里是什么身份呢?按正常的角度,他应该是他儿子的父亲,在家带孩子陪老婆。
所以接下来的代码大家看仔细了:

// 王大柱要以校长身份去开师生会议
I光明中学校长  王校长 = 王大柱 as  I光明中学校长;
王校长.召开师生会议();

我们知道,接口可以定义变量,也可以实例化对象(用于实例化的类必须实现该接口)。
现在,我用I光明中学校长这一身份,去定义“王校长”这个变量,或者说定义这张工作证,有了这张工作证,“王大柱”这个人,身份就会转化为"王校长",但是"王校长"还是王大柱,并不是第二个人。这就是说,我在上面用关键字new的“王大柱”,在内存(地球)中只有一个对象(人),接口定义的"王校长"这个变量,仅仅指向了wdz这个人,给了他一层校长的身份而已。
如下图:
 

熟悉C++指针/内存堆栈的同学一定不陌生,左边就是堆,右边就是栈,堆是真正的数据,而右边的“王大柱”、“王校长”,只是一些变量,真正的数据和变量之间的关系,在这里就是引用关系。
但是接口编程又有一个不同的特点,也是极为重要的一个特点:接口有自己的成员变量。
换句话说,“王大柱”在家里,不是学校的“校长”,校长给老师和主任发通知的功能就没了呀!难道向老婆儿子发命令?找打。
这就是身份的问题,接口可以为堆上的对象提供不同的身份,实现不同的功能。
再来看下面的代码:

// 王大柱要去开会
I光明村村委会成员 王委员 = 王校长 as I光明村村委会成员;
王委员.到村里开会();

// 王大柱要回家做饭给儿子吃
I父亲 王爸爸 = 王委员 as I父亲;
王爸爸.给儿子做饭();

读者可以自己想象了吗?
这就是接口多态,实际上,真正的编程里还有更复杂的接口与抽象类继承关系,以后再写吧。
附:OOP(面向对象编程)三大特征
封装、继承、多态
这三个特征一直持续到编程的“设计模式”及以后更高层次的编程中。
  C# 最新文章
重构手法之Introduce Explaining Variable(
C#读取固定文本格式的txt文件
简单实现 C# 与 Javascript的兼容
重构手法之Replace Temp with Query(以查询
C# 使用AngleSharp 爬虫图片
重构手法之Extrct Method(提炼函数)
C#方法中的ref和out
读书笔记
C#练习
改善C#程序的N个建议(1
上一篇文章      下一篇文章      查看所有文章
加:2017-06-17 01:41:58  更:2017-06-17 01:42:00 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年11日历
2017-11-20 5:47:47
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库