Delphi – 泛型免费
发布时间:2020-12-15 04:08:20 所属栏目:大数据 来源:网络整理
导读:有以下泛型课程 TTupleT1,T2 = class protected fItem1: T1; fItem2: T2; public constructor Create; overload; constructor Create(Item1: T1; Item2: T2); overload; destructor Destroy; override; property Item1: T1 read fItem1 write fItem1; proper
有以下泛型课程
TTuple<T1,T2> = class protected fItem1: T1; fItem2: T2; public constructor Create; overload; constructor Create(Item1: T1; Item2: T2); overload; destructor Destroy; override; property Item1: T1 read fItem1 write fItem1; property Item2: T2 read fItem2 write fItem2; end; constructor TTuple<T1,T2>.Create; begin inherited; end; constructor TTuple<T1,T2>.Create(Item1: T1; Item2: T2); begin fItem1 := Item1; fItem2 := Item2; end; destructor TTuple<T1,T2>.Destroy; begin inherited; end; 并以如下方式使用: x := TTuple<TObjectList<TMyObjects>,Integer>.Create; 我需要手动释放fitem1.如何释放析构函数中的fItem1? 解决方法
在TTuple的定义中,对T1,T2的类型没有限制.
这就是为什么你不能调用析构函数,因为它可以是任何类型,双/整数等.直接回答你的问题: PObject(@fItem1).DispoSEOf; 但只有在T1上课时它才能正常工作. TTuple<T1: class; T2> = class 然后你可以正常方式释放它: fItem1.Free 要使它成为类似Delphi的样式,您可以创建两个泛型类: TTuple<T1,T2> = class ... end; TObjectTuple<T1: class; T2> = class<TTuple<T1,T2>> ... property OwnsKey: boolean; end; destructor TObjectTuple<T1,T2>.destroy; begin if OwnsKey then FItem1.DispoSEOf; end; 例如,看看它是如何实现的 TObjectList<T: class> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |