小问题求解!

wumylove1234 2004-07-20 01:57:32
Dim stream As Stream = File.Open(buddyBox.Text, FileMode.Open)
Dim reader As New StreamReader(stream, Encoding.Default)

就是这两句.其实很简单.

大家能帮我看一下:File.Open(buddyBox.Text, FileMode.Open)这里返回的我在MSDN上的理解应该是FileStream类,可为什么可以给Stream类赋值呢?
按我的理解,考虑多态的情况,也应该是File.Open如果返回的是Stream类的对象的情况下,那么可以赋给FileStream类的对象.因为Stream是FileStream的父类!

小弟初学.Net,面向对象也是初学.遇到这个问题,请各位高手解答一下.
...全文
49 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumylove1234 2004-07-20
  • 打赏
  • 举报
回复
派生类可以直接转化成基类,
基类须要强制转换成派生类

这句很受用,我记下了.

谢谢二位.结帖!
brightheroes 2004-07-20
  • 打赏
  • 举报
回复
事实上,把派生类转化成父类(默认就转化了,如你所写的代码)是可以的,付出的代价就是丢失了派生类自己的内容。
wumylove1234 2004-07-20
  • 打赏
  • 举报
回复
难道是当派生类赋给父类的时候
Dim stream As Stream = File.Open(buddyBox.Text, FileMode.Open)
Stream会自动的保留自已所拥有的那部分特性?而舍弃了FileStream类派生后的特性?
wumylove1234 2004-07-20
  • 打赏
  • 举报
回复
brightheroes(闭关|那一剑的风情):

哪个是父类,哪个是派生类的关系我是知道的,MSDN上有写.我是不明白为什么派生类,可以赋给父类!
wumylove1234 2004-07-20
  • 打赏
  • 举报
回复
啊?楼上大哥说的是真的吗?
在哪里有写?
我是看完了C++的面向对象之后学的.Net.
我看的那本C++的书上没有讲.如果按照您的说法.那我就能理解了.
那多态的意义不是要得到更大的扩充了吗?
Dim stream As FileStream = File.Open(buddyBox.Text, FileMode.Open)
Dim reader As New StreamReader(stream, Encoding.Default)
按我的理解,这样是可以的.因为File.Open返回的是FileStream类,而StreamReader类的构造函数中需要的Stream类,djm Stream类是FileStream的基类,所以可以用多态去理解了.

大侠,看我的说法有问题吗?
brightheroes 2004-07-20
  • 打赏
  • 举报
回复
你自己的理解是正确的
Stream是一个抽象类
FileStream是它的一个派生类
八爪鱼-杭州 2004-07-20
  • 打赏
  • 举报
回复
派生类可以直接转化成基类,
基类须要强制转换成派生类

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧