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

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

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

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

对象的生存环境是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

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

  1. 数学建模matlab imread,《matlab数学建模方法与实践》第三章 数据的处理

    3.1数据的获取 3.1.1从Excel中读取数据 a= xlsread('路径',n(sheetn),'A(n-1):Bn(读入的数据范围)') 3.1.2从TXT中读取数据 3.1.2.1.1 同 ...

  2. matlab数学建模方法与实践 笔记1:快速入门

    入门案例 1.导入数据 2.数据探索 3.多项式拟合 4.发布功能 5.数据类型 6.全部代码 代码在Cha2文件夹下 1.导入数据 2.数据探索 3.多项式拟合 4.发布功能 5.数据类型 6.全部 ...

  3. matlab快速入门案例及常用技巧 | 《matlab数学建模方法与实践(第三版)》学习笔记

    目录 快速入门案例: 解决流程: 具体实现: 一.获取数据 二.数据探索和建模 三.分享结果 常用技巧 一.常用标点功能 二.常用操作指令 三.指令编辑操作键 四.matlab数据类型 五.开发模式 ...

  4. 《MATLAB数学建模方法与实践(第3版)》第2章学习笔记

    第2章 MATLAB数学建模快速入门 2.1 MATLAB快速入门 2.1.1 MATLAB概要 MATLAB是矩阵实验室(Matrix Laboratory)的缩写.MATLAB的基本数据单元是矩阵 ...

  5. matlab建模总结,MATLAB 数学建模方法与实践(第 3 版)

    本书从数学建模的角度介绍了 MATLAB 的应用,涵盖了绝大部分数学建模问题的 MATLAB 求解方法.全书共 5 篇.第一篇是基础篇,介绍基本概念,包括 MATLAB 在数学建模中的地位.数学模型的 ...

  6. 《MATLAB数学建模方法与实践(第3版)》第1章学习笔记

    第1章 绪论 CUMCM(中国大学生数学建模竞赛)中大部分使用MATLAB. 数学建模中最重要的是建模和求解. 1.1 MATLAB再数学建模中的地位 求解环节至关重要,MATLAB是求解算法最有利的 ...

  7. 数学建模——皮尔逊person相关系数VS斯皮尔曼spearman相关系数学习笔记

    皮尔逊 person相关系数和斯皮尔曼spearman等级相关系数,它们可用来衡量两个变量之间的相关性的大小,根据 数据满足的不同条件,我们要选择不同的相关系数进行计算和分析(建模论文中最容易用错的方 ...

  8. matlab数学建模可应用到第几章,《MATLAB在数学建模中的应用(第2版)》

    <MATLAB在数学建模中的应用(第2版)> 卓金武 (编者)) 基本信息 •出版社: 北京航空航天大学出版社; 第2版 (2014年9月1日) •丛书名: MATLAB开发实例系列图书 ...

  9. matlab自动排课,matlab数学建模排课

    李青豪 15069574447 孙珂 15226038269 李延乐 18317821851 吕良军 2014 年黄河水院数学建模竞赛 题目 B 题:大学排课问题 摘 要: 排课方案的最终形式,一般是 ...

  10. 【MATLAB数学建模算法代码(六)之遗传算法】

    MATLAB数学建模算法代码(六) 遗传算法: 根据自己需要修改参数即可!!! %遗传算法主程序 %Name:genmain05.m function genmain() tic; clear clf ...

最新文章

  1. 修改Java-source版本
  2. [DB那些事]数据库加密
  3. 用户接口设计的20个原则
  4. 【沟通的艺术】你能勾住你的听众么?
  5. js实现日期转换方法
  6. bzoj1037 [ZJOI2008]生日聚会Party 插数dp
  7. python求高阶导数_TensorFlow:计算Hessian矩阵(和高阶导数)
  8. mysql 内联和外联的区别_内联查询与外联查询
  9. MySQL数据库与Oracle数据库在存储中文字符以字节或字符存储的区别
  10. python 表白程序代码_程序员如何实现表白代码
  11. 马尔科夫蒙特卡洛算法(MCMC)
  12. ElasticSearch搜索引擎:数据的写入流程
  13. swfobject简单封装
  14. 【Axure原型分享】自动编号的中继器表格
  15. 图文二维码怎么制作?如何将图文变成二维码?
  16. 基于Matlab的数字水印设计—基于DCT域的水印算法实现
  17. 马来西亚数字自由贸易区的发展实践
  18. 彻底禁用Microsoft Compatibility telemetry
  19. SkinSharp(Skin#)软件换肤库!
  20. python求均值 有限存储量_python计算均值

热门文章

  1. ux设计中的各种地图_UX设计中的格式塔原理
  2. 算法精讲:分享一道值得分享的算法题
  3. CISCO网络故障排错命令总结分享
  4. SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁
  5. 步入三十岁前的总结:看似经历很多得到很多,但,实际却一无所得
  6. 【九章算法免费讲座第一期】转专业找CS工作的“打狗棒法”
  7. CentOS搭建Sqoop环境
  8. ​ArduinoYun教程之ArduinoYun硬件介绍
  9. 模板-1-模板类的特化
  10. 鼠标手势识别 [Flash]