使用泛型和嵌套记录助手进行继承

Luc*_*lva 7 delphi generics inheritance record helper

我正在尝试在Delphi 10.1 Berlin中执行以下操作,但编译器返回消息"F2084 Internal Error: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;
Run Code Online (Sandbox Code Playgroud)

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

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

Liv*_*ius 1

在您的案例TMyType中,您不能有两个指向相同类类型的助手

从文档..

您可以定义多个助手并将其与单个类型关联。然而,只有零个或一个助手适用于源代码中的任何特定位置。

在该类之外使用助手

TMyTypeHelper = record Helper for TMyType
    public
      function ToInteger: Integer;
      function ToString: string; 
    end;
Run Code Online (Sandbox Code Playgroud)