一般地,Delphi中声明一个类,都是从TObject派生的,这是默认的!那么如何自定义基类呢?
Phoenix2000(Phoenix2000):
可以的。采用下面这样的形式:
type
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++ 用复杂方式才能实现的东西,何乐而不为?
westfly(西翔) :
可以,不过这种类delphi不鼓励定义:
// 例如:
type
TMyClass = object
private
FX: Integer;
public
constructor Init;
procedure Test;
destructor Done;
end;
var c: TMyClass;
var pc: ^TMyClass;
begin
c.Init;
c.Test;
c.Done;
pc := New(TMyClass);
pc^.Init;
pc^.Test;
pc^.Done;
Dispose(pc);
end;
// TMyClass将不继承自任何类
// c定义后自动获得空间,不需要c := TMyClass.Init这样写。