C#-ban getter és setter írása. Hogyan?
Ez a megoldás elfogadottabb:
private int id;
public int Id
{
get { return id; }
set { id = Id; }
}
vagy inkább:
privat int id;
public int getId(){
return id;
}
public void setID(int id){
this.id=id;
}
illetve tudom-e generáltatni őket Visual Basic segítségével.
Az első. Sőt nem is kell az egészet beírni, elegendő ennyi és automatikusan legenerálja:
public int Id { get; set; }
Bővebben: [link]
Mi az, hogy ki sem írod?
Kérdezőnek:
C# függvényt használni Property helyett barbárság.
Teljes propertyt használni automatikus helyett, ha nincs rá indok szintén az.
Property-t az MSDN szerint mező helyett használunk. Akkor érdemes az 1. verziót kiírni, ha a property kiszámítása triviálisan egyszerű, és semmilyen körülmények között nem tartalmazhat Exception-t. Ez azért kell, mivel a Property-t később mezőként fogod felhasználni a kódodban, és nem szeretnéd, ha pl. a property olvasása/írása fájl- vagy adatbázisművelettel járna, mivel az belassítja a kódodat.
Ebből a háttérben a fordító getProperty, setProperty metódusokat fog generálni.
A getProperty, setProperty metódusokat akkor írd ki így, ha fel akarod hívni a felhasználó figyelmét, hogy bár a műveleted egyszerűnek látszik, a valóságban nem az. Pl. egy setter, ami ellenőrzi, hogy az adat, amit beadtál az jó-e, és ha nem, akkor kivételt dob. Vagy egy olyan getter, ami file-ből olvassa fel a tárolt értéket.
#2-esnek: attól függ, hogy mit értesz üres get/set alatt.
pl. int Id {get {return id;} set {}}
Ebben a set {} üres, mivel 1 db noop-ból áll. Így ez a property csak olvasható. Ha nem írod ki, akkor ezt a fordító figyelembe veszi, és hibaként kezeli, ha bárhol a kódban írni próbálsz a property-be. Ilyen üres propertyt SOHA ne írj ki, mert csökkenti a kód olvashatóságát, és hibákat szül. (True story, egyszer ilyen miatt nyomoztam 2 napot.)
Ha üresnek azt nevezet, hogy triviális, pl. int Id {get {return id;} set {id = value;}}, akkor azt sokkal szebb nem kiírni. int Id {get; set;}
Fun fact:
Ha '15-ös Studiod (2016-ban a legújabb), vagy későbbi van, akkor csinálhatod azt, hogy:
int Id {get; set;} = 42 (property-nek alap értéked adni)
decimal Area => r^2*3.14; (Csak olvasható property getterrel)
decimal Area(decimal a, decimal b) => a * b; (Függvény 2 gerjesztőjellel, válaszjellel 1 sorban. Hasznos, ha fv. túlterheléseit, vagy más egysoros szösszeneteket írsz.)
Kettes vagyok. Akkor máshogy fogalmazva: van egy propertym. Hogy ildomos használni?
public int Id;
VAGY
public int Id { get; set; }
A kód mindkét módon fordul és működik is. Gondolom ez az utóbbi egy rövidített módja a szokásos get-set írásnak. Viszont akkor nem értem, hogy nélküle hogy működik? A C# ezt alapból kipótolja fordításnál?
Nem pótol ki semmit a fordító, de itt két külön dologról van szó.
Az első egy publikus mező, a második egy publikus property.
Publikus mező és publikus tulajdonság között szemantikai különbség van.
Míg egy mezőről tudod, hogy az egy db érték és nem választható el a reprezentációtól, addig a tulajdonság egy absztraktabb dolog és elfedi az implementációt.
Tehát ha van egy publikus "hossz" meződ:
public int Length;
akkor ebből kiderül, hogy te a hosszt, mint egy db egész szám tárolod és ezt később nem is tudod megváltoztatni.
Míg ha egy tulajdonságod van:
public int Length {get; set;}
akkor csak azt tudod, hogy van egy hossz tulajdonságod, ami egy egész szám, de hogy te ezt egy intként tárolod, vagy bármilyen másképpen számolod, az a külvilág elől el van rejtve.
Ezek igazából OOP alapelvek, nagyobb projektek kapcsán lehet ezeknek a dolgoknak a fontosságát érezni, nem kis gyakorló feladatokban.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!