我在书上看到as的定义,能把一个基层的对象强制类型转换成它的派生类?
并举了一个例子:
     假定有一个过程,想让它能够传递任何类型的对象,它应该这样定义:
              procedure foo(AnObject:TObject);
      在这个过程如果要对AnObject进行操作,要把它转换成一个派生对象.假定把AnObject看成是一个TEdit派生类型,并想要改变它所包含的文本.用下列语句:
       (Foo as Tedit).Text:='Hello World';
请问上面这条语句是否有错?
请问为什么是过程名做强制转换?
procedure foo(AnObject:TObject);    (Foo as Tedit).Text:='Hello World';而不是(Anobject as TEdit).Text:='Hello world';另外为什么要强制转换呢?如果在定义时:
            procedure foo(AnObject:TEdit);
这样定义不就行了吗?还请高手指点!谢谢!

解决方案 »

  1.   

    (Foo as Tedit).Text:='Hello World'这样定义不是我无知就是
    那本书刊误,相信你自己就行了!另外你说的procedure foo(AnObject:TEdit);
    当然好,但不通用;万一你又把那个TEdit改为了TMaskEdit,那不就是要更改过程了?
    Delphi的类都是基于TObject,用TObject就通用多了!最经典的就是TStrings了;
    Delphi中会用到很多TStrings,但是没有一个是正在TStrings创建的,如:不与控件
    结合的TStrings则是用TStringList创建的,与TListBox结合的是TListBoxStrings,
    等等,但是他们的用途是一样的,都以TStrings导出的话就方便多了,你说呢?还有
    那个TStream,呵呵
      

  2.   

    好明显,应该是这本书印错了,应该是
    (Anobject as TEdit).Text:='Hello world';
      

  3.   

    ruthfox() 说得好。呵呵。还有sender:Tobject。
      

  4.   

    >>     procedure foo(AnObject:TObject);
    >>       (Foo as Tedit).Text:='Hello World';
    >> 请问上面这条语句是否有错?
    是錯了, foo是個過程名! 不可能再轉成對象!!!
      

  5.   

    9494,把一个过程强制转换为对象,转换肯定失败。返回的应该是nil吧?
      

  6.   

    十分感谢ruthfox()和各位的精彩回答!谢谢!