Kezdőoldal » Számítástechnika » Programozás » C#-ban getter és setter...

C#-ban getter és setter írása. Hogyan?

Figyelt kérdés

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.



2016. okt. 5. 13:26
1 2
 1/17 A kérdező kommentje:
*Visual Studio-t akartam írni.
2016. okt. 5. 13:26
 2/17 anonim ***** válasza:

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]

2016. okt. 5. 14:22
Hasznos számodra ez a válasz?
 3/17 anonim ***** válasza:
Tök amatőr kérdés, de én az üres geteket es séteket ki sem írom. Van ennek valami negatív vonzata ? Így is működik ugyebár, csak azon túl.
2016. okt. 5. 14:55
Hasznos számodra ez a válasz?
 4/17 anonim ***** válasza:

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.

2016. okt. 5. 17:04
Hasznos számodra ez a válasz?
 5/17 anonim ***** válasza:

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.

2016. okt. 5. 19:09
Hasznos számodra ez a válasz?
 6/17 anonim ***** válasza:

#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.)

2016. okt. 5. 19:17
Hasznos számodra ez a válasz?
 7/17 anonim ***** válasza:

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?

2016. okt. 5. 19:52
Hasznos számodra ez a válasz?
 8/17 anonim ***** válasza:

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.

2016. okt. 5. 21:02
Hasznos számodra ez a válasz?
 9/17 anonim ***** válasza:
Azt hittem mindkettő egy property. És akkor mi a különbség a mező és a property között? Mert viselkedésben én nulla különbséget tapasztalok.
2016. okt. 5. 23:35
Hasznos számodra ez a válasz?
 10/17 anonim ***** válasza:

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.

2016. okt. 5. 23:42
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!