首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

下面的代码违背了“多态性”!大家看解决思路

2012-01-08 
下面的代码违背了“多态性”!!大家看ImportsSystem.IOPublicClassForm1PrivateSubForm1_Load(ByValsenderAsS

下面的代码违背了“多态性”!!大家看
Imports   System.IO

Public   Class   Form1

        Private   Sub   Form1_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load
       
        Dim   a   As   TextWriter   =   File.AppendText( "c:\txt.txt ")‘这里我用TextWriter竟然也行?!但是在MSDN里说的是:(看注释1:)

                a.WriteLine( "这些是追加的文本 ")
                a.Close()
                MsgBox( "追加成功 ")
        End   Sub

End   Class

=========================================

注释1:
Public   Shared   Function   AppendText   (   path   As   String   )   As   StreamWriter

这里的返回值是一个StreamWriter类型值,按照多态性,使用StreamWriter的父类textwriter肯定是不行的,但VB2005却没提示错误,代码也正常运行了,为什么呢?

按照正常的思维:
StreamWriter肯定能当textwriter类型来用,但是反过来就不行,也就是说父类并不继承子类的特征

希望高人给解答,
谢谢了


[解决办法]
楼上的这位朋友,我稍微给你解释一下

Dim a As TextWriter = File.AppendText( "c:\txt.txt)

这里 a 不是一个对象,只是TextWriter类的一个引用(牢记没有New就没有对象),而我们把一个StreamWriter的对象(返回值)赋给了a,这个是合理的.

为什么这样说呢,请牢记子类的对象总是可以看做是一个父类的对象

打个类比,我需要一个人(人类的一个引用a),我给你一个男人也可以,给你一个女人也可以

也就是说
Dim a as 人 = New 男人()

也可以
Dim a as 人 = New 女人()

但是我说我需要一个男人,你给我一个人可以吗?显然,这未必能成功,所以

Dim a as 男人 = new 人() 是错的

当然如果你非要把一个人的对象赋给一个男人... 那就要强制类型转换了..

不知道我这样说,你明白了没有

热点排行