del*_*vas 1 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;
Run Code Online (Sandbox Code Playgroud)
所以我可以像这样使用它:myRock:= createObject(OBJECT_ROCK);
现在我的问题是返回的对象是主类父类,我不能在'myRock'上使用Rock函数而没有从CObject到CRock的类型转换'createObject(OBJECT_ROCK)'我不希望每个都有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;
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,'myRock'实例上的'DoIt'调用将正确解析为该类的方法.
如果这是在相关阅读所有关于抽象方法在这里.