Nat*_*Nat 5 delphi generics delphi-2010
这必须是Delphi的bug ...
我有一个单位,这是我的持久性框架的基础.在该单元中,我有一个用于所有域对象的基类,一个列表类和一个通用列表类.
就在最近我注意到,当我在调试时进入单元时,执行将跳转到文件中的某个位置,而不是它应该......可能是四行或五行.重新排序文件没有区别.代码也会生成访问冲突,但只有在我调试它时.
我试图找到原因...我想到了几件事情,比如一些代码注入拧紧调试器(例如这个logitec网络摄像头驱动程序错误),或调试信息与我的单位源不同步(例如dcu被从一些旧的来源拉出来).
最后,我用一个干净的Windows + Delphi安装启动了一个虚拟机,只抓住了我需要测试的单元,我创建了一个小的DUnit项目来测试它.同样的问题.
然后我开始一次从设备中取出东西直到它工作.唯一不同的是我删除了通用列表类.
有没有人见过这个问题?有谁知道如何绕过它?
提前致谢,
N - [
更新:将通用添加回单元会使问题回来,因此这不是陈旧DCU的问题.
最后,我能找到的唯一有效的解决方案是将通用列表移出该单元。
更新2011-08-03为了更好地充实我的解决方案:
Domain我在我的单元中使用基TDomainObject类和非通用版本定义了通用列表基类。
为了解决这个问题,我将通用药物移至第二个Domain.Generics单元,这为我解决了问题。
所以:
unit Domain;
interface
type
TDomainObject = class
//blah de blah
end;
TDomainObjectList = class (TDomainObject)
//more stuff
end;
TDomainListEnumerator = class
//etc
end;
Run Code Online (Sandbox Code Playgroud)
和:
unit Domain.Generics;
interface
type
TDomainObjectList<T: TDomainObject> = class (TDomainObjectList)
//stuff
public
property Items[AIndex: integer]: T read GetItem write SetItem;
type
TEnumerator = class (TDomainListEnumerator)
public
function GetCurrent: T;
property Current: T read GetCurrent;
end;
public
function GetEnumerator: TEnumerator;
end;
Run Code Online (Sandbox Code Playgroud)