C#中的里氏替换原则
2015-06-24 07:27
260 查看
里氏转换原则
子类可以赋值给父类对象
父类对象可以强制转化为对应的子类对象
里氏替换原则直观理解就是"子类是父类",反过来就说不通了.
就像男人是人对的,但人是男人就不对了.
这样明白了吧.
在面向对象思想中可知,派生类拥有基类向下公开的所有特征,它是基类的一个特例。
当派生类对象赋于基类类型时,将出现以下情况:派生类的数据结构依次对应于基类的数据结构。而派生类拥有的自己的数据将不可见。
当基类的对象试图转换为派生类型时,将出现基类对象的数据无法依次填充完派生类的所有数据结构。这就造成了它将无法完成派生类定义的功能。编译器将会提示甚至报错。
这就是派生类能胜任基类功能,而基类却无法完全胜任派生类功能的原因。
强制转换属于 基类到派生的过程:那是因为 设计人员知道:该基类对象的数据结构完全可以填充完派生类的结构。否则,将出现强转错误。一般最好避免使用强转!
还有,子类能够出现在任何父类对象出现的地方不是完全正确的,父类有时也不会将自己的一些成员公开给子类。
C#示例代码:http://www.eyesourcecode.com/f/CSharp/1
子类可以赋值给父类对象
父类对象可以强制转化为对应的子类对象
里氏替换原则直观理解就是"子类是父类",反过来就说不通了.
就像男人是人对的,但人是男人就不对了.
这样明白了吧.
在面向对象思想中可知,派生类拥有基类向下公开的所有特征,它是基类的一个特例。
当派生类对象赋于基类类型时,将出现以下情况:派生类的数据结构依次对应于基类的数据结构。而派生类拥有的自己的数据将不可见。
当基类的对象试图转换为派生类型时,将出现基类对象的数据无法依次填充完派生类的所有数据结构。这就造成了它将无法完成派生类定义的功能。编译器将会提示甚至报错。
这就是派生类能胜任基类功能,而基类却无法完全胜任派生类功能的原因。
强制转换属于 基类到派生的过程:那是因为 设计人员知道:该基类对象的数据结构完全可以填充完派生类的结构。否则,将出现强转错误。一般最好避免使用强转!
还有,子类能够出现在任何父类对象出现的地方不是完全正确的,父类有时也不会将自己的一些成员公开给子类。
C#示例代码:http://www.eyesourcecode.com/f/CSharp/1
相关文章推荐
- C#操作Office.word(一)
- C#学习笔记一(数据类型,转义字符)
- C#的Sockets用法
- 用c#写的一个局域网聊天客户端 类似小飞鸽
- C# this.Hide()
- C#实现MD5加密
- C#List<string>和string[]之间的相互转换
- C# 正则表达式
- C#中virtual和abstract的区别
- 验证码识别实践3:自己动手C#实现,颜色差异法去除干扰线
- 验证码识别实践2:自己动手C#实现,对CSDN资源上传验证码识别率100%,久游网登陆90%
- 验证码识别实践1:自己动手C#实现
- C#中的委托和事件(续)
- [C#] 调试silverlight的时候,总是报“向占位程序传送了空的索引指针”
- C#实现上传文件分割,断点续传上传文件
- [C#] 调试silverlight的时候,总是报“向占位程序传送了空的索引指针”
- C# 同一实例的同一事件注册到子父窗体后
- C#窗体间传值
- dotnet(C#/mono)轻量级XML解析库Mono.Xml源码
- C#操作IE浏览器