Search Forum
(53671 Postings)
Search Site/Articles

Archived Articles
712 Articles

C# Books
C# Consultants
What Is C#?
Download Compiler
Code Archive
Archived Articles
Advertise
Contribute
C# Jobs
Beginners Tutorial
C# Contractors
C# Consulting
Links
C# Manual
Contact Us
Legal

GoDiagram for .NET from Northwoods Software www.nwoods.com


 
Printable Version

C# Custom Collection Implementation
By Andrew D. Tollington

This sample shows a simple custom collection implementation in C# with the .NET Framework.

using System;
using System.Collections;

namespace Personal.Demos.Simple{

    public class MainApp{
        
        //entry point 'Main'
        
        public static void Main(){
            
            //get us some Widgets
            Widgets MyWidgets = Initialize();        
            
            Console.WriteLine("Using 'foreach' - ");
            
            //enumerate through the collection with
            //the foreach constuct.
            
            foreach(Widget W in MyWidgets){
                //call the same method on each item in
                //the collection.
                Console.WriteLine(W.AMethod());
            }
            
            Console.WriteLine("Using 'Indexers' - ");
            
            //enumerate through the collection with
            //it's indexer.
            
            for(int i=0; i < MyWidgets.Count ; i++){
                //call the same method on each item in
                //the collection.
                Console.WriteLine(MyWidgets[i].AMethod());
            }
        
        }
        
        //fill up a 'Widgets' collection with...
        //...well some Widgets.
        
        private static Widgets Initialize(){
        
            Widgets colWidgets = new Widgets();
            Widget objWidget;
            int i;
            
            for(i=0 ; i < 10 ; i++){
                objWidget = new Widget();
                objWidget.Number=i;
                colWidgets.Add(objWidget);
            }
            
            return colWidgets;
        }
    
    }

    //*****************************************************
    //the individual Widget class

    public class Widget{
    
        public int Number=0;
        
        public virtual string AMethod(){
   
            return "This Widget's Number is : " 
                                + Number.ToString();
        
        }
    }
    
    //*****************************************************
    //Widgets collection class MUST derive from 
    //System.Collections.CollectionBase
    
    public class Widgets:CollectionBase{
    
        public virtual void Add(Widget NewWidget){
            //forward our Add method on to 
            //CollectionBase.IList.Add   
            this.List.Add(NewWidget);
        
        }
        
        //this is the indexer (readonly)
        public virtual Widget this[int Index]{
        
            get{
                //return the Widget at IList[Index]
                return (Widget)this.List[Index];
            
            }
        
        }
    }
    //*****************************************************
}