Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

002_p4_osobine_genericke_klase

Особине генеричке класе


Генеричка класа повећава могућност поновне употребе.
Ако је могуће користити више различитих типова података то је генеричка класа слободнија за
различите поновне употребе.
Ипак, превелика генерализација чини да је код тежак за разумевање и одржавање.
Геенричка класа може бити основна класа за друге генеричке или не-генеричке класе или
апстрактне класе.
Генеричка класа се може извести из других генеричких или не-генеричких интерфејса, класа или
апстрактних класа.

Генеричка поља
Генеричка класа може да има генеричка поља али она се не могу иницијализовати унутар
генеричке класе.
public class Podatak<T>
{
public T x;
}
Може се декларисати генерички низ:
public class Podatak<T>
{
public T[] x = new T[10];
}

Генеричкe методе
Генеричка метода је метода декларисана са тип параметром за своје повратне типове или
параметре.
Пример:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp7
{
class Program
{
static void Main()
{
Podatak<string> gradovi = new Podatak<string>();
gradovi.DodajIliApdejtuj(0, "Novi Sad");
gradovi.DodajIliApdejtuj(1, "Beograd");
gradovi.DodajIliApdejtuj(2, "Nis");

Podatak<int> brojevi = new Podatak<int>();


brojevi.DodajIliApdejtuj(0, 10);
brojevi.DodajIliApdejtuj(1, 20);
brojevi.DodajIliApdejtuj(2, 30);
}
}
public class Podatak<T>
{

Страна 1 / 3
002_p4_osobine_genericke_klase

public T[] x = new T[3];


public void DodajIliApdejtuj(int indeks, T element)
{
if (indeks >= 0 && indeks < 3)
{
x[indeks] = element;
}
}
public T UzmiPodatak(int indeks)
{
if (indeks >= 0 && indeks < 3)
{
return x[indeks];
}
else
{
return default(T);
}
}
}
}
У примеру, методе DodajIliApdejtuj() UzmiPodatak() су генеричке методе.
Тип података параметра element ће бити специфициран током инстанцијације класе Podatak<T>.

Преклапајуће генеричкe методе


Генерички тип параметар се може користити са вишеструким параметрима са или без не-
генеричких параметара и повратног типа.
Следеће су преклапајуће генеричке методе:
public void DodajIliApdejtuj(int indeks, T element) { }
public void DodajIliApdejtuj(T element1, T element2) { }
public void DodajIliApdejtuj<U>(int indeks, T element) { }
public void DodajIliApdejtuj(T element) { }

Генеричкe методе у не-генеричком класама


Не-генеричке класе могу имати генеричке методе преко специфицирања тип параметра у
угластим заградама са називом методе.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp7
{
class Program
{
static void Main()
{
Stampac stampac = new Stampac();
stampac.Print<int>(100);
stampac.Print(200);
stampac.Print<string>("dobro");
stampac.Print("Programiranje");
}
}

Страна 2 / 3
002_p4_osobine_genericke_klase

class Stampac
{
public void Print<T>(T podatak)
{
Console.WriteLine(podatak);
}

}
}

Задаци за самосталан рад:


1. Дефинисати генеричку класу Zaposleni и унутар ње генеричку методу prikazPodataka која
приказује податке који су послати у инстанце класе.

2. Генерисати генеричку методу са дефинисањем повратног типа података.

3. Дефинисати генеричку класу Test<T> у којој је дефинисан низ генеричког типа са дужином
5. Метода Dodaj() служи за додавање било којег објекта у колекцију а особина Indekser
имплементира итерацију путем foreach исказа. Унутар главне функције је инстанцирана
генеричка класа са целобројним типом података и додати неки цели бројеви у колекцију
коришћењем методе Dodaj().

Страна 3 / 3

You might also like