应该不行,在Delphi中所有的类都是从object中直接或者间接继承过来的
解决方案 »
- SQL存储图片的路径,在DBImage中显示图片?
- 求助
- CAD DXF12 文件如何加入其他文件!
- DELPHI如何控制打印机,急。。。。。。。。。在线等。。。。。。。。。。。。。。
- 如何将字符串转换为字节数组,反之,如何将字节数组转换为字符串?(即时结贴)
- 问个关于取字符串函数的,一时想不起来了,哪位知道.......
- 请指教:怎样用InstallShield For Delphi制作SQL Server数据库的安装程序
- 用delphi从access数据库中读出图象格式的字段,并将其按bmp读出保存之临时文件夹
- 获取文件信息问题
- 向大侠们请教一个问题--有关作聊天室方面的
- 关于三层数据库,急!!!
- 听说本站为共享软件作者提供20M空间,如何得到?
Delphi 所有的类都是 TObject 继承过来的,所以你就不要多想了。
问:
为什么不要从 TObject 继承而来呢?
你可以当它透明呀!比如定义的时候,就可以这么定义:
TMyClass = Class
end;
TMyObj = object
// ... 定义 end; TMyChild = object(TMyObj) end;TMyObj 这各类就不是从 TObject 派生的,它是保留了老的 Turbo Pascal 面向对象性质,TMyObj 这个类没有祖先类,而 TMyChild 是从 TMyObj 派生的。其 OOP 性质和 C++ 是一样的。但是不提倡这样做。因为以 Object 关键字代替 class 定义的类不能从 TObject 派生子类,不能得到 TObject 类带来的先进特性,如虚拟构造函数、RTTI 等等。其实 TObject 类已经具备了 C++ 的模板功能,是非常高效优秀的,既然 C++ 大量的应用模板不就是为了能够达到 类的高级功能而不是简单的继承派生,而 TObject 正是实现着的最好的办法,用最简捷的法是实现了 C++ 用复杂方式才能实现的东西,何乐而不为?
面向对象是思想,而不仅仅是语言的差别,它只是实现的工具。我觉得应该对面向对象有更深刻理解的应该是哲学家和生物学家才对。呵呵。再次感谢
Phoenix2000(Phoenix2000),你的 TMyObj的定义,其实也是从 TObject 派生而来,
因为 Delphi 缺省的就是从 TObject 派生,你没有办法逃避的。
你的这个定义,只是从视觉上来说好像实现了 Freedom 的想法而已。
请看文章:[转贴]DELPHI的原子世界(1)
[转贴]DELPHI的原子世界(2)
PMyObj = ^TMyObj;
TMyObj = object;
constructor Create;
end;
var
p: PMyObj; //类指针
MyObj: TMyObj; //类变量
begin
p := TMyObj.Create(nil); // 这样代码是不可能编译通过的!
New(p, Create); // 这样使用构造函数
MyObj.Create; // 这样使用构造函数
// p^.ClassType 或者 MyObj.ClassType 这样的表达是错的,因为它们的类 TMyObj 不是从 TObject 派生的,根本不具备 RTTI 性质,无从谈起 ClassType 这样的类方法。
end;在 Delphi 中,TObject 类的派生类对象实质上全部都是指针,调用其构造函数同时也就是在为指针分配内存。而用 object 关键字所定义的类,既可以有编译器直接在堆上分配内存的变量,也可以有引用模式的类指针,后者和 Delphi 的 TObject 类体系有些相似,而前者和普通 C++ 类相似。说倒操作符重载,Object Pascal 不支持。因为操作符重载在 TObject 中有部分实现,更多的情况是使用函数来替代。其实,C++ 的操作符重载本质上就是函数的重载,因为 C++ 中的操作符也是类的方法函数,没什么特别的。
原来我讨论的一直都是 Class 作为关键字。
而没有注意到 用Object作为关键字。
对的,Phoenix2000 说得有道理!