快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

Creating Collection Classes in C#

Creating Collection Classes in C#

Introduction
Collection classes are used frequently in .NET. For example, classes like ArrayList, NamevalueCollection, HashTable are collection classes. One peculiar thing of collection classes is that they can be used in foreach(...) loop in C#. VB.NET has similar construct For...Each. Your custom classes can also be iterated in this way if you implement certain interfaces. In this article we will see how to code collection classes using C#.
Sample Class
For our example we will assume that we need some data structure in whch we will store list of book titles. We should be able to add, remove and iterate through the set of book titles. We will create a collection class called Books that will stire these titles. Before going in to the details of creating collection class let us see the Books class in its most basic form.
namespace CollectionClass
{
class Books
{
        private ArrayList m_booktitles;
        public Books()
        {
               m_booktitles=new ArrayList();
        }

        public void Add(string booktitle)
        {
               m_booktitles.Add(booktitle);
        }

        public void Remove(string booktitle)
        {
               m_booktitles.Remove(booktitle);
        }
}
}
You will notice that we have provided easy way to add and remove items to the books class via ArrayList. However, we can not iterate the class using foreach construct. In order to achieve this we have to :
  • Implement System.Collections.IEnumerable interface in Books class
  • Create a class that implements System.Collections.IEnumerator interface

IEnumerable Interface
IEnumerable interface has only one method GetEnumerator() that returns a class that implements IEnumerator interface. Following code shows Books class after implementing IEnumerable interface.
class Books:IEnumerable
{
        public ArrayList m_booktitles;

        public Books()
        {
               m_booktitles=new ArrayList();
        }

        public void Add(string booktitle)
        {
               m_booktitles.Add(booktitle);
        }

        public void Remove(string booktitle)
        {
               m_booktitles.Remove(booktitle);
        }

        public IEnumerator GetEnumerator()
        {
               return new BooksEnumerator(this);
        }
}
The GetEnumerator() method returns an instance of class BooksEnumerator that we will discussed next.
IEnumerator Interface
IEnumerator interface resides in System.Collection namespace. This interface has following method and property definations that we need to implement:
public bool MoveNext()
{
}
public void Reset()
{
}
public object Current
{
}
This MoveNext tells us what to do when user wants to scroll forward in our collection. Reset sets the initial position of the collection i.e. -1. Current retrieves current item from the collection.
BooksEnumerator Class
Here is complete code of a class that implements IEnumerator interface.
class BooksEnumerator : IEnumerator
{
        private int position = -1;
        private Books books;

        public BooksEnumerator(Books books)
        {
               this.books = books;
        }

        public bool MoveNext()
        {
               if (position < books.m_booktitles.Count - 1)
               {
                       position++;
                       return true;
               }
               else
               {
                       return false;
               }
        }

        public void Reset()
        {
               position = -1;
        }

        public object Current
        {
               get
               {
                       return books.m_booktitles[position];
               }
        }
}
We passed our Books class to the constructor of this class. This class then maintains a pointer to the current position in the collection.
Using Your Collection Class
You can now use your Books collection class in your code as follows:
class Class1
{
static void Main(string[] args)
{
        Books b=new Books();

        b.Add("vb.net");
        b.Add("c#");
        b.Add("asp.net");

        foreach(string s in b)
        {
               Console.WriteLine(s);
        }
}
}
Keep coding!



返回类别: 教程
上一教程: ADO+ 引导数据种类的演变(转自 ms 一)
下一教程: 我对.Net技术中asp.net应用的一点看法

您可以阅读与"Creating Collection Classes in C#"相关的教程:
· Creating and displaying a DataSet in Dreamweaver MX
· Creating dynamic data structures(from flws)
· Collection and Object Ordering
· .net remoting范例
· ASP+中取代ASP的RS(Remote Scripting)技术的Framework
    微笑服务 优质保证 索取样品