[4] C# - Metode, Nizovi

[4] C# - Metode, Nizovi

offline
  • Fil  Male
  • 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.

Arrow 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.


Arrow 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.



Arrow 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 Exclamation

Idea 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. Smile


Exclamation Kada koristimo prenos preko reference --> ne smeju se koristiti konstantne vrednosti (CONST), i promenjiva koja se koristi mora biti inicijalizovana.



Arrow 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?
Idea --> 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 Wink



- Metode mogu biti i članice struktura.



Arrow 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>,....)

Exclamation 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; }

Idea Pogodno je koristiti foreach petlju, budući da ne znamo konkretan broj parametara prilikom pisanja koda.



Arrow 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 Exclamation )


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.

Idea 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.


Idea Možemo imati dve metode sa istim imenom, a potpis se razlikuje u tome da li se parametri prenose preko vrednosti ili preko reference.



Arrow 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. Exclamation






[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.


Arrow 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); }


Exclamation Svojstvo Rank vraća vrednost koja ukazuje na rang, odnosno ukupan broj dimenzija niza.

Exclamation Svojstvo Length vraća vrednost koja ukazuje na ukupan broj elemenata niza.

Citat:Exclamation 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


Exclamation 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



Exclamation 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.


Exclamation Metoda GetLenght
--> vraća vrednost koja ukazuje na broj elemenata za određenu dimenziju niza.
– prva dimenzija se označava sa 0.


Exclamation Metodom Clear navedenim elementima niza se dodeljuju podrazumevane vrednosti.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14811
  • Gde živiš: Niš

ThePhilosopher :: Exclamation Kada koristimo prenos preko reference --> ne smeju se koristiti konstantne vrednosti (CONST), i promenjiva koja se koristi mora biti inicijalizovana.Zbog čega? Šta kada se recimo piše f-ja za kopiranje objekta (recimo copy konstruktor) i kada nije potrebno izmeniti argument koji se prenosi kao parametar f-je?



Ko je trenutno na forumu
 

Ukupno su 1218 korisnika na forumu :: 39 registrovanih, 6 sakrivenih i 1173 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., celik, dane007, dijica, Dimitrise93, draganca, dragoljub11987, FOX, goxin, Griffon vulture, hatman, hologram, Karla, Koridor, Krvava Devetka, kybonacci, Marko Marković, marsovac 2, mercedesamg, Mercury, mikrimaus, miodrag, MiroslavD, Mixelotti, Ne doznajem se u oružje, NoOneEver Dreams, ObelixSRB, Oscar, pein, ruger357, slonic_tonic, Sokic, stegonosa, suton, Trpe Grozni, vlajkox, yrraf, zzapNDjuric99, 125