今天继续分享我的阅读《LEARNING HARD C#学习笔记》知识点总结与摘要二,仍然是基础知识,但可温故而知新。

七.面向对象

三大基本特性:

封装:把客观事物封装成类,并隐藏类的内部实现细节,仅开放相关的访问属性、方法等

继承:通过继承可以复用父类的代码;

多态:1.允许将子对象赋值给父对象,2.同方法在不同的对象上有不同的实现方式;

子类初始化顺序:初始化类的实例字段à调用父类构造函数à调用子类构造函数;

重写:父类声明为virtual或abstract的类成员(属性、方法),在子类继承时必需使用override关键字进行重实现(虚方法视情况可不重写)。重写一般发生在父类与子类之间;

注意:虚拟成员或抽象成员不能是私有的,且重写时不能改变其访问修饰符(即:虚拟成员或抽象成员若为public,重写时不能改为protected,反之一样是不行的

重载:相同的方法名称不同的形参类型或个数(注意:返回值类型不能做为重载的依据);

隐藏(覆盖):子类使用new关键字定义父类同名的方法,即可隐藏父类同名的方法,隐藏后,子类外部不能直接访问父类隐藏的方法,若需访问,必须将子类型强制转换成父类型才能正常访问;

所有类的最高层父类都是object类,即所有类都间接派生于object类;

八.接口

  1. 仅可定义属性、事件、方法、索引器4类成员,且定义的成员不能添加任何访问修饰符,因为默认都为public,子类继承并实现这些成员时也必须定义为public;
  2. 支持多重继承,可继承多个接口,但不能继承类;
  3. 可显式实现接口,显示实现的成员默认为私有private,不能添加任何访问修饰符,故不能通过类的对象进行访问,若需访问,则必需将对象的类型强制转换为相应的接口才能正常访问,这与类的隐藏方法类似,显示实现接口方法的语法:接口.接口方法(形参表表) { ..方法实现…}

九.接口与抽象类的区别

1.接口定义关键字为:interface,而抽象类定义关键字为:abstract

2.接口不能定义字段、构造函数、析构函数,不能使用任何访问修饰符(包含static,sealed,virtual等),而抽象类不受限制;

3.接口允许多重继承,而抽象类仅支持单继承;

4.接口一般用来定义通用的行为规范,指示所有继承的类必需具备这些行为,表现为:Can Do,而抽象类一般用来对一类对象的抽象进行描述,指示所有继承的类都属于该抽象类,并具备抽象类的所有特性,表现为:IS;

十.委托

1.委托是一种类型delegate,可以理解为对方法的包装,它使得可以将方法作为参数被传递,相当于C++中的函数指针;

2.委托的定义与方法的定义类似,只是多了一个delegate关键字,定义的语法如下:

访问修饰符 delegate 返回类型 委托名(形参列表)

3.实例化委托必须保证被委托的方法的方法签名(形参个数、顺序、类型)以及返回类型与委托定义相同;

4.委托链:+=表示添加方法到委托链中,-=表示从委托链中移除方法;

事件也是一种委托类型,定义时必需先定义委托类型,然后才能定义事件,事件的定义语法如下:

访问修饰符 event 委托类型 事件名;

事件通过+=订阅事件,-=取消订阅

十一.参数传递

默认情况下,值类型在方法中是按值传递,即将实参的值复制给形参,两者中任何一个的值改变不会改变另一个的值;

引用类型在方法中是按引用传递,即实参将变量的的引用地址传递给形参,两者均指向同一个对象,任何一个的值改变,则另一个也会变化;(字符串虽为引用类型,但由于其特殊性,默认情况下,在方法中是按值传递)

通过添加rel或out关键字来显式实现参数(不论任何类型)按引用类型传递,其中使用rel关键字时,实参必需先初始化,而out关键字则没有此要求;

十二.泛型

泛型代表的就是通用类型,它可以代表任意类型,使类型参数化,从而实现同一个方法可以操作不同的类型的目的;

泛型解决了类型之间装箱与拆箱的问题;

浮型约束采用where 关键字,如:where T:class,约束是为了将泛型的类型具体化。

约束种类如下:

引用类型约束(T:class),确保传递的类型实参必须为引用类型;

值类型约束(T:struct),确保传递的类型实参必须为值类型(不包括可空类型);

构造函数约束(T:new()),确保传递的类型实参必须有公共的无参构造函数,此约束适用所有非静态、非抽象的包含无参构造函数的类型(值类型与引用类型),如果有多个约束,则此约束必须放在最后面;

转换类型约束(T:基类名,T:接口名,T:U),确保传递的类型实参必须是继承该约束的类或接口;

组合约束,包含多个约束;

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要二的更多相关文章

  1. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要系列文章索引

    从发表第一篇文章到最后一篇文章,时间间隔有整整一个月,虽只有5篇文章,但每一篇文章都是我吸收<LEARNING HARD C#学习笔记>这本书的内容要点及网上各位大牛们的经验,没有半点废话 ...

  2. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三

    最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些 ...

  3. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要一

    本人有幸在Learning Hard举行的整点抢书活动<Learninghard C#学习笔记>回馈网友,免费送书5本中免费获得了一本<LEARNING HARD C#学习笔记> ...

  4. Deep learning with Python 学习笔记(11)

    总结 机器学习(machine learning)是人工智能的一个特殊子领域,其目标是仅靠观察训练数据来自动开发程序[即模型(model)].将数据转换为程序的这个过程叫作学习(learning) 深 ...

  5. Deep learning with Python 学习笔记(10)

    生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...

  6. Deep learning with Python 学习笔记(9)

    神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练,有点类似于扔一架纸飞机,一开始给它一点推 ...

  7. Deep learning with Python 学习笔记(8)

    Keras 函数式编程 利用 Keras 函数式 API,你可以构建类图(graph-like)模型.在不同的输入之间共享某一层,并且还可以像使用 Python 函数一样使用 Keras 模型.Ker ...

  8. Deep learning with Python 学习笔记(7)

    介绍一维卷积神经网络 卷积神经网络能够进行卷积运算,从局部输入图块中提取特征,并能够将表示模块化,同时可以高效地利用数据.这些性质让卷积神经网络在计算机视觉领域表现优异,同样也让它对序列处理特别有效. ...

  9. Deep learning with Python 学习笔记(6)

    本节介绍循环神经网络及其优化 循环神经网络(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息. ...

随机推荐

  1. Jexus V5.8.0正式发布:跨平台的ASP.NET WEB服务器

    Jexus Web Server V5.8.0 已于今日(12月10日)正式发布,下载地址:http://www.linuxdot.net/. Jexus v5.8.0有如下的更新: 1,为反向代理增 ...

  2. Guava-Optional可空类型

    接上篇Guava之Joiner和Splitter,本篇将介绍Guava的另外一个有用的对象Optional,这在Java中Google Guava首先给我们提出可空对象模型的.在其他语言如c#这是已经 ...

  3. 手把手教你用python打造网易公开课视频下载软件1-总述

    写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...

  4. 基于Css反射形自触发事件,优化你的延时事件

    昨天听w3ctech分享时候,说道orientationchange在不同OS和版本中,存在兼容问题,很多时候触发时候都没有渲染结束,开发同学一般都是基于setTimeout一段时间之后,在去执行具体 ...

  5. HyperDock,让Mac的窗口飞

    三年前写了一篇文章,介绍了Windows 7下的Aero效果,其实最终是想引出来写Mac OS上能产生类似功能的HyperDock应用程序,可惜这一拖,就拖到连Windows 10都快要发布了.没有关 ...

  6. 字符串查找String.IndexOf

    String.indexOf的模拟实现,没想象中有多么高深的查找算法,就是最普通的遍历查找 思路:先找到第一个相同的字符,然后依次比较后面的字符,若都相等则表示查找成功 /** * 查找字符串patt ...

  7. Azure China (10) 使用Azure China SAS Token

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China 注意:本文介绍的是Azure China Storage Priva ...

  8. Office 2016 正式发布——新特性预览

    今天微软又发生了一件大事!Windows Office 2016正式发布,这标志着Windows Office 又达到了一个新的里程碑! 全新的Office 发布为Office 365 用户带来了新的 ...

  9. vim添加或删除多行注释

    一.多行注释的添加 1. vim的命令模式下(ESC 进入命令模式): 2. 按CTRL+V进入可视化模式(VISUAL BLOCK): 注意:vim命令模式下v进入的是visual模式,ctrl+v ...

  10. java gc的考察

    参考http://www.cnblogs.com/mazj611/p/3481610.html 看了很多博客.书, 仍然有所不懂.很多看过即忘记.实在要不得. 我们可以通过jstat获取gc情况 js ...