Introduction
Generics are new feature provided with version 2.0 of the Microsoft.Net framework. Generic classes and methods combine re-usability, type safety and efficiency in a way that there non-generics counterparts do not/cannot.
In this part some features of ArrayLists and there shortcomings/limitations will be discussed. The codein this article has been written in Visual Studio 2005 in C#.
Earlier ArrayLists used to server the purpose, but that in a certain limit. Moreover, using ArrayLists to store different types came as a good performance cost. At the client end it shows our desired type that we are storing in the ArrayList but internally there's much more that goes on.
Example
System.Collections.ArrayList myList = new System.Collections.ArrayList();
myList.Add(22);
myList.Add("C# Generics");
myList.Add(22.45);The usage convenience that is perceived above comes at a cost. Any reference or value type that is stored or added in the ArrayList (myList) is implicitly upcasted to System.Object type. And while retrieval, the reverse happens- downcasting to the appropriate type takes place.
Moreover, there is compromise on the Type Safety front also. Consider the code below
int item = 0;
// This will cause an InvalidCastException
foreach (int x in myList)
{
item = item + x;
}The reason is evident.
In .Net 1.x type-safety was achieved by writing your own typed ArrayList. But again, in that case re-usability was a major issue. Consider the following code.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace ArrayListSample
{
#region Person Class
class Person
{
String Name;
Int32 Age;
String Address;
#region Constructor
public Person() { }
public Person(String Name, Int32 Age, String Address)
{
this.Name = Name;
this.Age = Age;
this.Address = Address;
}
public Person(String Name, Int32 Age)
{
this.Name = Name;
this.Age = Age;
this.Address = String.Empty;
}
public Person(String Name, String Address)
{
this.Name = Name;
this.Age = 0;
this.Address = Address;
}
public Person(String Name)
{
this.Name = Name;
this.Age = 0;
this.Address = String.Empty;
}
#endregion
}
#endregion
#region PeopleCollection Class
class PeopleCollection : IEnumerable
{
private ArrayList arPeople = new ArrayList();
public PeopleCollection()
{
}
#region Methods
public void AddPeople(Person p)
{
arPeople.Add(p);
}
public void ClearPeople()
{
arPeople.Clear();
}
int Count;
public int PeopleCount
{
get { return Count; }
}
#endregion
#region IEnumerable Members
public IEnumerator GetEnumerator()
{
return arPeople.GetEnumerator();
}
#endregion
}
#endregion
class Client
{
public static void Main()
{
PeopleCollection myPeople = new PeopleCollection();
myPeople.AddPeople(new Person("Saurabh", 24, "Gurgaon"));
myPeople.AddPeople(new Person("Manu"));
foreach (Person person in myPeople)
{
Console.WriteLine(person);
}
Console.ReadLine();
}
}
}The above code does achieve type safety but then we will have to write an almost identical custom collection for each type we wish to contain. Because
myPeople.AddPeople(new Car());would be a compile time error, since the code/approach above achieves type safety. So at the end of the day it will be a big nightmare !!
So above we find some of the limitations of ArrayLists. In the nextarticle we will find how Generics solve the issues discussed above.
Ranganath PrasadPosted Dec 29, 2010, 4:07 PM
the concept is nice. but there are a number of mistakes. first of all, while assigning values through constructor you must use the keyword ' this ' here.(because parameters are same as instance variables) and second is, while display the items in the arraylist using foreach here, must specify object members also Console.WriteLine(person.name); Console.WriteLine(person.age)); ...
basam nathPosted Apr 13, 2006, 1:11 PM
Mr.Mishra, I am in a training class learning c# and its a great timing to read your article about the arraylists. Comment: I enjoyed your article and agree with you 100% percent. Question: How is arraylist implemented in the memory. Is it implemented like a linked list? Comment: It will be of a great help if your produce an article, discussing at higher level what are pros and cons of using various collections like arraylists, stacks, queues, Hash table, and what are the pros and cons of using simple arrays (not a collection). thanks, regards nath reddy [email protected]