除了那些预定义的集合类和用来创建自定义类的类接口,还有一些用来派生强类型集合类(strongly typed collection class)的抽象类。这些类为使你的对象能够存储特定的数据提供了基础。在这篇文章中,我将向你演示怎样在一个多层应用程序的数据存取层创建一个强类型集合类。
.NET Framework 和Visual Studio为你提供了三种主要方法在应用程序中表示数据:
尽管ADO.NET和System.Xml命名空间提供了标准的类来表示数据,但是,强类型是自定义类所具有的优势。它使得对象处理的数据更容易被理解,而不需要与ADO.NET和XML编程模型打交道。这在大型系统里是很有用的,特别是当设计者定义了由自定义类所组成的数据访问层,并把设计向组织内的其他程序员发布的时候。当然,现在自定义类的使用有下降的趋势:它们需要编更多的代码,因为你必须创建.NET Framework所缺少的对象关系映射层。
现在我们在VB.NET中创建一个Player类(List A)。它包含的数据是棒球球员的名字和其打击统计数据,并作为公有成员。典型的,这个类包括一个含参数的构造函数用来给成员变量Name赋值。这个类还包含一个RunsCreated方法,它通过进攻统计数据来计算这个球员有了多少次本垒得分。除了这个方法,还可以用属性来表示数据,那样就可以对集合里和属性相关的数据进行合法性检查。
这个类是被标记为SerializableAttribute的,这样通用语言运行库(CLR)就可以对它的公有和私有数据都进行序列化(serialize)以方便传输。在某些情况需要这样做,例如想把类Player的一个对象实例从一个程序空间转换到另一个使用.NET Remoting(远程处理Framework)的程序中,或者从一个XML Web Service中返回一个Player对象实例。
这个类还实现了IComparable接口和它的CompareTo方法。你将会看到,在把Player的实例包含到我们的强类型集合类中的时候,这些实现是很有用的。
创建一个自定义类是相对简单的,但是像Player这样的类只表示了一个简单实体,而不是一个集合。大多数数据处理程序需要对与问题相关实体的多个实例打交道。这就是强类型集合类出现的原因。