当前位置:  开发笔记 > 编程语言 > 正文

我可以在抽象基类中保存任何数据成员吗?

如何解决《我可以在抽象基类中保存任何数据成员吗?》经验,为你挑选了2个好方法。

我有一个抽象类:

type
  TInterfaceMethod = class abstract
  public
    destructor Destroy;         virtual; abstract;
    function GetBasePlan: Word; virtual; abstract;
    procedure CountBasePlan;    virtual; abstract;
    procedure Calculate;        virtual; abstract;
    procedure PrepareForWork;   virtual; abstract;
  end;

和派生类:

type
  TFogelMethod = class(TInterfaceMethod)
  private
    matrix: TFogelMatrix;
    BasePlan: Word;
  public
    constructor Create(var matr: TFogelMatrix);
    procedure Calculate;
    function GetBasePlan: Word;
    procedure CountBasePlan;
    procedure PrepareForWork;
    destructor Destroy;
  end;

问题是,我可以将GetBasePlan和CountBasePlan方法的实现放入基类中,使它们只是虚拟 - 不像现在那样抽象 - 并且还将成员BasePlan放在那里吗?那么,我可以这样做:

type
  TInterfaceMethod = class abstract
  private
   BasePlan: Word;
  public
    destructor Destroy;         virtual; abstract;
    function GetBasePlan: Word; virtual; 
    procedure CountBasePlan;    virtual; 
    procedure Calculate;        virtual; abstract;
    procedure PrepareForWork;   virtual; abstract;
  end;

如果我可以做到这一点,从面向对象设计的角度来看它是否会好,我怎样才能从派生类中准确地访问这个成员?



1> Toon Krijthe..:

是的你可以.抽象类是类,它们可以有实现.

通过将abstract关键字添加到类中,可以禁止实例化类.它不需要任何抽象方法.

可以实例化具有absract方法的类,但这会在编译时产生警告,并在调用方法时产生异常.

接口没有实现,它们必须由类实现(顺便说一句,它们可以是抽象的).



2> Tim Jarvis..:

只是为了添加Gamecat的答案,不仅可以,而且你应该将你的公共代码放在那里.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有