Klasy generyczne (ogólne) w języku C#

Klasy generyczne - obiekty tej samej klasy ale różnych typów.


Klasy generyczne pozwalają na tworzenie obiektów tej samej klasy dla różnych typów danych. Dopiero przy tworzeniu obiektu klasy generycznej podajemy typ danych na którym będzie operował.

Przykładowy kod klasy generycznej:

class Program
{
 
    static void Main(string[] args)
    {
 
        KlasaGeneryczna<int> obiektKlasyGenerycznej = new KlasaGeneryczna<int>();
        obiektKlasyGenerycznej.Dodaj(12);
 
        KlasaGeneryczna<string> obiektKlasyGenerycznej1 = new KlasaGeneryczna<string>();
        obiektKlasyGenerycznej1.Dodaj("napis");
 
 
        Console.ReadKey();
    }
 
    public class KlasaGeneryczna<T>
    {
        public void Dodaj(T parametr)
        {
            Console.WriteLine("Wynik metody Dodaj: " + parametr);
        }
    }      
        
}
Możliwe jest ograniczenie typów jakie może przyjąć klasa generyczna. Aby ograniczyć typ należy użyć słowa kluczowego where:
public class KlasaGeneryczna<T> where T :  struct
{
    public void Dodaj(T parametr)
    {
        Console.WriteLine("Wynik metody Dodaj: " + parametr);
    }
}  
W powyższym przypadku nie będzie możliwe przekazanie, jako parametru typu string, ponieważ string jest klasą a nie strukturą jak typ int. Aby można było przekazać typ string należy użyć następującego kodu:
public class KlasaGeneryczna<T> where T :  class
Możliwe jest również przekazanie kilku parametrów generycznych:
class Program
{
 
    static void Main(string[] args)
    {
 
        KlasaGeneryczna<int,string> obiektKlasyGenerycznej = new KlasaGeneryczna<int,string>();
        obiektKlasyGenerycznej.Dodaj(12,"napis");
 
        KlasaGeneryczna<int, int> obiektKlasyGenerycznej1 = new KlasaGeneryczna<int, int>();
        obiektKlasyGenerycznej1.Dodaj(12,12);
 
        Console.ReadKey();
    }
 
    public class KlasaGeneryczna<T,T1> where T :  struct
    {
        public void Dodaj(T parametr, T1 parametr1)
        {
            Console.WriteLine("Wynik metody Dodaj: " + parametr + " " + parametr1);
        }
    }      
        
}

Komentarze facebook (polub nasz profil na FB aby je zobaczyć):