delphi - 函数返回类的派生

标签 delphi class function

我将CObject作为主要类,并将CRock,CDesk,CComputer派生自CObject。我想编写一个读取类枚举(可能像OBJECT_COMPUTER的整数)并返回特定类型的函数。

例:

function createObject( iType : Integer ) : CObject;
begin
  case iType of
    OBJECT_ROCK : Result := CRock.Create();
    OBJECT_DESK : Result := CDesk.Create(); 
  end;
end;


所以我可以这样使用它:myRock:= createObject(OBJECT_ROCK);

现在我的问题是返回的对象是主类的父类,并且我不能在'myRock'上使用Rock函数,除非将类型从CObject强制转换为'createObject(OBJECT_ROCK)'到CRock,并且我不想为每个对象拥有3个函数子类。有任何想法吗?提前致谢。

最佳答案

如果我理解正确,则可以使用抽象方法在基类上声明派生功能的框架,然后在每个派生类中重写并实现该方法。

type
  CObject = class
    procedure DoIt; virtual; abstract;
  end;
  CRock = class(CObject)
    procedure DoIt; override;
  end;
  CDesk = class(CObject)
    procedure DoIt; override;
  end;


var
  myRock: CObject;
begin
  myRock := createObject(OBJECT_ROCK);
  myRock.DoIt;
  myRock.Free;
end;


在上面的示例中,对“ myRock”实例的“ DoIt”调用将被正确解析为该类的方法。

如果这完全相关,请阅读抽象方法here

关于delphi - 函数返回类的派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4108618/

相关文章:

c# - RAD 编程语言编写一个 windows 应用程序来显示文本、播放音频文件和显示弹出气球

delphi - 如何将 ARGB 值从字符串转换为颜色?

delphi - 根据条件定义包含不同的表单 (.dfm) 文件

c# - 通用静态类有多个实例?

function - 在系统中注册自定义 shell 函数 (OSX)

c - vector 的长度,初学者

delphi - 使用 Pascal Script 和 SynEdit 制作 IDE

vb.net - 如何将枚举添加到列表中

java - 使用有限的字符串方法和无控制结构从给定格式中提取值

arrays - 为什么这个函数句柄在不正确的上下文中使用?