Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Constrangeri pentru tipurile generice

Presupunem ca avem urmatoarea metoda generica in care declaram si initializam o variabila de tip T. Apoi, apelam metoda ToString.

        static void GenericMethod<T>(T obj)
        {
            T item = obj;
            Console.WriteLine(item.ToString());
        }

Acest cod functioneaza pentru toate tipurile de date din .Net. Chiar daca T este tip valoare sau tip referinta, in ambele cazuri variabila suporta atribuirea unei valori si apelul metodei ToString (metoda definita de Object).

Urmatoarea metoda generica va genera eroare la compilare: ‘T’ does not contain a definition for ‘CompareTo’ and no extension method ‘CompareTo’ accepting a first argument of type ‘T’ could be found (are you missing a using directive or an assembly reference?). Motivul este simplu, nu toate tipurile ofera metoda CompareTo.

        static T AnotherGenericMethod<T>(T obj1, T obj2)
        {
            if (obj1.CompareTo(obj2) < 0) return obj1;

            return obj2;
        }

Pentru a scapa de aceasta eroare se foloseste un mecanism pe care CLR il numeste constrangere, adica un mod de a limita tipuri care pot fi specificate tipului generic. Implementarea este realizata cu ajutorul lui where, iar compilatorul va sti ca toate tipurile specificate pentru T trebuie sa implementeze interfata IComparable.

        static T AnotherGenericMethod<T>(T obj1, T obj2) where T : IComparable
        {
            if (obj1.CompareTo(obj2) < 0) return obj1;

            return obj2;
        }
Category: Uncategorized

Your email address will not be published. Required fields are marked *

*