Generics provides the type safe code with re-usability like as algorithm. In algorithms such as sorting, searching, comparing etc. you don’t specify what data type(s) the algorithm operates on. The algorithm can be operates with any types of data. In the same way Generics operate, you can provide different data type to Generics. For example, a sorting algorithm can operates on integer type, decimal type, string type, DateTime type etc.
In this article, I will demonstrate the advantage of Generics over Collections. Following are the main advantage of Generics.
Now if you thinking you can make fool to the compiler by passing an integer array while it is asking for a float, you are wrong. Compiler will shows the error at compile time like as:
In this article, I will demonstrate the advantage of Generics over Collections. Following are the main advantage of Generics.
Code Re-usability with Generics
Suppose, you required to sort the integer and floating type numbers, then let's see how to do in collections and generics.How to do it using Collections
- //Overloaded sort methods
- private int[] Sort(int[] inputArray)
- {
- //Sort array
- //and return sorted array
- return inputArray;
- }
- private float[] Sort(float[] inputArray)
- {
- //Sort array
- //and return sorted array
- return inputArray;
- }
How to do it using Generics
Here, T is short for Type and can be replaced with the Type defined in the C# language at runtime. So once we have this method, we can call it with different data types as follows and can see the beauty of Generics. In this way Generics provide code re-usability.
- private T[] Sort(T[] inputArray)
- {
- //Sort array
- //and return sorted array
- return inputArray;
- }
Now if you thinking you can make fool to the compiler by passing an integer array while it is asking for a float, you are wrong. Compiler will shows the error at compile time like as:
Type Safety with Generics
Suppose, you want to make a list of students, then let's see how to do in collections and generics.How to do it using Collections
In collections we can use ArrayList to store a list of Student objects like as:
- class Student
- {
- public int RollNo{get; set;}
- public string Name{get; set;}
- }
- //List of students
- ArrayList studentList = new ArrayList();
- Student objStudent = new Student();
- objStudent.Name = "Rajat";
- objStudent.RollNo = 1;
- studentList.Add(objStudent);
- objStudent = new Student();
- objStudent.Name = "Sam";
- objStudent.RollNo = 2;
- studentList.Add(objStudent);
- foreach (Object s in studentList)
- {
- //Type-casting. If s is anything other than a student
- Student currentStudent = (Student)s;
- Console.WriteLine("Roll # " + currentStudent.RollNo + " " + currentStudent.Name);
- }
Problem with Collections
Suppose by mistake you have added a string value to ArrayList like asSince ArrayList is a loosely typed collection and it never ensure compile-time type checking. Hence above statement will compile without error but it will throw an InvalidCastException at run time when you try to cast it to Student Type.
- studentList.Add("Generics"); //Fooling the compiler
How to do it using Generics
In generics we can use generic List to store a list of Student objects like as:
- List lstStudents = new List();
- Student objStudent = new Student();
- objStudent.Name = "Rajat";
- objStudent.RollNo = 1;
- lstStudents.Add(objStudent);
- objStudent = new Student();
- objStudent.Name = "Sam";
- objStudent.RollNo = 2;
- lstStudents.Add(objStudent);
- //Looping through the list of students
- foreach (Student currentSt in lstStudents)
- {
- //no need to type cast since compiler already knows that everything inside
- //this list is a Student
- Console.WriteLine("Roll # " + currentSt.RollNo + " " + currentSt.Name);
- }
No comments:
Post a Comment