delphi - 如何创建类的新实例?

标签 delphi delphi-2009 rtti

我有各种各样的类实例的列表。我需要能够在不知道要创建什么的情况下创建类的新实例。所有涉及的对象都具有相同的祖先。实际复制对象的成员变量很容易...这是我遇到问题的新对象的创建。

诚然我可以做这样的事情:

case MyObjectTypeInstance.MyTypeEnum of
  obj1:
    Result:=TObjectType1.Create;

  obj2:
    Result:=TObjectType2.Create;

  obj3:
    Result:=TObjectType3.Create;
end;


不会遵循“开放/封闭原则”。

最初我以为我可以做类似“ Result:= MyObjectTypeInstance.Create;”的事情。但是由于析构函数的困难,这没有达到预期的效果。

这是我应该怎么做的最新猜测...

var
  fooA, fooB:TFoo;
begin
  fooA:=TFoo2.Create;    // it could be any of many types

  fooB:=?  // how to create fooB of same class type as fooA????

  // do something

  fooA.Free;
  fooB.Free;
end;


我本以为这样会更容易!

谢谢您的帮助!

最佳答案

您可能需要创建一个Abstract Factory或Factory Method类。这些都是常见的Design Patterns,它们是经过测试的可靠开发范例。

关于delphi - 如何创建类的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757280/

相关文章:

delphi - 如何从具有管理员权限的应用程序接收键盘输入到非管理员应用程序?

delphi - Delphi中如何给变量赋值?

delphi - 我可以嵌套关键部分吗? TCriticalSection 可以嵌套吗?

delphi - 为什么基于TComponent的接口(interface)实现会泄漏内存?

c++ - 我可以解开 GCC 的 RTTI 名称吗?

delphi - Delphi中有类似PHP var_dump的函数吗?

delphi如何将twitter时间戳转换为TDatetime

delphi - 从 Delphi 2009 图像列表中提取 PNG 图像

c++ - 在 MSVC ABI 中,如何可靠地找到仅给出 (void*) 的 vtable?

delphi - 如何在运行时设计器中隐藏继承的已发布属性?