根据编译器版本,许多Spring.Collections.TCollections.Create
方法都在应用编译器无法实现的功能:将实现折叠成一个非常纤细的泛型类。有些方法是从 XE 开始的,有些方法是从 XE7 开始的(GetTypeKind
内在函数可以在编译时进行类型解析 -TCollections.CreateList<T>
例如参见无参数)。
如果您要创建许多不同类型的IList<T>
(其中 T 是类或接口),这将大大减少二进制文件的大小,因为它将它们折叠成TFolded(Object|Interface)List<T>
. 但是,通过界面,您可以按照指定的方式访问项目,并且该ElementType
属性返回正确的类型,而不仅仅是TObject
or IInterface
。在柏林,它为每个不同的对象列表添加不到 1K,而如果由于您可以在IList<T>
.
至于当 T 是一个完全符合设计的类时,TCollections.CreateList<T>
返回一个IList<T>
由 a 支持的。TFoldedObjectList<T>
由于OwnsObject
已通过,因为False
它具有与 a 完全相同的行为TList<T>
。
Spring4D 集合是基于接口的,因此接口后面的类无关紧要,只要它的行为符合接口的约定即可。
确保您只携带列表IList<T>
而不携带列表TList<T>
- 您可以通过两种方式创建它们(具有我之前提到的使用这些TCollections
方法时的好处)。在我们自己的应用程序中,有些地方仍在使用类的构造函数,而许多其他地方则使用Spring.Collections.TCollections
.
顺便提一句:
我在您的 fork 中看到了活动,并且 imo 不需要实现 Map/Reduce,因为它已经存在。由于 Spring4D 集合是在 .NET 之后建模的,因此它们被称为Select
和Aggregate
(请参阅参考资料Spring.Collections.TEnumerable
)。但是它们不能IEnumerable<T>
直接使用,因为接口不能具有通用参数化方法。