Delphi(XE7)将通用类添加到通用TDictionary

时间:2016-11-21 14:21:18

标签: delphi generics delphi-xe7

在以下代码中:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Generics.Collections;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyClass<T: TForm> = class
  public
    constructor Create;
  end;

var
  Form1: TForm1;
  List: TDictionary<integer, TMyClass<TForm>>;

implementation

{$R *.dfm}


{ TMyClass<T> }

constructor TMyClass<T>.Create;
begin
  List.Add(1, self);
end;

end.

我收到错误:

  

[dcc32错误] Unit1.pas(35):E2010不兼容的类型:   &#39; Unit1.TMyClass&#39;和   &#39;&Unit1.TMyClass.T GT;&#39;

在我试图将Self添加到TDictionary的位置。如何将通用类添加到TDictionary,其中第二个参数采用通用对象?

1 个答案:

答案 0 :(得分:3)

虽然您的约束是确保T只能是TForm,但编译器不支持所谓的协方差。

您可以做的是将Self硬编辑到TMyClass<TForm>以添加它。