65.9K
CodeProject 正在变化。 阅读更多。
Home

如何创建用户定义的集合

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.60/5 (9投票s)

2006年10月7日

3分钟阅读

viewsIcon

51673

downloadIcon

362

如何创建用户定义的集合

引言

集合是相似对象的集合,只能通过一个引用来访问。在本文中,我假设您了解集合的用法和好处,但如果您需要了解更多关于它们的信息,您可以找到这篇文章会很有用。

背景

需要使用我们自己的自定义集合,而不是使用Microsoft .NET框架提供的对象,这 komt 当您需要为您的强类型集合添加更多功能或在不暴露新概念的情况下显示不同类型的行为时。当然,这取决于您的需求,根据您的开发目标。

为什么是强类型集合

尽管在操作业务对象方面具有自定义行为,但您可能需要通过实现强类型集合来实现这些目标

业务逻辑完整性

您可以在自定义集合中实现业务逻辑,例如在将业务对象添加到集合之前检查要存储的业务对象的类型,或验证对象的属性以获得所需的结果。

事务级处理

使用自己的集合,您可以定义集合级别的事务以实现完整性。例如,如果您有一个集合中有 100 个用户,并且您想一次性将所有用户的 ID 更新到数据库中,并且在出现问题时,您有一个回滚选项,您就必须使用自己的集合并实现所有这些检查。

批量处理

与其单独为每个业务对象调用处理操作,不如在集合级别执行该功能并支持该集合中的批量处理,从而获得更高效的设计。

实现一个简单的集合

在这里,我将为我称为 User 的业务类型实现一个非常简单的强类型集合。在此实现中,我展示了您可以通过添加一些额外的检查和方法来进一步自定义代码的位置。

User 类

要实现任何集合,您需要一个业务对象。在这里,我创建了一个简单的 User 类来演示我的集合
public class User { public User ( ) { } public User ( String userName , String password ) { this.userName = userName; this.password = password; } private String password; public String Password { get { return password; } set { password = value; } } private String userName; public String UserName { get { return userName; } set { userName = value; } } 
的用法

UserCollection 类

我实现了一个非常简单的集合类,并将该类赋予了许多功能,以便您可以在一个对象中访问所有方法。我使用了 CollectionBase 类作为基类,因此可以使用 foreach 循环访问集合中的对象。IEnumerator 在那里,所以您可以获得集合的枚举。所有必需的方法都已实现,我已尽一切努力使代码简单。对于 CollectionBase,您需要实现 Add, Remove 方法
 public class UsersCollection : CollectionBase , IEnumerable , IEnumerator { private int index = -1; public UsersCollection ( ) { this.index = -1; } public void Add ( User user ) { /* * Example for applying business Logic * */ if ( user != null ) { throw new Exception ( "Your passed User Object is null" ); } if ( user.Password.Length < 8 ) { throw new Exception ( "User's password can not be less than 8 characters" ); } /* * Normal behaviour of a Collection */ this.List.Add ( user ); } public void Remove ( User user ) { this.List.Remove ( user ); } public User this [ int index ] { get { return ( User ) this.List [ index ]; } set { this.List [ index ] = value; } }  #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator ( ) { return this; }  #endregion  #region IEnumerator Members public Object Current { get { return this.List [ index ]; } } public bool MoveNext ( ) { this.index++; return ( this.index < this.List.Count ); } public void Reset ( ) { this.index = -1; }  #endregion public void Save ( UsersCollection collection ) { try { /* * Insert all items of */ } catch ( Exception e ) { /* * if you get an error in between Rollback */ throw e; } finally { } } } 

自定义

为了向您展示我们可以在集合类中进行哪些类型的添加,我在代码中为您提供了两件事。首先是检查,例如 Add 中执行的操作,或者名为 Save 的新方法,该方法可能用于事务或批量处理。

结论

也许在 .Net Framework 2.0 中,我们有了泛型这个旧式集合的更好替代品,但我仍然认为可能存在一些情况,这些旧式集合会很有用。在我的下一篇文章中,我将探讨泛型的基本概念。最后,我想感谢 Mayank .C 给了我这么好的主意。

© . All rights reserved.