我在书上看到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);
这样定义不就行了吗?还请高手指点!谢谢!
并举了一个例子:
假定有一个过程,想让它能够传递任何类型的对象,它应该这样定义:
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);
这样定义不就行了吗?还请高手指点!谢谢!
解决方案 »
- Delphi用DirectShow 处理多音轨遇到的问题
- 如何对流的内容进行加密或者解密操作
- 关于LookUp多字段出错问题?
- 问一个挺简单的基础问题,如何取得一个字符串的最后三位?在线等,急急急!
- 技术方案讨论
- 怎么把选中的多个图像文件装载入IMAGE控件。
- 高手请进:Webbrowse打开窗口,怎样在动态生成的新的WebBrowse中取得打开的URL地址;
- delphi的DBGRID控件只能读取数据库文件吗?
- 怎样通过delphi向ACCESS数据库输入数学公式啊?
- 在程序中实现将文本数据(.txt)转换成ACCESS数据表?
- 大家讨论下activex的用法!进者有分
- 向大家请教一个问题:按钮等控件上鼠标右键的“这是什么”功能是怎么实现的?
那本书刊误,相信你自己就行了!另外你说的procedure foo(AnObject:TEdit);
当然好,但不通用;万一你又把那个TEdit改为了TMaskEdit,那不就是要更改过程了?
Delphi的类都是基于TObject,用TObject就通用多了!最经典的就是TStrings了;
Delphi中会用到很多TStrings,但是没有一个是正在TStrings创建的,如:不与控件
结合的TStrings则是用TStringList创建的,与TListBox结合的是TListBoxStrings,
等等,但是他们的用途是一样的,都以TStrings导出的话就方便多了,你说呢?还有
那个TStream,呵呵
(Anobject as TEdit).Text:='Hello world';
>> (Foo as Tedit).Text:='Hello World';
>> 请问上面这条语句是否有错?
是錯了, foo是個過程名! 不可能再轉成對象!!!