我正在尝试在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中的帮助程序完全不同。我可以毫无问题地分离帮助程序和类。我只想知道为什么我不能把它们放在一起。
任何人都知道这是什么问题?我可以用这种方式使用泛型,嵌套记录助手和继承吗?
答案 0 :(得分:1)
你不能指向同一类类型的两个助手 在您的情况下 TMyType
来自docs ..
您可以使用单一类型定义和关联多个帮助程序。但是,只有零或一个帮助程序适用于源代码中的任何特定位置。
在类
之外使用帮助器TMyTypeHelper = record Helper for TMyType
public
function ToInteger: Integer;
function ToString: string;
end;