已定义了很多类,想构造一个函数
function NewClass(AClassName:string):TObject;
功能:输入类名创建类对象,返回创建的类对象;
要求:不用Case语句(因有很多类);能实现吗?要用类模板吗?(VC有此功能,Delphi怎么做?)

解决方案 »

  1.   

    有两种方式,任选:
    1. TTestClass = class of TControl;
       TTestA = class(TControl)
       public
         constructor Create(AOwner: TComponent); override;
         Destructor Destroy; override;
       end;
      
       TTestB = class(TControl)
       public
         constructor Create(AOwner: TComponent); override;
         Destructor Destroy; override;
       end;使用:
      function CreateObject(Test: TTestClass): TControl;
      var
        Tmp: TControl;
      begin
        Tmp := Test.Create(nil);
        Result := Tmp;
      end;2.先定义一个所有类的基类的类引用(如CClass: Class of BaseClass),就必须在你写完每一个类后要RegisterClasses,然后:
      function NewClass(AClassName: string): TObject;
      var 
        C :CClass
        SomeObject: TObject;
      begin
        C := CClass(FindClass(AClassName));
        SomeObject := C.Create(nil);
        Result := SomeObject;
      end;
      

  2.   

    要求:不用Case语句
    ===================
    RegisterClasses,FindClass,只能用这个了,但是其实它底层也只是遍历所有注册了的class,就效率而言,它也许还不如case,只是可以做到动态添加类而已。