我创建了几个接口来描述集合及其项目:IetCollection和IetCollectionItem.当然,我有两个实现这两个接口的类:TetCollection和TetCollectionItem(都继承自TInterfacedObject.)
然后我有一系列接口,其中顶级接口继承自IetCollectionItem,其余接口来自它(让我们称之为ISomeBasicType和ISomeSpecificType1以及ISomeSpecificType2.)
类TSomeBasicType继承自类TetCollectionItem,并且还实现了ISomeBasicType.层次结构中的其他类继承自TSomeBasicType并实现其各自的接口(即ISomeSpecificType1和ISomeSpecificType2.)
当我填充集合时,我使用工厂方法来获取对ISomeBasicType的引用.到目前为止,一切都很好.
但是当我尝试遍历集合并询问集合项是否支持ISomeSpecificType1或ISomeSpecificType2时,我得到的答案是否定的.
我一直在努力解决这个问题,但我没有取得任何成果,所以任何帮助都将不胜感激.
这是一些代码:
// This is the basic type
IetCollectionItem = interface
end;
// Implementation of the basic type
TetCollectionItem = class(TInterfacedObject, IetCollectionItem)
end;
ISomeBasicType = interface(IetCollectionItem)
end;
ISomeSpecificType1 = interface(ISomeBasicType)
end;
// Implements ISomeBasicType, should inherit implementation of IetCollectionItem
// from TetCollectionItem
TSomeBasicType = class(TetCollectionItem, ISomeBasicType)
end;
// Implements ISomeSpecificType1, should inherit implementation of ISomeBasicType
// from TSomeBasicType and implementation of IetCollectionItem from
// TetCollectionItem
TSomeSpecificType1 = class(TSomeBasicType, ISomeSpecificType1)
end;
Run Code Online (Sandbox Code Playgroud)
这是我用户填充集合的代码:
var
aBaseType: ISomeBasicType;
aSpecificType: …
Run Code Online (Sandbox Code Playgroud) 我在RoR应用程序中的两个模型之间有一个标准的主 - 细节关系.详细记录包含四个布尔字段,表示存在/不存在某些东西.
当我显示详细记录时,我想添加一个摘要,指示对于四个布尔字段中的每一个,其布尔值设置为True的记录数.
例如:日期| 布尔字段1 | 布尔字段2 | 等2009/08/29 | T | T | 2009/08/30 | T | F | 2009/08/31 | F | T | 2009/09/01 | F | T |
总计:4 2 3
我尝试使用像@ entries.count(["Boolean Field 1",true]这样的东西)我看到它的方式,有两种方法来计算这些值:一种是在模型上通过执行SQL查询(丑陋)或在通过使用计数器查看级别(再次丑陋.)还有其他方法可以实现我想要的吗?
感谢您的时间,
Angelos Arampatzis