Ilustracija lekcije na primeru sa časa
Radićemo:
- Uvod - ponavljamo nizove i matrice
- Kreiranje metoda
- Prenos parametara metodi po vrednosti
- Prenos parametara metodi po referenci
...
1 - Uvod: Na početku ponavljamo kako se kreira niz i matrica (dvodimenzionalni niz).
Niz:
/* kreiramo niz od 3 elementa: */Matrica (dvodimenzionalni niz) od 3 reda i 2 kolone:
int[] Niz1 = new int[3] { 1, 15, -99 }; /* i inicijlno mu postavljamo 3 vrednosti */
foreach(int broj in Niz1) /* ispisujemo na ekrenu elemente niza */
{
Console.Write(broj + " "); /* u jednom redu, razdvojene razmakom */
}
/* kreiramo matricu - dvodimenzionalni niz - od 3 reda i 2 kolone: */2 - Da nam se program ne bi završio pre vremena, na kraju koristimo:
int[,] matrica = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } }; /* postavljamo neke početne vrednosti */
foreach (int broj in matrica)
{
Console.WriteLine(broj); /* ovo je ispis SVIH elemenata iz matrice, jedan ispod drugog */
}
for(int i=0; i<2; i++) /* ovo je ispis elemenata matrice po redovima */
{
for (int j = 0; j < 2; j++) Console.Write(matrica[i, j] + " ");
Console.WriteLine();
}
Console.ReadKey(); /* izvršenje programa čeka da se pritisne bilo koji taster da bi nastavio dalje */
......
2 - deo - kreiranje metoda: Kako se kreira metoda u C# ?
Metode mogu da se kreiraju pre ili posle glavne metode (Main).
Iz prethodnih verzija programskih jezika je česta praksa da ako se metode definišu posle glavne funkcije, onda ih se treba deklarisati pre glavne funkcije.
Da ne bi radili tako, mi u ovom slučaju kreiramo metode pre glavne metode.
Prva metoda je za izračunavanje zbira dva broja tipa double. Metoda prima kao parametre dva broja tipa double, a kao rezultat daje nešto što je tipa double (double - sa decimalnom tačkom). Šta će biti u rezultatu zavisi od koda koji je unutar metode, kao i od toga šta se stavi da ona vraća - iza reči return:
/*metoda koja nije static pa će nam trebati objekat da bi je koristili */Vodite računa o sledećem: pošto metoda nije statička, a želećemo da je pozovemo iz glavne metode koja jeste statička, jedini način da se to izvede jeste da se napravi objekat klase u kojoj radimo, pa da se pozove metoda tog, konkretno napravljenog objekta (u trenutnom programu klasa u kojoj radimo se zove Program ... ):
public double Zbir(double a, double b)
{
return a + b;
}
Program objekat = new Program();Zagrade ispred poziva metode su tu da uradimo konverziju (kastovanje) tipa rezultata koji metoda daje u int - koji je tip nove promenljive a. (Setite se da metoda daje rezultat tipa double.)
int a = (int)objekat.Zbir(13, 15);
Console.WriteLine("Zbir brojeva 13 i 15 je " + a);
Druga metoda je statička metoda za prikaz neke poruke. Metoda nema parametre, ali, pošto jeste metoda, ne smete zaboraviti zagrade na kraju. Isto tako ova metoda ne vraća ništa kao izlaz. Prilikom definisanja metode ipak mora nešto da se stavi - u ovom slučaju to je void - oznaka da metoda ništa ne vraća. Metoda ima bočni efekat: ispisuje nešto na ekranu. Bočni efekti su nešto što se usput desi ili uradi, a ne daje se kao zvaničan izlaz funkcije. I na kraju, pošto je metoda statička, za njeno pozivanje nam ne treba kreiranje objekta !
/* metoda koja nema parametre ali jeste static, pa nam za nju ne treba objekat za poziv */
static void pozdrav()
{
Console.WriteLine("Tekst izlaz iz funkcije");
}
Pošto metoda jeste statička, za njeno pozivanje nam ne treba kreiranje objekta ! Kako izgleda pozivanje ove metode iz glavne metode:
pozdrav();...
3 - deo - Prenos parametara po vrednosti
Prvo kreiramo metodu kojoj ćemo da prosledimo parametre po vrednosti:
/* Metoda sa prenosom parametra po vrednosti */Ovde je usput demonstrirano kako se koriste parametri ako želimo da u Console.WriteLine ispisujemo vrednosti promenljivih: unutar stringa (naše rečenice) stavimo zagrade { }, a između njih odgovarajuće brojeve, počev od 0. Nakon stringa ide zarez, a onda redom parametri čije vrednosti želimo da ispišemo, prvi parametar je onaj za koji smo napisali između zagrada 0, drugi je za mesto gde je između zagrada 1, i tako redom...
static void Dupliraj_1(int vrednost)
{
vrednost *= 2;
Console.WriteLine("Vrednost je: {0}", vrednost);
}
Postavili smo da je metoda statička, pa ne treba da kreiramo objekat za poziv metode.
Metodi se prosleđuje samo jedan celobrojni parametar. Unutar metode se vrednost parametra duplira i ispiše. Metoda ne vraća ništa kao rezultat (ima samo bočne efekte).
Evo kako to pozivamo iz glavne metode:
int broj1 = 5; /* neki broj - promenljiva sa vrednošću 5 */Ovde se vidi šta se dešava kada se metodi prosledi vrednost nekog parametra - metoda u stvari koristi kopiju te vrednosti, dok vrednost originalne promenljive ostaje nepromenjena posle poziva ove metode.
Console.WriteLine("Vrednost broja pre Dupliraj_1 je: {0}", broj1); /* ispis vrednosti broja (5) */
Dupliraj_1(broj1); /* POZIV METODE Dupliraj_1 koja ima kao ulaz prethodni broj (usput ispiše 10) */
Console.WriteLine("Posle Dupliraj_1 broj je {0}", broj1); /* koliki je naš broj posle funkcije? (5)*/
...
4 - deo - Prenos parametara po referenci
Kreiramo metodu kojoj ćemo da prosledimo parametre po referenci:
/* Metoda sa prenosom parametra po referenci */Čim se ispred parametra postavi ključna reč ref, to znači da se u stvari prosleđuje adresa u memoriji gde se nalazi stvarna vrednost promenljive. To isto tako znači da će se svaka promena nad tom promenljivom koja se desi unutar metode odnositi na našu konkretnu promenljivu i da će se zadržati sve promene. Evo kako smo to pozvali iz glavne metode:
static void Dupliraj_2(ref int vrednost) /* ispred promenljive se postavlja reč ref */
{
vrednost *= 2;
Console.WriteLine("Vrednost je: {0}", vrednost);
}
int broj1 = 5:
Console.WriteLine("Vrednost broja pre Dupliraj_2 je {0}",broj1); /* ispis vrednosti prom.pre poziva metode (5) */
Dupliraj_2(ref broj1); /* POZIV METODE ! - ispred promenljive stoji ref ! - poziv po referenci, usput ispiše 10 */
Console.WriteLine("Posle Dupliraj_2 broj je: {0}", broj1); /* ispis vrednosti prom. posle poziva metode (10) */
U nastavku pogledajte kako izgleda ceo program:
1 using System;
2 using System.Collections.Generic;
3 namespace ConsoleApp
4 {
5 class Program
6 {
/*metoda koja nije static pa će nam trebati objekat da bi je koristili */
7 public double Zbir(double a, double b)
8 {
9 return a + b;
10 }
/* metoda koja nema parametre ali jeste static, pa nam za nju ne treba objekat za poziv */
11 static void pozdrav()
12 {
13 Console.WriteLine("Tekst izlaz iz funkcije");
14 }
/* Metoda sa prenosom parametra po vrednosti */
15 static void Dupliraj_1(int vrednost)
16 {
17 vrednost *= 2;
18 Console.WriteLine("Vrednost je: {0}", vrednost);
19 }
/* Metoda sa prenosom parametra po referenci */
20 static void Dupliraj_2(ref int vrednost)
21 {
22 vrednost *= 2;
23 Console.WriteLine("Vrednost je: {0}", vrednost);
24 }
/* glavna metoda u našem programu. Odatle sve kreće. Može imati proizvoljno mnogo parametara (ili nijedan) */
25 static void Main(string[] args)
26 { /* kreiramo niz od 3 elementa: */
27 int[] Niz1 = new int[3] { 1, 15, -99 }; /* i inicijlno mu postavljamo 3 vrednosti */
28 foreach(int broj in Niz1) /* ispisujemo na ekrenu elemente niza */
29 {
30 Console.Write(broj + " "); /* u jednom redu, razdvojene razmakom */
31 }
/* kreiramo matricu - dvodimenzionalni niz - od 3 reda i 2 kolone: */
32 int[,] matrica = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } }; /* postavljamo neke početne vrednosti */
33 foreach (int broj in matrica)
34 {
35 Console.WriteLine(broj); /* ovo je ispis SVIH elemenata iz matrice, jedan ispod drugog */
36 }
37 for(int i=0; i<2; i++) /* ovo je ispis elemenata matrice po redovima */
38 {
39 for (int j = 0; j < 2; j++) Console.Write(matrica[i, j] + " ");
40 Console.WriteLine();
41 }
42 pozdrav();
43 Program objekat = new Program();
44 int a = (int)objekat.Zbir(13, 15);
45 Console.WriteLine("Zbir brojeva 13 i 15 je " + a);
46 int broj1 = 5;
47 Console.WriteLine("Vrednost broja pre Dupliraj_1 je: {0}", broj1);
48 Dupliraj_1(broj1);
49 Console.WriteLine("Posle Dupliraj_1 broj je {0}", broj1);
50 Console.WriteLine("Vrednost broja pre Dupliraj_2 je {0}",broj1);
51 Dupliraj_2(ref broj1);
52 Console.WriteLine("Posle Dupliraj_2 broj je: {0}", broj1);
53 Console.ReadKey();
54
55 }
56 }
57 }
Primeri koje smo koristili su sa sajta : https://www.mycity.rs/NET/4-C-Metode-Nizovi.html
Preporučujem da pogledate i ostale primere koji su postavljeni na datoj adresi.