CollectionBase类

原创 2006年05月22日 16:34:00
      CollectionBase 类为强类型集合提供 abstract 基类。这是MSDN上的解释,(什么叫强类型呢?引用一位Bloger上的话:所谓强类型,用简单点的话说就是可以.出来的类型,比如book.Name, book.Price。那什么又是.不出来的类型呢?自然是比较间接的类型了,比如集合、表等其他结构的类型,对于这种类型,我们只能通过其索引找出对象来,比如books[0]。也许到现在为止读者还看不出来有什么不妥的,但对于这种.不出来的类型来说,调用不直观是第一,操作多且难懂是第二,所以在某些时候很有必要将其强类型化,尤其是(也应当是)在我们知道这些.不出来的类型所拥有的结构时。可能我这样说读者都听不太明白,让我们来举个例子。很典型的例子就是当我们使用DataTable时,我们通过DataTable来保存对某一张数据表的数据,我们只用这个DataTable来保存这张数据表,那么我肯定知道这个DataTable的结构,那为什么我不能.出来呢?比如customerRow1.CustomerName?这样调用不是很方便吗?要比.不出来方便很多,而且编译时就可知道这个强类型的公开结构,不会写错,同样也可以将它当作一个真正的类型来处理(比如传递到一个专门处理它的方法),总之一句话来说就是它是可预知的,类型安全的。以下是强类型的优缺点:优点:
  1. 调用简单明了。
  2. 可预知的,类型安全的。
  3. 可以提高代码的可阅度,使代码逻辑更清晰。)

以前我们使用集合,一般实现IList集合,再内建ArrayList实现,下面这个是购物车里面的一段:

public class Cart : IEnumerable {
  private ArrayList _items = new ArrayList();

  private decimal _total=0;
  public IEnumerator GetEnumerator() {
   return _items.GetEnumerator();
  }
  public decimal Total {
   get { return _total; }
   set { _total = value; }
  }
  public int Count {
   get { return _items.Count; }
  }
  public CartItemInfo this[int index] {
   get { return (CartItemInfo)_items[index]; }
  }
  public void Add(string ItemId) {
   foreach (CartItemInfo cartItem in _items) {
    if (ItemId == cartItem.ItemId) {
     cartItem.Quantity++;
     cartItem.InStock = (GetInStock(ItemId) - cartItem.Quantity) >= 0 ? true : false;
     _total = _total+(cartItem.Price*cartItem.Quantity);
     return;
    }
   }

   Item item = new Item();

   ItemInfo data = item.GetItem(ItemId);
   CartItemInfo newItem = new CartItemInfo(ItemId,data.Name, (data.Quantity >= 1), 1, (decimal)data.Price);
   _items.Add(newItem);
   _total = _total+(data.Price);
  }

只贴了一段不完整的代码,现在再看看CollectionBase类的例子

public class textBoxArray:System.Collections.CollectionBase
 {
  private readonly System.Web.UI.Control HostPage;
  //构造函数
  public textBoxArray(System.Web.UI.Control Host)
  {
   HostPage=Host;
  }
  //addNewTextBox方法添加一个textbox控件
  public void addNewTextBox()
  {
   //this.List.Add(this.Count.ToString());

   //建一个新的textbox实例.
   TextBox aTextBox=new TextBox();
   //将其添加到集合的内部列表
   this.List.Add(aTextBox);
   //将TextBox添加到由HostForm字段引用的窗体的集合列表中
   HostPage.Controls.Add(aTextBox);
   //设置初始属性
   aTextBox.Style["Left"]=Convert.ToString((Count-1)*130+70);
   aTextBox.Style["Top"] = Convert.ToString(160);
   aTextBox.Width=120;
   aTextBox.BorderStyle=BorderStyle.Outset;
   aTextBox.ID=this.Count.ToString();
   //初始值
   aTextBox.Text="TextBox示例";
   aTextBox.ForeColor=System.Drawing.Color.Blue;
   
   
  }
  //创建索引
  public TextBox this [int index]
  {
   get
   {
    return (TextBox)this.List[index];
   }
  }
  //Remove方法用来删除控件
  public void Remove()
  {
   if(this.Count>0)
   {
    HostPage.Controls.Remove (this[this.Count -1]);
    this.List.RemoveAt(this.Count-1);
   }
  }
 }

清楚了吧,两者之间区别。CollectionBase类作为一个抽象的基类,MS提供一个这样的类确实够照顾我们的。

IList 接口  表示可按照索引单独访问的对象的非泛型集合。
ICollection 接口  定义所有非泛型集合的大小、枚举数和同步方法。

System.Collections.Generic 好象在.NET FRAMEWORK 2.0是专门定义泛型集合的命名空间。

Java类的共同父类Object

Java.lang.Object类是所有Java类的最高层次父类。其内部不存在任何属性,但是存在几个经典方法如下:一.public int hashcode()–功能是返回当前对象的哈希码,系统会自动...
  • yao____yao
  • yao____yao
  • 2016年07月20日 19:08
  • 1313

所有类的基类——Object

Object public class Object java.lang.Object Class Object is the root of the class hierarch...
  • upset7117
  • upset7117
  • 2017年01月10日 15:22
  • 420

类和结构的区别

区别如下: 1.存储类型:结构是值类型,存储在
  • yikeshu19900128
  • yikeshu19900128
  • 2014年10月23日 17:02
  • 1783

UML类图中类与类之间的关系及画法

类与类之间的关系通常有4种,即依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)、实现关系(Realization) 依赖关系(Depen...
  • ILOVESMJ
  • ILOVESMJ
  • 2016年07月18日 10:42
  • 1572

类内距离&类间距离

特征选择,就是降维。 特征选择之前需要进行类别可分性测度,最为直观的是基于距离的可分性测度:类内距离&类间距离 类内距离【Ref1】:类内距离 平方形式 即为: 类协方差矩阵迹的2倍。 2*tr...
  • ttxzszxy
  • ttxzszxy
  • 2016年10月25日 17:15
  • 4736

详解JS类概念的实现

众所周知,JS并没有类(class)的概念,虽然说ES6开始有了类的概念,但是,这并不是说JS有了像Ruby、Java这些基于类的面向对象语言一样,有了全新的继承模型。ES6中的类,仅仅只是基于现有的...
  • alex8046
  • alex8046
  • 2016年07月18日 11:27
  • 3580

如何对一个类进行扩展?

如何对一个类进行扩展? 在对类的处理中,我们会应用到的主要由四种方式, 一、    继承(inherit) 面向对象程序有三大特性,封装、继承、多态。    封装就是对一个类或者我们需要的一系...
  • V5V6_neil
  • V5V6_neil
  • 2014年07月06日 20:48
  • 745

java中顶级父类Object

Object作为java中所有类的父类,是因为在其中存放了一些使用频率非常高的方法,为了避免重复编写,所以写了一个顶级父类。public class Object { private sta...
  • colin_yjz
  • colin_yjz
  • 2015年07月04日 09:35
  • 1702

Java中几个常用类总结

一. System: 1.     首先是System类,因为从一开始从接触java起,我们就无时无刻都在接触它,经常用它来向屏幕,向控制台打印输出一些信息,System.out.println(“h...
  • hua631150873
  • hua631150873
  • 2013年09月17日 23:01
  • 10683

类和类之间的关系

在设计模式中类与类之间的关系主要有6种:依赖、关联、聚合、组合、继承、实现,它们之间的耦合度依次增加。 1.依赖 依赖关系的定义为:对于两个相对独立的对象,当一个对象依赖另一个对象的服务时,这两...
  • chongji_liang
  • chongji_liang
  • 2016年07月04日 11:41
  • 2051
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CollectionBase类
举报原因:
原因补充:

(最多只允许输入30个字)