使用泛型和嵌套记录助手

时间:2017-03-01 18:23:58

标签: delphi generics inheritance record helper

我正在尝试在Delphi 10.1 Berlin中执行以下操作,但编译器返回消息“F2084内部错误:AV0A785E48-R000000-10-0”:

TMyType = (mtValue1, mtValue2);

TMyBaseClass = class
private
  FMyType: TMyType;
public
  property MyType: TMyType read FMyType write FMyType;
end;

TMyClass = class(TMyBaseClass)
private
  FOtherField: Integer;
public
  property OtherField: Integer read FOtherField write FOtherField;
end;

TMyBaseProcess1<T: TMyBaseClass> = class
strict private
  FMyClass: T;
strict protected
  type
    TMyTypeHelper = record Helper for TMyType
    public
      function ToString: string;
    end;
public
  constructor Create(AMyClass: T);
  procedure DoSomething;
end;

TMyProcess1 = class(TMyBaseProcess1<TMyClass>)
end;

TMyBaseProcess2<T: TMyBaseClass> = class
strict private
  FMyClass: T;
strict protected
  type
    TMyTypeHelper = record Helper for TMyType
    public
      function ToInteger: Integer;
    end;
public
  constructor Create(AMyClass: T);
  procedure DoSomethingElse;
end;

TMyProcess2 = class(TMyBaseProcess2<TMyClass>)
end;

TMyBaseProcess1中的帮助程序与TMyBaseProcess2中的帮助程序完全不同。我可以毫无问题地分离帮助程序和类。我只想知道为什么我不能把它们放在一起。

任何人都知道这是什么问题?我可以用这种方式使用泛型,嵌套记录助手和继承吗?

1 个答案:

答案 0 :(得分:1)

你不能指向同一类类型的两个助手 在您的情况下 TMyType

来自docs ..

  

您可以使用单一类型定义和关联多个帮助程序。但是,只有零或一个帮助程序适用于源代码中的任何特定位置。

在类

之外使用帮助器
TMyTypeHelper = record Helper for TMyType
    public
      function ToInteger: Integer;
      function ToString: string; 
    end;