offline
- Fil

- Legendarni građanin
- Pridružio: 11 Jun 2009
- Poruke: 16586
|
[1] Metode
Metode obezbeđuju da neki blok koda može biti izvršen na bilo kojoj lokaciji unutar aplikacije. Predstavlja grupu naredbi koja izvršava određeni zadatak.
Potpis metode čine:
- povratna vrednost metode,
- parametri metode
- i naziv metode.
Povratna vrednost metode predstavlja tip podatka koji metoda treba da vrati.
Parametri metode su podaci kojima snabdevamo metodu.
Opšti oblik metode:
Citat:[access-modifier] < return-type> <method-name>([parameter-type parameter-name],[.....])
{ method-body}
access-modifier - opseg (stepen) do koga je metoda dostupna drugim klasama ili projektima.
return-type - tip vrednosti koju metoda treba da vrati
method-name - naziv metode
parameter-type parameter-name - tip i naziv parametra koje metoda prima.
method-body - telo metode.
Ukoliko metoda vraća neku vrednost mora se:
- navesti tip povratne vrednosti u deklaraciji metode,
- koristiti ključna reč RETURN prilikom završavanja metode.
Parametri metoda
Do sada smo koristili prenos parametara po vrednosti, u tom slucaju bilo koja promena nad promenjivom unutar metode nema NIKAKVOG EFEKTA na parametre navedene u pozivu metode.
Primer:
using System;
namespace Metode
{
class MainClass
{
static void Dupliraj(int vrednost)
{
vrednost *= 2;
Console.WriteLine(" Vrednost je : {0}",vrednost);
}
public static void Main (string[] args)
{
int broj = 5;
Console.WriteLine("Vrednost je : {0}",broj);
Dupliraj(broj);
Console.WriteLine("Vrednost je : {0}",broj);
}
}
}
Izlaz:
Ukoliko želimo da, na ovaj način, promenimo vrednost promenljive broj, trebalo bi da ubacimo sledeću liniju koda:
broj = dupliraj(broj);
... a metoda bi trebala da se deklariše sa povratnom vrednošću, gde bi povratna vrednost bio duplirani broj.
Još jedan način prosleđivanja vrednosti u metodu je prenos parametara preko reference.
--> To znači da će se sve promene odražavaju i na promenjivu koja se koristi kao parametar
Za ovaj način prosleđivanja, potrebno je koristiti ključnu reč REF kod inicijalizacije metode i kod pozivanja metode (kod onih parametara koje želimo preneti preko reference).
Uporedimo prošli primer sa ovim primerom, gde se koristi ključna reč "ref":
using System;
namespace Metode
{
class MainClass
{
static void Dupliraj(ref int vrednost)
{
vrednost *= 2;
Console.WriteLine(" Vrednost je : {0}",vrednost);
}
public static void Main (string[] args)
{
int broj = 5;
Console.WriteLine("Vrednost je : {0}",broj);
Dupliraj(ref broj);
Console.WriteLine("Vrednost je : {0}",broj);
}
}
}
Izlaz:
Sa primera se vidi da je promenjena i vrednost promenljive broj.
Kada koristimo prenos preko reference --> ne smeju se koristiti konstantne vrednosti (CONST), i promenjiva koja se koristi mora biti inicijalizovana.
Izlazni parametri
Parametar možemo definisati da bude izlazni parametar, preko ključne reči OUT koja se koristi isto kao i ref (dakle, kao modifikator parametra u definiciji metode i pri njenom pozivanju).
Rezultat je isto ponašanje kao i kod referentnog tipa, u smislu da se vrednost parametra na kraju metode vraća promenjivoj koja je upotrebljena u njenom pozivu.
Pa u čemu je onda razlika?
--> Kod parametra OUT mogu se koristiti neinicijalizovane promenjive. Iako je nekoj promenjivoj dodeljena vrednost, kada se koristi u metodi njena vrednost će biti izgubljena nakon izvršenja metode.
Ključne reči OUT i REF se moraju navesti u pozivu metode
- Metode mogu biti i članice struktura.
Nizovi parametara
C# dozvoljava da definišemo jedan poseban parametar za metode, koji mora biti zadnji u definiciji metode i naziva se NIZ PARAMETARA. Ovaj parametar dozvoljava da pozivamo metode koristeći promenjivu količinu parametara, a definiše se ključnom rečju PARAMS.
Citat:static <return-type>< method-name>(<paramname>,< paramname>,...,params <type>[] <name> )
{....................................
.......................................
return < return-value>;
}
Ovu metodu pozivamo na sledeći način:
Citat:<methode name>(<p1>,...<val1>,<val2>,....)
svi parametri moraju da budu onog tipa koji se navodi u inicijalizaciji metode!
Primer upotrebe (deo koda):
static int Zbir(params int[] nizBrojeva)
{
int suma = 0;
foreach(int val in nizBrojeva)
{
suma += val;
}
return suma;
}
Pogodno je koristiti foreach petlju, budući da ne znamo konkretan broj parametara prilikom pisanja koda.
Preopterećenje metoda
Moguće je imati dve metode istog naziva koje operišu nad različitim tipovima promenjivih.
--> preopterećenje operatora prepoznaje ovu situaciju i omogućava da napravimo više metoda sa istim imenom, koje rade sa različitim tipovima argumenata.
(dakle, u ovom slučaju metode imaju isti naziv, ali imaju različit potpis )
Na primer, posmatrajmo sledeći kod:
static float MaxVrednost(float [] nizBrojeva)
{
float max = nizBrojeva[0];
for(int i = 0; i<nizBrojeva.Lenght;i++)
{
if (nizBrojeva[i] > max)
max = nizBrojeva[i];
}
return max;
}
Možemo napisati i metodu koja će imati isti naziv kao i gornja metoda, ali samo sa drugim tipom ulaznog parametra (podvucimo opet: metode imaju iste nazive ali različite potpise).
Prilikom programiranja, ne moramo navoditi koju metodu ćemo da koristimo, samo navedemo niz parametara i odgovarajuća metoda se pozove.
Jedna od dobrih karakteristika tehnologije intellisence kod Visual Studia (a i MonoDevelop sadrži sličnu tehnologiju) :
--> ako imamo dve metode i krenemo da unosimo ime metode Visual Studio (tj. MonoDevelop) će pokazati moguća preopterećenja za tu metodu.
Možemo imati dve metode sa istim imenom, a potpis se razlikuje u tome da li se parametri prenose preko vrednosti ili preko reference.
Korišćenje modifikatora pristupa
Modifikatori pristupa naznačavaju opseg (stepen) do koga je dostupan član neke klase.
public --> član je dostupan bez restrikcije!
protected internal --> član je dostupan samo unutar:
- klase,
- izvedenih klasa,
- klasa u istom programu.
internal --> član je dostupan samo unutar:
- klase,
- istog programa.
protected --> član je dostupan samo unutar:
- klase,
- izvedenih klasa.
private --> član je dostupan samo unutar klase. Ovo je podrazumevana vrednost.
-------------
static --> sve instance klase koje sadrže statičku promenjivu ili metodu.
Toj metodi pristupamo tako što navedemo
imeklase.Imemetode
--> dakle, nije potrebno da insatnciramo klasu.
[2] Nizovi
- Nizovi su uvek referentni tipovi. Promenljive nizovnog tipa sadrže reference na niz, a ne sam niz.
- Nizovni tipovi se implicitno izvode iz System.Array koji je izveden iz System.Object tipa.
Da bi se deklarisala nizovna promenljiva potrebno je:
– navesti tip elemenata niza, zatim
– uglaste zagrade kojima se specificira rang niza, i na kraju
– ime nizovne promenljive .
Primer deklaracije promenljive:
Tip[] imePromenljive;
- Tip elemenata niza može biti bilo koji tip uključujući i nizovni tip
- Podržani su:
a) jednodimenzionalni nizovi,
b) dvodimenzionalni nizovi (matrice)
c) nizovi nizova
a) Primer:
int[] niz = new int[3] {1, 10, 12};
foreach (int broj in niz)
{
Console.Write(broj+" ");
}
b) Primer:
int[,] matrica = new int[3,2] { { 1, 2 }, { 3, 4 }, { 5, 6 } };
foreach (int broj in matrica)
{
Console.WriteLine(broj);
}
Svojstvo Rank vraća vrednost koja ukazuje na rang, odnosno ukupan broj dimenzija niza.
Svojstvo Length vraća vrednost koja ukazuje na ukupan broj elemenata niza.
Citat: Metodom Sort sortiraju se elementi jednodimenzionalnog niza.
– elementi niza moraju da implementiraju interfejs IComparable
– ukoliko sortiranje nije uspešno završeno, rezultat je nedefinisan
– koristi se QuickSort algoritam
– ne vodi se računa o redosledu elemenata čija je vrednost ista
Metodom Clone kreira se nova instanca niza čiji su elementi kopije elemenata kloniranog niza.
// ukoliko su elementi niza referentnog tipa, objekti na koje oni imaju reference neće biti kopirani.
Citat:Metoda Copy:
public static void Copy (Array x, int i, Array y, int j, int d)
x --> niz iz koga se kopira
i --> indeks elementa niza x od koga se počinje
y --> niz u koji se kopira
j --> indeks elementa niza y od koga se počinje
d --> broj obuhvaćenih elemenata
Metoda IndexOf
--> vraća vrednost indeksa prvog elementa čija je vrednost jednaka traženoj.
– ukoliko ne postoji element sa traženom vrednošću, vraća se -1.
– može da se koristi samo nad jednodimenzionalnim nizovima.
Metoda GetLenght
--> vraća vrednost koja ukazuje na broj elemenata za određenu dimenziju niza.
– prva dimenzija se označava sa 0.
Metodom Clear navedenim elementima niza se dodeljuju podrazumevane vrednosti.
|