Metode. Svojstva (properties) : Set i Get.
Metode (da se podsetimo)
Metoda izvršava određenu operaciju definisanu kao grupa naredbi. Može da primi ulazne podatke od pozivaoca tako što joj se zadaju parametri i da vrati rezultat pozivaocu tako što joj se zada povratni tip. Povratni tip metode može da bude void, što znači da ne vraća nikakvu vrednost svom pozivaocu. Metoda može takođe da vraća pozivaocu izlazne podatke (rezultat) preko parametara ref i out.
Potpis (engl. signature) metode mora biti jedinstven unutar datog tipa. Potpis metode se sastoji od tipova njenog imena i parametara (ali ne od imena parametara, niti od povratnog tipa).
Svojstva
Svojstva omogućavaju kontrolisan pristup privatnim podacima klase. Izgledaju poput polja, ali se ponašaju kao metode. Svojstvima se pristupa na isti način kao kod pristupanja poljima. Javna (public) su.
Sintaksa:
public <povratni_tip_svojstva> <ime_svojstva>
{
get {
<telo_get_komponente>
}
set { <telo_set_komponente> }
}
Svojstva mogu da imaju 2 bloka, koji počinju get i set ključnim rečima. Svojstva takođe mogu da sadrže samo get ili samo set metodu. get i set metode za razliku od ostalih nemaju parametre. set metoda vrši upis, a get vrši čitanje vrednosti privatne promenljive na koju se odnosi. get metoda koristi return naredbu. Svako svojstvo sadrži posebnu promenljivu value koja služi set metodi da upiše dodeljenu vrednost svojstvu.
Pomoću svojstva se vrši kontrola upisa i čitanja vrednosti privatne promenljive.
Primer:
using System;
namespace AppX
{
class Tacka
{
private double x;
private double y;
public Tacka()
{
x = 0;
y = 0;
}
public Tacka(double x, double y)
{
this.x = x;
this.y = y;
}
public double X
{
get { return x; }
set { x = value; }
}
public double Y
{
get { return y; }
set { y = value; }
}
}
class Program
{
static void Main(string[] args)
{
Tacka T1 = new Tacka();
Console.WriteLine("Koordinate T1: " + T1.X + ", " + T1.Y);
Tacka T2 = new Tacka(4, 6);
Console.WriteLine("Koordinate T2: " + T2.X + ", " + T2.Y);
Console.Write("Unesi novu x koordinatu T1: ");
T1.X = Convert.ToDouble(Console.ReadLine());
Console.Write("Unesi novu y koordinatu T1: ");
T1.Y = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Nove koordinate T1: " + T1.X + ", " + T1.Y);
}
}
}*********
Mada se svojstvima pristupa na isti način kao poljima, ona se razlikuju po tome što onome ko ih implementira daju potpunu kontrolu nad učitavanjem i zadavanjem njihove vrednosti. Zahvaljujući tome, osoba koja implementira svojstva može da izabere potreban način internog predstavljanja, a da pritom ne otkriva interne detalje korisniku svojstva.
Svojstvo može samo da se čita ukoliko je zadata samo metoda get, a samo da se upisuje ako je zadata samo metoda set. Svojstva koja se mogu samo upisivati koriste se retko. Svojstvo obično ima namensko pozadinsko polje za smeštaj pripadajućih podataka. Međutim, ne mora uvek da ga ima – umesto toga, može da vraća vrednost izračunatu na osnovu drugih podataka.
Automatska svojstva
Najčešća implementacija svojstva je metoda get i/ili set koja samo čita iz privatnog polja istog tipa kao svojstvo, odnosno upisuje u njega. Deklaracija automatskog svojstva nalaže kompajleru da omogući tu implementaciju.
Primer:
public class racun
{
public decimal Cena { get; set; }
}
Kompajler automatski generiše privatno pozadinsko polje sa
imenom koje je sam odredio i koje se ne može referencirati.
Pristupanje pomoću metoda get i set
Metode get i set mogu imati različite nivoe pristupa. Uobičajen slučaj je imati svojstvo tipa public sa modifikatorom pristupa internal ili private uz set:
private decimal x;
public decimal X
{
get { return x; }
private set { x = Math.Round (value, 2); }
}
Zapazite da sâmo svojstvo deklarišete sa slobodnijim nivoom pristupa (u ovom slučaju, public), a modifikator dodajete onoj pristupnoj metodi koju želite da učinite manje pristupačnom.