Vous êtes sur la page 1sur 16

.NET Okruenje - Nastavni materijaliTVZI.

Cesar

.NET Okruenje
Vjeba 2: Uvod u C#

.NET Okruenje - Nastavni materijaliTVZI.Cesar

Sadraj
Osnove C# jezika................................................................................................... 3
Solution i projekti................................................................................................ 3
Klase i objekti, svojstva u klasi............................................................................4
Odnos klasa..................................................................................................... 4
Svojstva i polja, konstruktori i metode.............................................................5
Iznimke................................................................................................................ 7
Suelja (interface)............................................................................................... 8
Kolekcije (generics)............................................................................................. 8
Petlje i enumeriranje kolekcije.........................................................................8
C# - napredni koncepti........................................................................................... 9
Lambda izrazi i LINQ............................................................................................ 9
Lambda izrazi................................................................................................... 9
LINQ naredba where...................................................................................... 9
LINQ naredba ToList..................................................................................... 10
LINQ naredbe First, Single, FirstOrDefault i SingleOrDefault........................10
LINQ naredba OrderBy i OrderByDescending..............................................10
LINQ naredba Count.................................................................................... 11
LINQ podupiti............................................................................................... 11
Func, Predicate i Action objekti.........................................................................12

.NET Okruenje - Nastavni materijaliTVZI.Cesar

Osnove C# jezika
U ovom e se poglavlju prezentirati osnovni pojmovi i koncepti koji e biti
koriteni na kolegiju.

Solution i projekti
U pravilu se svaka ozbiljnija aplikacija dijeli na nekoliko slojeva. Ti slojevi su
najee prezentacijski sloj, model/business/services sloj i sloj za pristup bazi
podataka (Data Access Layer ili krae DAL sloj). Kod razvoja vieslojnih aplikacija,
potrebno je uvesti i nezavisnosti izmeu slojeva u smjeru prema gore, to znai
da prezentacijski sloj moe biti ovisan o DAL ili model sloju, ali DAL ili model sloj
ne smiju biti ovisni o prezentacijskom sloju. U .NET okruenju se takva raspodjela
najelegantnije postie raspodjelom slojeva na projekte unutar rjeenja
(solutiona). Po uzoru na tu ideju, napravit emo novi projekt i nazvati ga
Vjezba.Model. Novi projekt se dodaje odabirom opcije File -> Add -> New Project
u izborniku:

Ako pogledamo solution explorer, novi projekt je kreiran i automatski mu je


dodana nova klasa Class1, koju moemo slobodno obrisati:

.NET Okruenje - Nastavni materijaliTVZI.Cesar

Ovaj projekt je ve dodan ukoliko je sa source control servera povuena grana


vjezba-02/setup.

Klase i objekti, svojstva u klasi


Nova klasa u projekt se dodaje tako da u solution explorer prozoru, na eljenom
projektu, odaberemo desni klik i add new item, te pronaemo odgovarajuu
stavku iz izbornika.
Vana napomena: pri dodavanju nove klase njena vidljivost je
automatski postavljena na internal, te da bi klasa bila vidljiva u
drugim projektima potrebno ju je definirati kao public.
Primjerice, ukoliko dodamo klasu Fakultet u projekt Vjezba.Model, moramo
dodati kljunu rije public:

Odnos klasa
Klase mogu implementirati nasljeivanje, to znai da izvedena klasa nasljeuje
svojstva i funkcije iz bazne klase. Klase takoer mogu biti u odnosu u kojem neka
4

.NET Okruenje - Nastavni materijaliTVZI.Cesar


klasa sadri niz referenci na objekte druge klase, najee u obliku liste. U
nastavku je dan primjer, gdje klasa A nasljeuje klasu B (B je bazna klasa), dok
klasa A takoer ima u sebi listu referenci na objekte klase C (tzv. odnos 1-N).

Svojstva i polja, konstruktori i metode


Kada govorimo o informacijama koje su sadrane u klasama, najee koristimo
termine kao to su svojstva (properties) i rijee polja (fields). Polje (lan) je
doslovno varijabla koja je sadrana unutar neke klase, i kad se kreira instanca
neke klase, mogue je koristiti to polje kao i svaku drugu varijablu. Iz gornjeg
isjeka koda, lan _objektiKlaseC je privatna varijabla, koja je tipa List<C>. U
pravilu, lanovi bi uvijek trebali biti privatni, to znai da se tim lanovima ne
moe pristupiti nigdje izvan klase u kojoj se nalaze 1. Svojstvo, s druge strane,
moemo promatrati kao getter i setter funkciju, samo napisanu malo drukijom
sintaksom nego to je to u C++ ili Java jeziku:

1 Vie o pravima pristupa moe se nai na ovom linku:


https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx
5

.NET Okruenje - Nastavni materijaliTVZI.Cesar


U gornjoj klasi, svojstvo je Adresa, a funkcije koje dohvaaju ili postavljaju
vrijednost tog svojstva su definirane kljunim rijeima get i set. Vrijednost
svojstva se u pravilu uva u privanom lanu. to se tie prava pristupa, vrijede
ista pravila kao i za polja meutim kod svojstava se najee koristi pravo
pristupa public ili protected. Postoje i automatska svojstva, koja se mogu
zapisati ovako2:

Dobro je pitanje, zato bi uope koristili automatska svojstva a ne polja? Postoje


razlike kako C# doivljava varijable i svojstva, te se nee detaljnije ulaziti u to
podruje3. Meutim, drat emo se sljedeih pravila:

Klasa ne smije sadravati javna polja


Klasa bi trebala sadravati svojstva (javna ili protected, u rijetkim
sluajevima private)
Koristiti automatsko svojstvo gdje je mogue

Pri kreiranju objekta, prva funkcija koja se poziva unutar klase je konstruktor. Da
bi klasa funkcionirala, nije potrebno napraviti konstruktor osnovni (default)
konstruktor e biti dodan automatski. Meutim, u nekim sluajevima je dobro
dodati konstruktor za osiguravanje incijalizacije, kao to je to primjer u sljedeem
kodu:

U gornjem sluaju je dobro koristiti konstruktor jer tada moemo inicijalizirati na


ispravan nain kompleksni objekt kreirati mu novu instancu. Kada konstruktora
ne bi bilo, onaj tko koristi tu klasu mora samostalno inicijalizirati listu, te ukoliko
ju pokua koristiti bez inicijalizacije, moe dobiti null reference iznimku.
Uz konstruktore i svojstva, gotovo svaka klasa sadri niz metoda funkcija koje
predstavljaju implementaciju ponaanja neke klase. Funkcija takoer moe imati
razine pristupa private, protected i public, a moe biti zavisna od postojanja
objekta ili nezavisna (static). Primjer jednostavne funkcije je dan u nastavku:
2 Vie o svojstvima uz primjer nasljeivanja: https://msdn.microsoft.com/enus/library/w86s7x04.aspx
3 Vie o tome moe se proitati primjerice ovdje:
http://blog.codinghorror.com/properties-vs-public-variables/
6

.NET Okruenje - Nastavni materijaliTVZI.Cesar

Funkcija je definirana:

Tipom povratne vrijednosti


Imenom (predlae se CamelCase)
Parametrima koje prima (tip parametra i koliko ih ima)

Iznimke
Kao i u drugim programskim jezicima, C# ima razvijen mehanizam rukovanja
iznimkama. Iznimka se moe dogoditi uslijed nepredvienih ulaznih parametara,
pogreke u kodu i sl. Iznimke se mogu baciti i uloviti, ali svaka iznimka koju
moemo baciti ili uloviti nasljeuje iz bazne klase Exception. U samom .NET
radnom okviru ima niz ve postojeih iznimki koje se mogu iskorititi u nizu
situacija (kao u zadatku 2.1), ali mogue je i kreirati vlastitu iznimku to je ni
manje ni vie nego nova klasa koja nasljeuje iz klase Exception ili iz bilo koje njoj
izvedene klase. Za bacanje iznimki koristimo kljunu rije throw, dok za hvatanje
iznimki koristimo kombinaciju try-catch-(finally) 4.

Zadatak 2.1
Dodati u projekt Vjezba.Model klase Osoba, Profesor, Student i Fakultet.
Ispravno implementirati nasljeivanje te odnose izmeu tih klasa. Za spremanje
1-N veze koristiti List<> objekt. Gdje god je mogue, koristiti automatska getter i
setter svojstva. Dodatno, potrebno je ispotovati sljedea poslovna pravila
1. Osoba treba sadravati informacije: Ime, Prezime, OIB, JMBG. OIB ima 11
znakova, i sve moraju biti znamenke, dok JMBG ima tono 13 znakova,
takoer sve moraju biti znamenke. Ukoliko prilikom postavljanja svojstva
OIB ili JMBG gornje pravilo nije ispotivano, potrebno je baciti iznimku
InvalidOperationException.
a. Iz JMBG broja je mogue izvui datum roenja, te osoba takoer
treba imati readonly polje tipa DateTime i naziva DatumRodjenja.
2. Profesor treba uz ime, prezime, oib i jmbg, imati i podatak o nazivu odjela
(Odjel), zvanju (enumeracija5 Zvanje) i datumu izbora u zvanje

4 Primjeri iznimki se mogu vidjeti ovdje: https://msdn.microsoft.com/enUS/library/ms173163%28v=vs.80%29.aspx


5 Primjer enumeracije: https://msdn.microsoft.com/en-us/library/sbbt4032.aspx
7

.NET Okruenje - Nastavni materijaliTVZI.Cesar


(DatumIzbora). Enumeracija zvanje se sastoji od vrijednosti: Asistent,
Predavac, VisiPredavac, ProfVisokeSkole.
a. Potrebno je napraviti funkciju KolikoDoReizbora u kojoj treba uzeti
u obzir trenutno zvanje i datum izbora u zvanje, te trenutni datum.
Povratna vrijednost je int broj koji oznaava koliko godina je do
idueg izbora u zvanje. Izbor u zvanje se za asistente odrava svake
3 godine, dok za ostale svakih 5 godina.
3. Student, uz ime, prezime, oib i jmbg, treba imati i JMBAG podatak. JMBAG
je broj od tono 10 znamenki, te ukoliko to pravilo nije ispotovano kod
postavljanja JMBAG podatka potrebno je isto baciti iznimku kao i kod OIB ili
JMBG broja. Uz JMBAG, potrebno je i omoguiti evidenciju prosjeka (decimal
Prosjek), broja poloenih predmeta (int BrPolozeno) i ukupno osvojeno
ECTS bodova (int ECTS).
4. U klasi Fakultet moe biti najvie jedno svojstvo tipa List, ali Fakultet mora
uvati podatke o svim Profesorima i svim Studentima koji su tamo. Prilikom
kreiranja instance klase Fakultet lista mora biti inacijalizirana.
a. U klasi fakultet potrebno je napraviti funkcije KolikoProfesora i
KolikoStudenata koja vraa int vrijednost koliko ima profesora a
koliko studenata na fakultetu.
b. U klasi fakultet napraviti funkciju koja dohvaa studenta po JMBAG
broju. Funkcija se treba zvati DohvatiStudenta i primati jedan
parametar JMBAG broj. Ukoliko student ne postoji, vratiti null
vrijednost.

Suelja (interface)
Suelje je skup pravila kojim definiramo kako izgleda ili koja ponaanja sadri
neka klasa koja ga implementira. Primjerice, klasa koja implementira suelje
IDisposable sigurno sadri metodu Dispose. Ovo suelje takoer indicira da klasa
koristi resurse koje bi trebalo osloboditi nakon to smo zavrili s koritenjem te
klase. Preutni dogovor u C# je da suelja poinju slovom I (od Interface), te ih
je na taj nain lako uoiti i razlikovati od obinih klasa 6.

Kolekcije (generics)
Gotovo svaka poslovna aplikacija e morati voditi evidenciju (pamtiti) informacije
o nizu razliitih podataka - primjerice, niz rauna, narudbenica, studenata,
brodova, ili kao u prolom zadatku profesora i studenata. U tu svrhu koriste se
razne kolekcije koje nam omoguavaju niz funkcionalnosti za rukovanje ovisno o
konkretnoj potrebi i kontekstu. U C# najee se koriste strogo tipizirane kolekcije
(generics) - to su kolekcije koje mogu pamtiti samo odreene tipove podataka, tj.
objekte neke specifine klase. Evo nekoliko primjera kolekcija i tipiziranih
kolekcija uz pojanjenje:

List - kolekcija u koju se moe spremiti bilo kakav objekt. Ovo je primjer
netipizirane kolekcije. Elementima liste (tipiziranim i netipiziranim) se

6 Neto vie o sueljima: https://msdn.microsoft.com/enus/library/ms173156.aspx


8

.NET Okruenje - Nastavni materijaliTVZI.Cesar

moe pristupati preko uglatih zagrada i indexa: mojaLista[5] -> vraa 6.


element liste koja se zove mojaLista. Povratna vrijednost je tipa object.
List<int> - lista cjelobrojnih vrijednosti - ne moemo dodati nita osim
cjelobrojne (int) vrijednosti. Moemo napisati primjerice int x =
mojaIntLista[2];
List<ContactData> - lista objekata tipa ContactData
Dictionary<int, string> - primjer kolekcije u kojoj su vrijednosti
spremljene pod nekim kljuem. Primjerice, u ovoj kolekciji klju je
cjelobrojna vrijednost, a vrijednost je string. Ovoj kolekciji pristupamo na
nain da kao index koristimo klju - primjerice, mojDict[2] = "Dva"

Ipak, najee koritena klasa je upravo List<XX> klasa, gdje je XX naravno


odgovarajui tip7.
Petlje i enumeriranje kolekcije
Da bi pregledali elemente neke kolekcije, moramo koristiti neku vrstu petlje. U C#
najee se koristi foreach petlja koja prolazi po svim elementima neke kolekcije.
Primjer takve petlje nalazi se na stranici 6 kod implementacije metode
PrebrojiKolikoJeUListi8.

Zadatak 2.2
U klasi Fakultet potrebno je dodati funkciju DohvatiProfesore koja vraa popis
svih profesora (povratni tip je IEnumerable<Profesor>), poredanih po datumu
izbora u zvanje poevi od najstarijeg datuma.

C# - napredni koncepti
U narednom poglavlju bit e obraeni napredni koncepti u C# jeziku konkretnije
lambda izrazi i LINQ mehanizam. Stabla izraza (expression trees) su posebne
strukture u C# jeziku koje omoguavaju definiranje koda koji e tek kasnije biti
izvren. LINQ koristi stabla izraza za manipulaciju kolekcijama, gdje se pomou
stabla izraza definira upit koji e tek naknadno biti izveden (ako se radi o upitu na
bazu podataka kroz Entity Framework ili slian ORM alat). U ovom poglavlju bit e
obraene osnove LINQ izraza za manipulacije kolekcijama te Func<>,
Predicate<> i Action<> objekti kojima se definira funkcija u obliku varijable.

Lambda izrazi i LINQ


Lambda izrazi se u osnovi mogu poistovjetiti s anonimnim ili inline funkcijama. U
ovom dijelu bit e navedeni primjeri koritenja lambda izraza u svrhu enumeracije
7 Popis funkcija u List klasi. Klikom na svaku funkciju je mogue detaljnije
pogledati primjere: https://msdn.microsoft.com/enus/library/6sh2ey19%28v=vs.110%29.aspx
8 Vie o petljama: https://msdn.microsoft.com/enus/library/f0e10e56%28v=vs.90%29.aspx
9

.NET Okruenje - Nastavni materijaliTVZI.Cesar


kolekcija. Ideja manipulacije kolekcijama kroz LINQ je da svaka kolekcija, pozivom
neke LINQ naredbe se transformira u novu kolekciju 9.
Lambda izrazi
Pomou lambda izraza se definira anonimna funkcija ili stablo izraza koje se
koristi pri izvravanju primjerice LINQ upita. Sintaksa lambda izraza je sljedea:
p => p.Id < 3

Primjerice, u gornjem izrazu, prvi parametar p (s lijeve strane operatora =>)


oznaava jedan ulazni objekt kolekcije. S desne strane operatora => se nalazi
izraz koji koristi objekt p. U ovom sluaju, povratna vrijednost izraza s desne
strane je bool. tovie, gornji izraz je ekvivalentan ovom:
p =>
{
if (p.Id < 3)
return true;
return false;
}

Naravno, ovisno o kontekstu, povratna vrijednost se mijenja.


LINQ naredba where
Vjerojatno najee koritena metoda prilikom manipulacija kolekcijama slui za
filtriranje i obradu samo odreenih podataka.
var quizesWithLowId = listaKvizova
.Where(p => p.Id < 3);

Lambda izraz kao rezultat se u konanici


vraaju samo oni elementi iz kolekcije za koje
je zadovoljen ovaj izraz; tj., za koje ova funkcija
vraa true.

Kolekcija objekata tipa Quiz


primjerice, List<Quiz>; nad
njom se izvrava where
naredba.

Zadatak 2.3
Napisati funkciju u klasi Fakultet koja pomou where naredbe dohvaa samo
studente roene 1991. godine. Funkcija se treba zvati DohvatiStudente91, a
povratna vrijednost treba biti IEnumerable<Student>.
1. Izdvojiti iste objekte, ali bez
DohvatiStudente91NoLinq.

koritenja

LINQ

naredbi,

funkciji

Zadatak 2.4

9 Puno primjera koritenja LINQ naredbi moe se nai ovdje:


http://www.dotnetperls.com/linq
10

.NET Okruenje - Nastavni materijaliTVZI.Cesar


Napisati funkciju StudentiTvzT u klasi Fakultet koja e dohvatiti samo studente
kojima JMBAG poinje s 0246 i kojima prezime poinje s T.
LINQ naredba ToList
Svaku kolekciju moemo eksplicitno pretvoriti u listu pozivom ToList metode koja
e stvoriti novi List<> objekt, i sve elemente kolekcije prebaciti u listu.

Zadatak 2.5
Kreirati funkciju DohvatiStudente91List koja, kao u zadatku 2.3 dohvaa
studente roene '91, ali ih vraa u obliku List objekta.
LINQ naredbe First, Single, FirstOrDefault i SingleOrDefault
Gore navedene naredbe slue za izdvajanje samo jednog elementa iz kolekcije.
Metode imaju sljedee razlike:

First ukoliko nema niti jednog elementa u kolekciji (primjerice, traimo


sve studente kojima ime poinje s ), tada e poziv te naredbe baciti
iznimku
FirstOrDefault ukoliko nema niti jednog elementa u kolekciji, tada poziv
naredbe vraa default vrijednost, ovisno koji tipovi su u kolekciji.
Primjerice, za klasu Student, default vrijednost je null, dok za cjelobrojne
vrijednosti default vrijednost je 0.
Single ukoliko ima vie od jednog elementa u kolekciji, ili je kolekcija
prazna, bacit e se iznimka
SingleOrDefault slino kao Single, no nee se baciti iznimka ve se
vraa default vrijednost

LINQ naredba OrderBy i OrderByDescending


Koristi se ukoliko je potrebno poredati kolekciju. OrderByDescending primjenjuje
poredak u obrnutom redoslijedu od OrderBy poziva. Sve LINQ naredbe se mogu
zajedno kombinirati.

Zadatak 2.6
Kreirati funkciju NajboljiProsjek92 u klasi Fakultet koja dohvaa studenta s
najboljim prosjekom roenog 1992. godine. Ukoliko student ne postoji, funkcija
treba vratiti null.

Zadatak 2.7
Kreirati funkciju Studenti91Ordered u klasi Fakultet koja dohvaa studente
roene 1991. poredano po prosjeku silazno.

Zadatak 2.8
Kreirati funkciju SviProfesori u klasi Fakultet koja dohvaa sve profesore
poredano abecedno po prezimenu zatim po imenu.

11

.NET Okruenje - Nastavni materijaliTVZI.Cesar


LINQ naredba Count
Kao rezultat vraa broj elemenata u kolekciji. Moe se kombinirati s ostalim LINQ
upitima i naredbama.

Zadatak 2.9
Kreirati funkciju KolikoProfesoraUZvanju u klasi Fakultet koja vraa ukupan
broj profesora u zadanom zvanju. Funkcija prima kao parametar traeno zvanje.
LINQ podupiti
est je sluaj da je potrebno izdvojiti elemente kolekcije na temelju kolekcija koje
sadre. Unutar bilo kojeg LINQ upita, moe se postaviti dodatni upit nad bilo
kojom kolekcijom definiranom nekim svojstvom.

Zadatak 2.10
Kako bi mogli testirati podupite, potrebno je uz ve postojee klase, dodati i klasu
Predmet, te u klasi Profesor omoguiti spremanje popisa svih predmeta koje
profesor predaje (svojstvo nazvati Predmeti). Klasa Predmet treba imati ifru
predmeta (int Sifra), broj ECTS bodova (int ECTS), naziv predmeta (Naziv).

Zadatak 2.11
Kreirati funkciju NeaktivniProfesori u klasi Fakultet koja vraa profesore koji su
u zvanju Predava ili Vii Predava a koji imaju manje od 2 predmeta na kojima
dre nastavu.

Zadatak 2.12
Kreirati funkciju AktivniAsistenti u klasi Fakultet koja vraa profesore koji su u
zvanju Asistent a koji imaju vie od 2 predmeta s barem 5 ECTS bodova na kojima
dre nastavu.

12

.NET Okruenje - Nastavni materijaliTVZI.Cesar

Func, Predicate i Action objekti


Neto slino kao to su pokazivai na funkcije, u C# je uveden novi set objekata
koji omoguavaju spremanje funkcije u varijablu, te kasnije pozivanje te funkcije s
eljenim parametrima i dohvaanje rezultata. Primjerice, u sljedeem
programskom odsjeu pozivamo funkciju GetRandomOperation() koja vraa
objekt Func<int,int,int>. Taj objekt zapravo predstavlja funkcijju koja ima dva
parametra tipa int i povratnu vrijednost tipa int. Kada bi ista funkcija vraala
double vrijednost, Func objekt bi bio Func<int,int,double>. Zadnji parametar
predloka je uvijek tip povratne vrijednosti funkcije. Pogledajmo sljedei primjer:
Program.cs

namespace LINQHelperApp.Console
{
class Program
{
static void Main(string[] args)
{
var calc = new Calculator();
Func<int,int,int> fOp = calc.GetRandomOperation();
int x = 10, y = 5;
int rez = fOp(x, y);

}
}

System.Console.WriteLine(rez);
System.Console.ReadKey();

Varijabla fOp je upravo objekt koji tretiramo kao funkciju, vidimo u nastavku poziv
fOp(x,y) gdje se pravimo da je fOp zapravo neka funkcija. Pogledajmo kako
izgleda kod Calculator klase (u nastavku):

13

.NET Okruenje - Nastavni materijaliTVZI.Cesar


Calculator.cs

namespace LINQHelperApp.Console
{
public class Calculator
{
public Func<int, int, int> GetRandomOperation()
{
var rand = new Random();
switch (rand.Next() % 3)
{
case 0:
return Summation;
case 1:
return Substraction;
case 2:
return Multiplication;
}
return null;
}
public int Summation(int a, int b)
{
return a + b;
}
public int Substraction(int a, int b)
{
return a - b;
}
public int Multiplication(int a, int b)
{
return a * b;
}
}

Takoer, mogue je iste funkcije definirati inline:

14

.NET Okruenje - Nastavni materijaliTVZI.Cesar


Calculator.cs

namespace LINQHelperApp.Console
{
public class Calculator
{
public Func<int, int, int> GetRandomOperation()
{
var rand = new Random();
switch (rand.Next() % 3)
{
case 0:
return (a, b) => {
return a + b;
};
case 1:
return ((a,b) => a - b);
case 2:
return (a,b) => a * b;
}
return null;
}
}
}

Iz gornjeg primjera se moe uoiti slinost izmeu koritenja lambda izraza u


zadacima sa LINQ operacijama, te koritenja na ovaj nain, preko Func, Action i
Predicate objekata. Zapravo, LINQ funkcije koriste upravo te objekte za obradu
kolekcija.
Kao i svaki drugi objekt, mogue je i ovakav objekt proslijediti kao parametar
nekoj drugoj metodi ili funkciji:

15

.NET Okruenje - Nastavni materijaliTVZI.Cesar


Program.cs

namespace LINQHelperApp.Console
{
class Program
{
static void PrintOperation(int x, int y, Func<int, int, int> op)
{
int rez = op(x, y);
System.Console.WriteLine(rez);
}
static void Main(string[] args)
{
var calc = new Calculator();
Func<int,int,int> fOp = calc.GetRandomOperation();
PrintOperation(10, 5, fOp);
System.Console.ReadKey();
}

Gore navedena svojstva se koriste kod koritenja LINQ proirenja za manipulaciju


kolekcijama. Ideja je da se operacija koju je potrebno izvesti nad svakim lanom
kolekcija proslijedi u obliku Func<>, Predicate<> ili Action<> objekta.
Predicate<> je isto to i Func<> objekt, ali s povratnom vrijednou bool, dok je
Action<> isto to i Func<> objekt, samo bez povratne vrijednosti.

Zadatak 2.13
U klasi Fakultet potrebno je kreirati funkciju IzmjeniProfesore koja kao
parametar prima Action objekt kojem je jedini parametar tipa Profesor. Funkcija
mora proi po svim profesorima u fakultetu, i izvriti akciju nad svima njima.

16

Vous aimerez peut-être aussi