Metody generyczne
Metody generyczne to metody, które mogą przyjmować różne typy danych jako argumenty. W języku C#, aby utworzyć metodę generyczną, należy określić typ generyczny po nazwie metody, używając znaku <>.
Metoda generyczna pozwala na uniwersalne i elastyczne wykorzystanie metody, dzięki czemu możemy używać tej samej metody dla różnych typów danych bez konieczności tworzenia osobnych metod dla każdego typu danych.
using System;
class MojaKlasa
{
public static T Max<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) > 0 ? a : b;
}
}
W powyższym przykładzie, metoda Max jest metodą generyczną, która przyjmuje dwa argumenty typu T i zwraca typ T. Metoda ta porównuje oba argumenty i zwraca ten, który jest większy. Możemy teraz użyć tej metody dla różnych typów danych, np. int, double, string.
using System;
class Sortowanie
{
public static void Posortuj<T>(T[] elementy, PorownanieDelegat<T> porownanie)
{
for (int i = 0; i < elementy.Length - 1; i++)
{
for (int j = i + 1; j < elementy.Length; j++)
{
if (porownanie(elementy[i], elementy[j]) > 0)
{
T tymczasowa = elementy[i];
elementy[i] = elementy[j];
elementy[j] = tymczasowa;
}
}
}
}
}
delegate int PorownanieDelegat<T>(T a, T b);
class Program
{
static void Main()
{
int[] liczby = { 3, 7, 4, 2, 8, 6 };
Sortowanie.Posortuj(liczby, PorownajLiczby);
foreach (int liczba in liczby)
{
Console.Write(liczba + " ");
}
// wyświetla: 2 3 4 6 7 8
string[] nazwiska = { "Kowalski", "Nowak", "Wiśniewski" };
Sortowanie.Posortuj(nazwiska, PorownajNazwiska);
foreach (string nazwisko in nazwiska)
{
Console.Write(nazwisko + " ");
}
// wyświetla: Kowalski Nowak Wiśniewski
}
static int PorownajLiczby(int a, int b)
{
return a.CompareTo(b);
}
static int PorownajNazwiska(string a, string b)
{
return string.Compare(a, b);
}
}
Kowalski Nowak Wiśniewski
W powyższym przykładzie używamy metody generycznej do implementacji systemu sortowania dla różnych typów danych.