zoukankan      html  css  js  c++  java
  • 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 which 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 store 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 definitions 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!

    About the author

    Name :

    Bipin Joshi

    Email :

    webmaster@dotnetbips.com

    Profile :

    Bipin Joshi is the webmaster of DotNetBips.com. He is the founder of BinaryIntellect Consulting (www.binaryintellect.com) - a company providing training and consulting services on .NET framework. He conducts intensive training programs in Thane/Mumbai for developers. He is also a Microsoft MVP (ASP.NET) and a member of ASPInsiders.

  • 相关阅读:
    快递员—你惹不起的“组织”
    BF的真正意义
    读书:《四点起床-最养生和高效的时间管理》
    你究竟有多想成功?汗水铸造巨星(中英结合版含视频)
    美国女生给我的六个惊诧(转)
    据说是世界上最健康的作息
    少走弯路的十条忠告
    编程—休息片刻的好处
    学电脑必懂的53个英文单词和缩写
    四件在我步入职业软件开发生涯那天起就该知道的事情
  • 原文地址:https://www.cnblogs.com/zsxfbj/p/175297.html
Copyright © 2011-2022 走看看