Click here to Skip to main content
Licence 
First Posted 23 Sep 2004
Views 126,967
Bookmarked 37 times

Generics in C# 2.0

By | 23 Sep 2004 | Article
An introduction to Generics in C#.

Introduction

We are going to take a look at a new cool feature of C# 2.0. It is not constrained to C# but also available with other .NET languages.

As the projects get more complicated, programmers increasingly need a means to better reuse and customize their existing component-based software. To achieve such a high level of code reuse in other languages, programmers typically employ a feature called Generics. Using Generics, we can create class templates that support any type. When we instantiate that class, we specify the type we want to use, and from that point on, our object is "locked in" to the type we chose.

Let us look at an example of how we can create a generic class using C# 2.0.

public class MyCustomList<MYTYPE> 
{
  private ArrayList m_list = new ArrayList(); 
  public int Add(myType value)
  {
    return m_list.Add(value);
  } 

  public void Remove(myType value)
  {
    m_list.Remove(value);
  } 

  public myType this[int index]
  {
    get
    {
      return (myType)m_list[index];
    }
    set
    {
      m_list[index] = value;
    }
  }
}

Here, MyCustomList is built on an ArrayList. But its methods and indexer are strongly typed. Here <myType> is really just a placeholder for whatever type you choose when you create the class. This placeholder is defined in angled brackets after the name of the class. Now, let us look at how to create an instance of the class MyCustomList:

MyCustomList<int> list = new MyCustomList<int>();
// Add two integers to list
list.Add(1);
list.Add(33);
// The next statement will fail and wont compile
list.Add("Emp");

If we want our MyCustomList to store strings, it can be done as follows:

MyCustomList<string> list = new MyCustomList<string>();

We can have multiple types in our base template class. Just separate each type with a comma in between the angular brackets.

public class MySecondCustomList<myType,mySecondType>
{...}

So far so good.

Constraints

Now, we will look at applying constraints by which we can restrict what types are allowed. For e.g., if we want to restrict our type to only the types implementing IDisposable interface, we can do it as follows:

public class MyCustomList<myType>
  where myType : IDisposable
{ ... }

If there are more than one constraints, we can separate it by commas. E.g.:

public class MyDictionary<KeyType, ValType> where
KeyType : IComparable,
KeyType : IEnumerable

Generics are not limited to classes. They can also be used in structures, interfaces, and delegates. We can even use generics to parameterize a method by type. E.g.:

public myType MyGenericFunction<myType>(myType item)
{
  ........
  return item;
}

Conclusion

In general, Generics allow programmers to author, test, and deploy code once, and then reuse that code for a variety of different data types. In addition, generics are checked at compile-time. When your program instantiates a generic class with a supplied type parameter, the type parameter can only be of the type your program specified in the class definition.

History

Version 1.0

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Ansil

Software Developer (Senior)

India India

Member

Ansil hails from Trivandrum.
He works for Microsoft india (R&D ).
he blogs at http://ansilf.spaces.live.com/
 

 
"First they ignore you;then they laugh at you ;then they fight you ;then you win "

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 4 PinmemberAmir Hossein Jamshidi7:04 9 May '12  
GeneralMy vote of 5 Pinmemberllcutealill12:23 10 Jan '12  
Questiontype o? PinmemberPhillip Holmes2:55 8 Sep '06  
AnswerRe: type o? PinmemberVuNic5:26 2 Feb '09  
Also a typo here
public class MyCustomList<MYTYPE> 

 




OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus

 
Best wishes to Rexx[^]

GeneralThe list (in System.Collections.Generic) already does it! PinmemberEvandrojr9:43 5 Nov '04  
GeneralIncorrect comment PinprotectorHeath Stewart5:29 23 Sep '04  
GeneralRe: Incorrect comment PinmemberAnsil17:38 23 Sep '04  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120604.1 | Last Updated 23 Sep 2004
Article Copyright 2004 by Ansil
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid