Полиморфизм в Delphi Generics - PullRequest
4 голосов
/ 14 мая 2010
type 
  TParent=class
    public
      member1:Integer;
  end;

  TChild=class(TParent)
  public
    member2:Integer;
  end;


  TGArray<T: TParent>=class
    public
      function test:T;
    end;

  implementation

  var g:TGArray<TChild>;

    function TGArray<T>.test:T;
    begin
      Result:=??.create; // <<<<  Problem !
    end;


  begin
    g := TGArray<TChild>.Create;
    g.test.member2 := 1234;
  end.

g.test должен вернуть экземпляр класса. Я пробовал несколько вещей:

1.  Result := Result.create; //Exception
2.  Result := TChildClass.Create; //Error
3.  type TGArray<T: class> = class; //and above 2. The same errors/exceptions.

Целью этого является создание универсального массива классов. Массив хранится внутри универсального класса и возвращает экземпляры, но как?

Если я выполню эту задачу, я укороту свой код в 3 раза, но я не могу этого сделать. Пожалуйста, предложите любое решение.

1 Ответ

7 голосов
/ 14 мая 2010

Вы не говорите, что является ошибкой в ​​# 2, но держу пари, она говорит вам, что требует ограничения конструктора. Добавьте один, и он должен работать.

...