generics classes in c#

generics classes in c#
In this article [Show more]

    Generics Classes in C#

    Generics are a powerful feature in C# that allow developers to define classes with placeholders for the type of data they store or process. This capability leads to more reusable, maintainable, and type-safe code. This article explores the concept of generic classes in C# and illustrates their usage through examples.

    Introduction to Generic Classes

    A generic class in C# allows you to write a class that can work with any data type. It provides a way to define a class with a placeholder for the type it can contain or use. This approach ensures that you can create a class that can be used with different data types while still maintaining strong type checking at compile time.

    Advantages of Using Generic Classes

    Generic classes have several benefits:

    • Type Safety: Generics provide compile-time type checking. Errors are caught earlier, making the code more reliable.
    • Reusability: You can write a class once and reuse it with different types without rewriting it multiple times for each type.
    • Performance: Generics eliminate the need for boxing and unboxing when using value types, which improves performance.

    Defining a Generic Class

    To define a generic class, you specify a type parameter in angle brackets after the class name. Here's an example of a simple generic class:

     

    public class GenericList<T>
    {
        private List<T> _items = new List<T>();
    
        public void Add(T item)
        {
            _items.Add(item);
        }
    
        public T this[int index]
        {
            get { return _items[index]; }
        }
    }
    

    Implementing a Generic Class

    Once defined, you can create instances of a generic class by specifying the type argument inside angle brackets:

     

    var stringList = new GenericList<string>();
    stringList.Add("Hello");
    Console.WriteLine(stringList[0]); // Outputs "Hello"
    
    var intList = new GenericList<int>();
    intList.Add(100);
    Console.WriteLine(intList[0]); // Outputs 100
    

    Generic Class with Multiple Type Parameters

    Generic classes can have more than one type parameter. For instance, a dictionary class might require two types: one for the key and one for the value.

     

    public class GenericDictionary<TKey, TValue>
    {
        private Dictionary<TKey, TValue> _items = new Dictionary<TKey, TValue>();
    
        public void Add(TKey key, TValue value)
        {
            _items.Add(key, value);
        }
    
        public TValue this[TKey key]
        {
            get { return _items[key]; }
        }
    }
    

    Constraints on Type Parameters

    You can apply constraints to type parameters to specify what requirements the types used must meet, such as inheriting from a particular class or implementing a specific interface:

     

    public class GenericRepository<T> where T : IEntity
    {
        private List<T> _items = new List<T>();
    
        public void Add(T item)
        {
            _items.Add(item);
        }
    
        public T FindById(int id)
        {
            return _items.Find(item => item.Id == id);
        }
    }
    

    In this example, T must implement the IEntity interface, which guarantees that T has an Id property.

    Generics enhance the flexibility and effectiveness of C# programming by allowing for more generalized methods of handling data while preserving the rigor of type safety.


     

    Author Information
    • Author: Ehsan Babaei

    Send Comment



    Comments