首页  编辑  

在Delphi中如何自定义基类

Tags: /超级猛料/Language.Object Pascal/面向对象和类、VCL核心/   Date Created:

一般地,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这样写。