c#继承 里氏转化原则
继承:
是c#中面向对象一个重要概念:
用一个已经存在的类去定义一个新的类
新的类叫做 子类/派生类
已经存在的类叫做 父类/基类
c#中所以类的最终基类都是Object类
声明
访问修饰符 class 派生类名:基类名{
}
特性:
1.一个类只可以继承一个基类
2.派生类拥有基类的所以属性和方法
3.基类的成员不允许子类访问,子类是无法访问的
4.子类会默认调用父类的默认构造函数
访问修饰符
1.protected 继承
2. internal 本程序集(类和结构体的默认访问修饰符)
引用其他程序集,使用using 关键字
也可以直接通过dot语法,找到对应的命名空间. 类名
命名空间
同一个命名空间下的东西不能重名,可以直接调用
不同命名空间下的类可以重名,所以 可以用命名空间来区分不同的代码
this 和 base
this关键字指向自身或者自身构造函数
base关键字指向父类的实例或者父类的构造函数
new
1.实例化一个对象
2.为子类的成员申请一个新的空间
如果子类中有成员与父类中的成员重名,可以用new关键字为子类中这个成员
申请一个新空间,以便于计算机识别,如果不写,将默认启用new
里氏转化原则
1.子类可以当做父类去使用(因为子类拿到了父类的所有内容)
2.父类变量可以装载子类,甚至可以强制转换成子类对象去使用(因为父类盒子里装的就是子类的内容)
is :判断这个变量是否能转换成对应类型,如果可以,返回t,否则返回f
as:尝试转换,如果能,返回转换过后的对象,如果不能,返回null
is和as 要搭配使用,则要可以避免空引用报错
//如果父类对象中装的是子类,那么我们可以把它强转成子类类型,并且去使用
Prams x = new Pramsman();//new一个子类对象放到父类类型的 x 里 if(x is Pramsman )
{
Pramsman p1 = (x as Pramsman);
p1.WatchMovie();
}
c#继承 里氏转化原则的更多相关文章
- .net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串
1.继承(1)创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类的所有字段开辟空间,只不过父类私有的成员访问不到(2)子类从父类继承父类所有的非私有成员,但是父类的所有字段也会创建 ...
- 里氏替换原则LSP(继承规范)
继承的优点: 1.代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性. 2.提高代码的重用性. 3.子类可以形似父类,但又异于父类. 4.提高代码的可扩展性,实现父类的方法就可以“为所欲为” ...
- [OOD]违反里氏替换原则的解决方案
关于OOD中的里氏替换原则,大家耳熟能祥了,不再展开,可以参考设计模式的六大设计原则之里氏替换原则.这里尝试讨论常常违反的两种形式和解决方案. 违反里氏替换原则的根源是对子类及父类关系不明确.我们在设 ...
- 【C#小知识】C#中一些易混淆概念总结(六)---------解析里氏替换原则,虚方法 分类: C# 2014-02-08 01:53 1826人阅读 评论(0) 收藏
目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...
- 面向对象五大原则_1.单一职责原则&2.里氏替换原则
单一职责原则:Single Responsibility Principle (SRP) 一个类.仅仅有一个引起它变化的原因.应该仅仅有一个职责.每个职责都是变化的一个轴线.假设一个类有一个以上的职责 ...
- 设计模式之里氏代换原则(LSP)
里氏代换原则(Liskov Substitution Principle, LSP) 1 什么是里氏代换原则 里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的O ...
- 里氏替换原则(Liskov Substitution Principle)
开放封闭原则(Open Closed Principle)是构建可维护性和可重用性代码的基础.它强调设计良好的代码可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码. ...
- 第2章 面向对象的设计原则(SOLID):2_里氏替换原则(LSP)
2. 里氏替换原则(Liskov Substitution Principle,LSP) 2.1 定义 (1)所有使用基类的地方必须能透明地使用子类替换,而程序的行为没有任何变化(不会产生运行结果错误 ...
- 2.里氏替换原则(Liskov Substitution Principle)
1.定义 里氏替换原则的定义有两种,据说是由麻省理工的一位姓里的女士所提出,因此以其名进行命名. 定义1:如果对一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1所定义的程序P中在o1全都 ...
随机推荐
- 2015-10-05 js3
Javascript 实例2九九乘法表 var s = ""; s += "<table>"; for (var i = 1; i < 10; ...
- day_7
r 读w 写a 追加写 f = open('s.txt',mode='r',encoding='utf-8') ff = f.readline() #读取时一行一行的时候末尾会跟着\nprint(ff ...
- linux 基础测试题
1. 什么是buffer和cache buffer (cpu→内存→磁盘,简称为写缓冲 ):当你网上观看视频且网络波动较大的时候,会发现弹出一个正在缓冲中,这个就是buffer. cache(磁盘→内 ...
- mysql 判断某字段是否包含中文
SELECT col FROM table WHERE LENGTH(col) != CHAR_LENGTH(col) LENGTH() 函数:返回字符串的长度,已字节符为单位 CHAR_LENGTH ...
- nginx 支持的命令行参数
Command-line parameters 命令行参数 nginx supports the following command-line parameters: nginx支持以下命令行参数 - ...
- makeObjectsPerformSelector对数组中的对象发送消息执行对象中方法
- (void)makeObjectsPerformSelector:(SEL)aSelector; - (void)makeObjectsPerformSelector:(SEL)aSelector ...
- JS两个页面通过URL传值
1.传递参数: window.location.href = "./list.html?id="+id; 1.接收参数: (1)接收参数函数封装 function GetReque ...
- python实现算术表达式的词法语法语义分析(编译原理应用)
本学期编译原理的一个大作业,我的选题是算术表达式的词法语法语义分析,当时由于学得比较渣,只用了递归下降的方法进行了分析. 首先,用户输入算术表达式,其中算术表达式可以包含基本运算符,括号,数字,以及用 ...
- 【linux基础】关于ARM板子使用O3编译选项优化
前言 应领导要求需要将最初级版本的算法移植到ARM板子上,并进行优化,以期达到实时. 平台 移植前: TX2 移植后: ARM() processor : model name : ARMv7 Pro ...
- spring boot 1.4 整合 mybatis druid
http://www.jianshu.com/p/cef49ad91ba9spring boot 1.4 整合 mybatis druid