博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#基础与技巧——类与里氏替换
阅读量:4221 次
发布时间:2019-05-26

本文共 658 字,大约阅读时间需要 2 分钟。

继承

public class Person{};Public class student:Person{};person这个类叫父类(基类),student这个类叫子类(派生类)student继承了person类person类派生了student类

类中的构造函数问题

  子类中的构造函数会自动的调用父类中无参的构造函数,所以如果父类中写了有参的构造函数,必须再单独写无参的构造函数。

  (隐式调用)子类的构造函数会默认调用父类的无参构造函数
  (显示调用)在子类的构造函数后加”:base(参数,参数,…)
这里写图片描述

里氏替换

①父类空间,不能转成子类

这里写图片描述
②父类对象子类空间,可显示转子类
这里写图片描述
③父类对象子类空间,不能转其它子类
这里写图片描述
④子类对象子类空间,可隐式转父类
这里写图片描述

  ps:我的理解可以这么表达:父类new父类的空间,父类要转换成子类,父类没有子类的内容,而子类继承了父类的一切内容,子类所需的空间要比父类多,所以父类转换不了子类,而子类的空间大,子类空间里包含了父类所需的内容,所以子类可以转父类,有一些空间是没有用到。

  举个例子来说:父类有一个属性和一个方法,假如占两个空间,子类自己也有一个属性和一个方法,但是子类由于继承了父类,子类相当于拥有2个属性和2个方法,所以子类的空间会有4个,父类类型的2个加上自己的2个,所以子类可以转换成父类,而父类不能转换成子类。

is 和 as

  is 返回布尔类型,true可以转换,false不能转换

  as 直接返回相应类型,如果转换不了,不报异常,返回的是null

你可能感兴趣的文章
MySQL 无法退出命令行中的SQL输入模式
查看>>
show engine innodb status 详解(转 )
查看>>
有氧运动和无氧运动 的能量消耗问题
查看>>
力量训练
查看>>
乱码问题!Eclipse 的控制台console必须用GBK编码。【转载】
查看>>
井上三尺的《新聊斋》
查看>>
MySql 中如何连接一列字符串(转)
查看>>
Filter造成的乱码
查看>>
比较狠的减脂计划
查看>>
什么是脂肪
查看>>
形式主义
查看>>
前端学习(三)——CSS的三种写法与优先级
查看>>
@DynamicInsert使用问题
查看>>
Python邮件发送
查看>>
Ajax请求下,sendRedirect无效的问题
查看>>
python数据类型(python cookbook读书笔记一)
查看>>
python cookbook读书笔记二
查看>>
VS添加第三方C/C++库经验
查看>>
无法定位序数55于动态链接库zlib1.dll上
查看>>
sqlalchemy 这原生sql中绑定list
查看>>