Basics of Generic Classes in C#

Introduction

I would like to share the basics of generics. Here first we will learn the problem statement and then resolve the problem using Generics.

Problem statement

First create a class as in the following code.

class CompareClass

{

    public bool Compare(string x, string y)

    {

        if (x.Equals(y))

            return true;

        else

            return false;

    }

 

    public bool Compare(int x, int y)

    {

        if (x.Equals(y))

            return true;

        else

            return false;

    }

}

Understanding the code

  1. We created class the CompareClass
  2. Here we created two compare methods, one for the string data type and the second for an int data type.
  3. So the class contains overloaded compare functions.

Problem

So if we need to compare other datatypes like decimal, double and objects then the code above would not work and we need to create another method to compare the proposed data type. We can solve this problem with generics.

Problem 

Solution

Create a class as in the following code:

class CompareGenericClass<T>

{

    public bool Compare(T x, T y)

    {

        if (x.Equals(y))

            return true;

        else

            return false;

    }

}

Understanding the code

  1. We created the class CompareGenericClass with the input parameter T so the class is CompareGenericClass<T>
  2. Here T would be the datatype.
  3. If we want to compare strings then the following style would be used to create an object of the class:

    CompareGenericClass<string> Ocompare = new CompareGenericClass<string>();
    bool stringResult=Ocompare.Compare("DEVESH", "DEVESH");

    CompareGenericClass
     
  4. Since we passed T as a string the Compare method will accept only a string type of parameter.
  5. We did the same for Interger as well.

    CompareGenericClass<int> oIntcompare = new CompareGenericClass<int>();         bool integerresult=oIntcompare.Compare(5, 6);

    Compare method
     
  6. Here with this class we do not need to overload the Compare method because this compare method accepts only a parameter that has been passed during creation of class objects.
  7. Using this class we can avoid such problems that have been discussed above.

Output of code

Output

Complete code
 

class CompareClass

{

    public bool Compare(string x, string y)

    {

        if (x.Equals(y))

        return true;

        else

        return false;

    }

    public bool Compare(int x, int y)

    {

        if (x.Equals(y))

        return true;

        else

        return false;

    }

}

class CompareGenericClass<T>

{

    public bool Compare(T x, T y)

    {

        if (x.Equals(y))

        return true;

        else

        return false;

    }

}

class Program

{

    static void Main(string[] args)

    {

        CompareClass obj = new CompareClass();

        bool intresult = obj.Compare(5, 7);

        Console.WriteLine("int comapre result:" + intresult);

        bool stringresult = obj.Compare("DEVESH", "DEVESH");

        Console.WriteLine("string comapre result:" + stringresult);

        CompareGenericClass<string> Ocompare = new CompareGenericClass<string>();

        bool stringResult = Ocompare.Compare("DEVESH", "DEVESH");

        Console.WriteLine("Generic string comapre result:" + stringResult);

        CompareGenericClass<int> oIntcompare = new CompareGenericClass<int>();

        bool integerresult = oIntcompare.Compare(5, 6);

        Console.WriteLine("Generic int comapre result:" + integerresult);

    }

 

Conclusion

We have learned how to use a Generic class and why we need to use it.