Kezdőoldal » Számítástechnika » Programozás » C#-ban mi értelme az auto...

C#-ban mi értelme az auto property-nek, mikor használjuk?

Figyelt kérdés
2019. júl. 6. 18:00
 1/10 anonim ***** válasza:
100%

Egyszerű getter-setter működést valósítanak meg, minimális kódból.


A getter-setter metódusok lényege, hogy a mögöttes adattagot ne lehessen közvetlenül elérni, és kontrollált körülmények között működjön annak olvasása, és írása. A propertyk lényegében ugyanezt valósítják meg úgy, hogy szintaktikusan változóként viselkednek. Alapvetően egy getter, vagy setter metódusba bármilyen logikát beleírhatsz, nem feltétlenül merül ki a működése annyiban, hogy visszaadja a mögöttes adattag értékét, vagy beállítja azt, lehet hogy végez mögöttes számításokat, logolást, stb. Viszont ha csak egy mezei gettert, vagy settert akarsz egy mögöttes adattaghoz, akkor az auto property ezt megcsinálja neked. És így ehelyett:


int myDataMember;


int MyProperty {

get { return myDataMember; }

set { myDataMember = value; }

}


Elég ennyit írnod:


int MyProperty { get; set; }


Ez létrehoz egy mögöttes adattagot, és biztosít egy egyszerű getter/setter működést.

2019. júl. 6. 19:47
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:

Csakhogy utána mindenhol azt a propertyt használom, így nem értem, hol valósul meg az adattagok elrejtésének elve.


Másik osztályból éppúgy beállíthatok baromságot, stb

2019. júl. 6. 20:16
 3/10 anonim ***** válasza:
100%

Azt ugye tudod, hogy nem kell ám publikusnak lennie a setternek?


public MyType MyProperty { get; private set; }


Így nem állíthatsz be "baromságot" kívülről.

2019. júl. 6. 20:52
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:
Gyakori az ilyenfajta használat?
2019. júl. 6. 20:59
 5/10 anonim ***** válasza:
100%

Ha működésileg egy teljesen publikus adattagot akarsz, és biztosan nem akarsz soha változtatni ezen, akkor fölösleges propertyt használni. Viszont minden más esetben érdemes. A propertyk sok esetben máshogy működnek, mint az adattagok, például propertyt adhatsz meg interface-ben, szóba jöhetnek virtuális propertyk, override-ok, stb. És noha kívülről úgy tűnhet, hogy a property ugyanúgy viselkedik, mint egy adattag, azért tartsd szem előtt, ha egy adattagot propertyvé alakítasz később, akkor a teljes újrafordítást fog igényelni, míg ha egy propertynek átírod a getter/setter metódusát, az csak lokálisan van kihatással.


Összességében alapvetően a property tekinthető az alapvető választásnak, és a sima adattag az, ami a kivétel kategóriát képezi.

2019. júl. 6. 21:11
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

Nagyon gyakori.

És azért rejti a belső működést, mert bármikor lecserélheted például normál Propertyre, anélkül, hogy megváltozna az interface.

2019. júl. 6. 21:12
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:

Akkor javában is az egységbezárás megszegése, ha setter és getter függvényeket írsz? :D


Az a baj nem tudsz különbséget tenni property és tagvaltozó (attribútum) között.


Szerintem a property egy remek eszköz és mindenki használja. Például Wpf/uwp-ben egy szövegdoboz tartalmát egy propertyhez tudsz kötni: amikor megvaltozik a property, akkor a set blokkban jelzed, hogy "halló megváltozott az érték" ezért automatikusan frissülni fog a textbox tartalma. (Ha pl. TwoWay módban van az adatkötés).


Másik - szerintem - hasznos előnye, hogy interészben is tudsz default Propertyt magadni.

2019. júl. 6. 22:49
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

A setter metódusban megadható, hogy például 5 és 10 közötti számot nyeljen csak el, de az autopoperty-nél nem.

Vagy ilyenkor maradunk a full property-nél és csókolom?

Egy oaztályban mennyire zavaró, ha autoproperty és private adattag is van használva a metódusaiban?

2019. júl. 7. 05:44
 9/10 anonim ***** válasza:

Nyilván auto-propertyt csak akkor használsz, ha nincs szükség mögöttes logikára.

Semennyire nem zavaró, ha vegyesen vannak.

2019. júl. 7. 08:00
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

A Getter és Setter olyan, mint Javaban a külön metódus rá, csak itt úgy tudod megvalósítani, mintha fieldet használnál.


A háttérben levő dolgokat eltudod rejteni a külvilág elől.


Játékfejlesztésnél például ami számomra hasznos volt a Setternél az, hogy amikor állítod például a játékos HP-ját, akkor lefut egy EVENT ami jelzi, hogy a játékos élete megváltozott.

Vagy épp kifelé publikus a username, de megváltoztatni nem lehet!

Vagy épp a jelszót mondjuk megváltoztatni lehet, de get-el kikérni nem, hanem külön metódussal tudsz TryLogint csinálni (amúgy is hashelve van a pass).


Másik dolog amivel találkoztam az amikor a háttérben az ID-k valójában el vannak tolva. Lásd például GTA SA-ban is 400-611 a jármű ID-k száma.

Ilyenkor GET és SET-nél automatikusan elrejtve tudod azt a 400-at kivonni, ami persze más kérdés, hogy mennyire illendő és megfelelő megoldás.


Sokan csalnak játékokban és a memóriában levő értékeket szeretik babrálni.

Találkoztam olyan fajta anti-cheat megoldással, ami a megadott propertyknél egy szintén eltárolt számot hozzáadott setnél és kivont get-nél. Hiába volt 100 a HP-ja a kijelzőn, az a memóriában mondjuk 723 volt.

2019. júl. 8. 09:12
Hasznos számodra ez a válasz?

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!