《C#从现象到本质》读书笔记(四)第4章C#和面向对象
《C#从现象到本质》读书笔记第4章C#和面向对象
面向对象程序设计OOP
面向对象的三大特性是:
1)封装:类可以将它的成员私有化,只暴露它认为应当暴露给外界的成员。通过私有化成员,外界不必了解这些成员的实现细节。
2)继承:子类可以继承父类,从而简单地自动实现父类所有的成员,并增加自己的成员。通过方法的重写和隐藏,子类还可以修改父类的行为。
3)多态:实际上是继承的一种特殊情况,此时,子类一定会复写父类的行为(通常父类没有提供代码)。接口和抽象类都是多态的体现。
通过继承和多态,增强代码的复用功能。通过封装避免不合理的访问。
在创建子类对象时,子类的方法表包括了父类的虚方法和指向父类方法表的指针,使得子类可以调用父类的方法。另外,如果存在方法的重写,则会用子类的方法替代掉父类的方法。
子类型可以使用override显式地重写该方法,或者使用new隐藏该方法。
class Program
{
static void Main(string[] args)
{
A a=new A();
a.NormalMethod();//A.NormalMethod
a.NewMethod();//A.NewMethod B b=new B();
b.NormalMethod();//B.NormalMethod"
b.NewMethod();//B.NewMethod A a2=new B();
a2.NormalMethod();//B.NormalMethod"
a2.NewMethod();//A.NewMethod
Console.ReadKey();
}
} internal class A
{
public virtual void NormalMethod()
{
Console.WriteLine("A.NormalMethod");
}
public virtual void NewMethod()
{
Console.WriteLine("A.NewMethod");
}
} class B:A
{
public override void NormalMethod()
{
Console.WriteLine("B.NormalMethod");
}
public new void NewMethod()
{
Console.WriteLine("B.NewMethod");
}
}
抽象类(abstract修饰类或者方法)不能建立实例;不能密封抽象类因为这违反了它只有被继承才有意义的原则;抽象类只有被派生类继承才有意义;抽象方法必须放置在抽象类中。抽象类可以拥有非抽象方法,而接口作为一个特殊的抽象类,不能含有非抽象的方法。
抽象类和接口有一些区别,接口是一种特殊的抽象类:
1)接口不能有非抽象方法,而抽象类可以有非抽象方法。
2)接口和抽象类都不能被实例化。
3)如果继承接口,必须实现接口所有的抽象方法。而继承抽象类的类可以只实现一部分父类的抽象方法。
4)一个类可以继承多个接口,但只能继承自一个别的类。
5)不能密封抽象类和接口。因为这破坏了接口和抽象类本身的性质,即被人继承。
抽象类和它的子类之间应该是一般和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。
面向对象编程五大规则SOLID
1)单一职责原则:有且仅有一个原因引起类的变更。低耦合,高内聚。SPR。
2)开闭原则:软件实体应当对修改关闭,对扩展开放。对抽象编程,因为抽象相对稳定。OCP。工厂方法模式。
3)里式替换原则:所有引用积累的地方必须能够透明地使用其子类的对象。子类必须能够替换其基类。LSP。
4)接口隔离原则:尽量应用专门的接口,而不是单一的总接口,接口应该面向用户,将依赖建立在最小的接口上。客户端不应该依赖它不需要的原则。ISP。
5)依赖倒置原则:依赖于抽象,而不要依赖于具体,因为抽象相对稳定。高层模块不应该依赖底层模块,两者都应该依赖其抽象,抽象不应该依赖于细节,细节应该依赖抽象。DIP。
《C#从现象到本质》读书笔记(四)第4章C#和面向对象的更多相关文章
- 《深入理解java虚拟机》读书笔记四——第五章
第五章 调优案例分析与实战
- 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...
- 【转载】MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)
1. Set - 元组的集合,在 Set 中的元组用逗号分开,Set 以花括号括起来,例如: { ([Product].[Category].[Accessories]), ([Product].[ ...
- 《Android开发艺术探索》读书笔记 (3) 第3章 View的事件体系
本节和<Android群英传>中的第五章Scroll分析有关系,建议先阅读该章的总结 第3章 View的事件体系 3.1 View基本知识 (1)view的层次结构:ViewGroup也是 ...
- SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章)
SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章) 示例数据库:点我 CHAPTER 08 数据修改 8.1 插入数据 8.1.1 INSERT VALUES 语句 8.1 ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
- 《Linux内核设计与实现》读书笔记——第一、 二章
<Linux内核设计与实现>读书笔记--第一. 二章 标签(空格分隔): 20135321余佳源 第一章 Linux内核简介 1.Unix内核特点 十分简洁:仅提供几百个系统调用并且有明确 ...
- how tomcat works 读书笔记四 tomcat的默认连接器
事实上在第三章,就已经有了连接器的样子了,只是那仅仅是一个学习工具,在这一章我们会開始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足下面几个要求 1 实现org.apache ...
- 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程
第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...
- JavaScript DOM编程艺术读书笔记(四)
第十章 实现动画效果 var repeat = "moveElement('"+elementID+"',"+final_x+","+fin ...
随机推荐
- 黄聪:windows下使用xampp3.2.2配置多个监听端口和不同的网站目录
windows下使用xampp3.2.2配置多个监听端口和不同的网站目录 一:配置Apache文件httpd.conf 打开Apache的配置文件httpd.conf,可以通过点击xampp的Apac ...
- 常用http/https以及socks5代理总结
代理 格式 # 设置http代理 export http_proxy= # 设置https代理 export HTTPS_PROXY= # 设置ftp代理 export FTP_PROXY= # 同时 ...
- C++Primer第五版——习题答案详解(一)
习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第1章 开始&&第2章 变量和基本类型 练习1.3 #include&l ...
- U3D学习12-黑暗之光实例
1.static勾选后,在scene场景操作后,导致不断烘焙,cpu占用高? 取消自动烘焙 2.UI操作事件 //监听事件增加 mainInputField.onValueChange ...
- 【HQL】小技巧
case1.a与b匹配表保留一条匹配关系 背景:匹配b,b匹配a在同一张表: match_table表为: uid,m_uid 111,222 222,111 需求:只保留一条匹配关系. 结果为: u ...
- 代码: !AJAX
http://www.cnblogs.com/cwp-bg/p/7668840.html ajax和jsonp使用总结 2017-10-17 var requestUrl="http://l ...
- leetcode160
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...
- Navicat for MySQL使用
Navicat for MySQL使用 导出数据库表与结构 新数据库导入
- RAD Studio 10.3 来了
官方原版下载链接:HTTP FTP 官方更新说明:http://docwiki.embarcadero.com/RADStudio/Rio/en/What's_New [官方更新说明简译]1.Delp ...
- linux目录与文件权限的意义
现在我们已经知道了Linux系统内文件的三种身份(所有者,用户者,与其他人),知道每种身份都有三种属性(r,w,x),已经能够使用chown,chgrp,chmod去修改这些权限和属性,那么这些文件权 ...