《你必须知道的.NET》第1章学习笔记

面向对象中几个最基本的概念:类,对象,继承,封装和多态。

对象的出生,只是完成了对必要字段的初始化,其他数据要通过后面的操作来完成,如:属性的赋值,通过方法获取必要信息等。

对向可以分为值类型和引用类型。其分类依据是在运行时在内在中的位置,值类型位于线程的堆栈,而引用类型位于托管堆。两者之间可以发生类型转换,这个过程叫做装箱与拆箱。

对对象的使用,就是外界对过调用对象中的方法与对名交互,从而达到改变对象状态信息的过程。

对象的生存环境是CLR,CLR提供了对象赖以生存的托管环境,制定一系列规则,称之为语法,在对名世界里建立起真正的秩序。面向对象的编程是以接口方式来抽象变化,从而形成体系。

访问修饰符:

public:成员访问没有限制(无向)
protected:只有当前类或当前类的派生类可以访问(纵向)
internal:访问仅限于当前程序集(横向)
private:访问仅限于当前类(点向)
protected internal:protected和internal的交集(纵向和横向)

同一方法,在不同的情况下,实现不同的操作,这就是多态的魅力。对名是多态主要包括两种情况:1,接口实现;2,抽象类实现。

GC管理所有的托管对象,当内存回收执行时,GC检查托管堆中不再被使用的对象(没有任何引用的对象),并执行内在回收操作。

关于继承

继承是面向对象三大要素之一(另外两大是封装和多态),是面向对象中类与类之间的关系,通过继承,子类获得父类的成员,子类也可以扩展父类的成员。继承机制体现了面向对象技术中的复用性,扩展性和安全性,这面向对象开发与模块开发的基本技术。

继承按照实现方式一般可分类为:1,实现单继承;2,接口多继承

对于继承的可见性问题,在.NET中是通过访问权限(即访问修饰符)来实现控制的。

在子类中实现父类中的虚方法,称之为方法的动态绑定,这是面向对象的另一特性--多态的基本机制。

接口继承的优点:通过接口继承,实现了对象与行为的分离,

继承让我们轻松实现了代码的复用与扩展,同时,通过重载(overload,同名不同参不同实现),覆写(override,同名同参不同实现),接口实现等方式实现封装变化,隐藏私有信息等面向对象的基本规则。

在子类中实现对父类的扩展和改写,主要有两种方式:1,在子类中添加新的方法(扩展);2,对父类中方法的重新改写(改写,即覆写)

对象的创建会最先创建其最高一级的祖先类的字段,依次创建其它各级父类字段,最后创建自身字段。其次中方法表的创建,方法表的创建是类第一次被加载到AppDomain时完成的,在对象创建时只是将其附加成员的TypeHander指向方法列表在LoaderHeap上的地址,将对象与其动态方法关联起来。因此是先有方法表再有对象的。方法表的创建也是父类在先子类在后。

明确以一几点:

继承是可传递的
子类可以调用父类的方法和字段,反之不然
虚方法实现覆写操作
子类不光继承父类的公有成员,同时也继承了父类的私有成员,只是在子类中不能被访问
new关键字在虚方法继承中的阻断作用

关注对象原则:调用子类还是父类的方法,取决于创建的对象是子类对象还是父类对象,而不是它的引用类型。
执行就近原则:对于同名字段或方法,编译器按照其顺序查找来引用,即先访问离它创建近的。

实现继承和接口继承:

抽象类适合于有族层概念的类间关系,而接口最适合于为不同类提供通用功能
接口着重于CAN-DO关系类型,而抽象类型则偏重于IS-A式的关系
接口多用于定义对象的行为,抽象类多用于定义对象的属性
如果预订会出现版本问题,可以创建抽象类
值类型只能实现接口,不能继承类

聚合还是继承?

继承关系的耦合度较高。
聚合关系可以分为三种:无,共享和复合,耦合度一次提高,但还是没有继承的高,可以说耦聚是一种HAS-A关系。
依赖关系表明当类2被修改,也会影响到类1。

面向对象程序设计的基本原则是:实现多聚合,少继承,低耦合,高内聚的类间关系。

继承的高耦合度会给编程带来一定的不良反应,避免的方法有:将对象和行为分离抽象出接口,以聚合代替继承实现更柔性的子类需求等。

Adapter模式简介:

Adapter模式主要是将一个类的接口转换为另一个接口,在不改变原有体系的条件下应对新的需求变化,通过引入新的Adapter类来完成对既存体系的扩展和改造。
Adapter模式的主要实现方式:
1,类的Adapter模式:通过引入新的类型来继承原有类型,同时实现新加入的接口方法。
2,对象的Adapter模式:能过聚合方式实现对原有系统的扩展。

一些所谓有规则:
密封类不可以被继承(什么是密封类)
继承关系中关注的是共性,共性是层次复用的基础,多态着则眼于特性,而特性是系统扩展的基点
实现单继承,接口多继承
面向对象程序设计的基本原则是:实现多聚合,少继承,低耦合,高内聚的类间关系
控制继承的层数

继承是.NET运行机制的基础技术之一,一切皆为对象,一切皆于继承。

做到“理解继承,关注封装,品味多态,玩转接口”是理解面向对象的起点。

关于封装:

封装是面向对象三要素之一,它为程序设计提供了系统与系统,模块与模块,类与类相互交互的实现手段。封装隐藏类内部的具体实现,对外提供统一的访问接口来操作内部数据成员。

通常系统需求中描述的核心名词可以抽象为类,而对这些名词驱动的动作,则相应的抽象为方法。

字段:通常为private,表示类的状态信息。封装的第一个原则就是字段定义为private。
属性:通常为public,表示类的对外成员。属性通过get,set访问器来实现对属性的读写控制,实质是自动生成get_属性名和set_属性名的方法。
索引器:它是一种含参属性。
方法:方法表示类的行为,行为可分为内部行为(private)和外部行为(public),外部行为提供外部交互的接口。封装的另一个原则就是有效的保护内部数据和有效的暴露外部行为一样重要。

封装的原则:
尽可能调用类的访问器而不是成员
内部私有部分可以任意更改,但要确保外部接口部分的稳定
用属性来实现对字段的读写控制
类的封装是通常访问权限来实现控制的
封装的精华是封装变化,将类中变化频繁的部分封装为独立的部分,有利于充分的软件复用和系统柔性

关于多态:

多态是指同一操作的不同实例,产生不同运行结果的机制。多态也是面向对象三要素之一。

多态根据实现方式可分为:
基类继承式,在父类中声明一个虚方法,在不同子类中可以有不同的实现(IS-A式的)
接口实现式,以接口约定的方式规定子类中方法的实现,具有更高的灵活性(CAN-DO式的)

多态的运行机制:

.NET的动态绑定机制成就了面向对象的多态机制。
静态绑定,在编译时就确定关联,一般以方法的重载(overload)来实现。
动态绑定,又叫晚期绑定,是在运行期间通过检查虚拟方法表来确定动态关联的方法,一般以继承和虚方法(virtual)在子类中重写(override)虚方法来实现。将子类中共有的但却容易变化的特征抽取为虚方法,并在父类中定义,而在子类中重写。

关于接口:

接口是打开设计精要之门的钥匙。接口是一种约束规则,表明能够做什么(CAN-DO),不同的实现对象对同一操作可以有不同的实现方式。

基于接口的设计成就了面向对象思想中很多了不起的设计模式。

接口实质上是一种定义子抽象方法的类,该类仅提供了方法的定义,其实现由该接口的实现类来完成。实现类中对接口方法的实现实质就是一种重写(override)。因此,从某种意义上来说:接口的本质是一个不能实例化的类,接口的实现机制就是多态。

接口的原则:
接口应该是一个个具有单一功能的小接口,通过接口的组合实现类的行为扩展。
禁止为已发布的接口添加新的成员。
接口不能实例化,接口的成员隐式为public。

良好的程序是面对抽象的编程而不是面向具体的编程。

《完》

转载于:https://www.cnblogs.com/luckeryin/archive/2009/01/05/1369770.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 PGO 提升 .NET 程序性能

引子.NET 6 开始初步引入 PGO。PGO 即 Profile Guided Optimization,通过收集运行时信息来指导 JIT 如何优化代码,相比以前没有 PGO 时可以做更多以前难以完成的优化。下面我们用 .NET 6 的 nightly build 版本 6.0.100-rc.1.21377.6 来试试新的 PGO。PG…

不作死就不会死,盘点那些死于自己发明的发明家

全世界只有3.14 %的人关注了青少年数学之旅还有他们死于自己的发明发明呼吸器:缺氧死亡 1772年,法国人希厄尔弗莱米奈特发明了可用于潜水的循环式再呼吸器,让呼出的气体实现循环。这是世界上第一个自持呼吸装置。不幸的是,弗莱米奈…

CIO们对数据中心虚拟化心存的六大疑虑

本文摘自:[url]http://industry.ccidnet.com/art/3915/20070428/1072803_1.html[/url] 巴塞罗那超级计算中心 数据中心虚拟化正在势不可挡地迅猛发展,据IDC预测,到2009年,虚拟化市场将在全球范围内将增长150亿美元。有专家预言&am…

启动Tomcat一闪而过解决

打开apache-tomcat-6.0.32/bing/catalina.bat在首行添加: set JAVA_HOMEC:\Program Files\Java\jdk1.6.0_07 就可以了。

android gdb 远程调试工具,Android下用gdb远程调试办法

Host: ubuntuTarget: Android ICS1. 将gdbserver和gdbclient分别放入target和host。两者都可在android源代码的prebuilt目录下找到。2. 在Target上启动gdbserver,在adb shell中执行$ /path/to/gdbserver :1111--attach PID其中PID为想要debug程序的进程号&#xff0…

如何在Domino中使用文本文件注册用户

具体的步骤如下: 1。先用以下的格式创建一个文本文件(每个用户一行): ZhangSan;;;;passw0rd;e:\id\603server;zhangsan.id;603server/r6domain;;zhangsan.nsf;;;;;;;;;;;; LiSi;;;;passw0rd;e:\id\603server;lisi.id;603server/r6domain;;lis…

C# 对接微信支付时生成符合 RFC3339 标准的日期时间字符串

rfc3339 是一种包含时区信息的字符串标准格式。格式为YYYY-MM-DDTHH:mm:ssTIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(08:00表示东八区时间&…

盘点那些世间顶级直男hhhhhh | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】

android的单选按钮xml语法,android 控件 单项选择(RadioGroup,RadioButton)

1、继承关系和子类:2、定义:RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器3、XML重要属性:4、重要方法:5、实战:布局文件android:layout_width"wrap_content"andr…

.net项目开发工具(v2.0)功能完善专帖

首先,感谢你对本软件的支持。如果你有好的建议和要求,请记录于此,谢谢! 原文:http://www.cnblogs.com/mrhgw/archive/2007/06/04/770278.html?Pendingtrue#Post

CVE(Common Vulnerabilities and Exposures通用漏洞披露)笔记

产生背景:目前实时入侵检测和漏洞扫描评估基于的主要方法还是“已知入侵手法检测”和“已知漏洞扫描”,即基于知识库的技术,因此决定一个IDnA(Intrusion Detection and Assessment 实时入侵检测和漏洞扫描评估)技术和产…

[006] 了解 Roslyn 编译器

维基百科对编译器的解释是:编译器是一种程序,它将某种编程语言编写的源代码(原始语言)转换成另一种编程语言(目标语言)。编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。在 .NET 平台中&a…

arcengine 将地图文件保存为图片(包括各种图片格式)

1,最近做了个地图文件输出图片的功能,思想主要就是利用MapControl的ActiveView中的out方法: 2代码如下:欢迎交流指正 1 SaveFileDialog m_save new SaveFileDialog();2 m_save.Filter "jpeg图片(*…

这个让人看跪了的设计!实力证明,数学才是世界的最终boss!

全世界只有3.14 %的人关注了青少年数学之旅最近,有不少购买了年度数学艺术礼盒《数学之旅闪耀人类的54个数学家》的小伙伴,已经按捺不住内心的激动:但超模君秉承着“慢工出细活”的态度,多次亲自到工厂对扑克牌的细节进行把关&…

android 版本28 通知栏图标,【专题分析】应用图标、通知栏适配

# 应用图标适配## 新规范Android8.0开始,应用程序的图标分为了两层:前景层和背景层,前景用来展示应用图标的Logo,背景用来衬托应用图标的Logo,(背景层在设计的时候只允许定义颜色和纹理,但是不能定义形状)。…

win2000/xp/2003 错误代码

10009 0x2719 提供的文件句柄无效。 10013 0x271D 以一种访问权限不允许的方式做了一个访问套接字的尝试。 10014 0x271E 系统检测到在一个调用中尝试使用指针参数时的无效指针地址。 10022 0x2726 提供了一个无效的参数。 10024 0x2728 打开的套接字太多。 10035 0x2733 无法立…

[007] 详解 .NET 程序集

上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件。按照之前讲的 .NET 执行模型的顺序,这一篇我具体讲讲程序集。1什么是程序集我们编写的 C# 代码经过编译会生成 .dll 或 .exe 文件…

ueditor 编辑器再thinkphp中使用 解决转义问题

在前台common.php文件中加入下面的函数就可以解决了 <?php //取消thinkphp里面的转义 if (get_magic_quotes_gpc()) {function stripslashes_deep($value){$value is_array($value) ?array_map(stripslashes_deep, $value) :stripslashes($value);return $value;}$_POST…

轻松掌握使用 SQL Server 浏览器,解决SQL Server 2005跨网段不能连接问题

SQL Server Browser 作为 Windows 服务在服务器上运行。SQL Server Browser 侦听对 SQL Server 资源的传入请求&#xff0c;并提供计算机上安装的 SQL Server 实例的相关 信息。SQL Server Browser 可用于执行下列三种操作&#xff1a; 浏览可用服务器   连接到正确的服务器…

21岁就破解困扰人们300年难题的天才,却一生坎坷,怀才不遇,至死还得不到认可...

这不是难题本来就是无解何谓数学&#xff1f;数学家Eduardo曾这样回答“数学是永恒&#xff0c;是真理&#xff0c;是一切的答案。”回首往昔数学始终伴随我们左右纵横交错的几何、繁琐复杂的运算难以求解的方程、无从下手的猜想......尽管在数学道路上有多么的坎坷、崎岖、变化…