Kezdőoldal » Számítástechnika » Programozás » (C#) Mi a különbség a mezők...

(C#) Mi a különbség a mezők és a tulajdonságok lentihez hasonló megadása között?

Figyelt kérdés

pl.


int Szam;


int Szam { get; set; }


Tapasztalataim szerint mindkettő ugyanúgy működik. Van különbség?


2017. máj. 9. 14:42
 1/9 anonim ***** válasza:

Van.


Míg az egyik esetben közvetlenül az attr.-nak adsz értéket, addig a { get; set; } esetén egy getter-setter metódus hívódik meg (ez esetben az attr. lehet private), ami beállítja az attr.-ot, attól függetlenül, hogy te az "Obj.Szam = xy" adod meg.


Továbbá a getter-setter metódust felül tudod írni, abban a blockban, hogy speciális dolgoz csináljon. pl. negatív szám helyett 0-t írsz be.


Bár annyira nem ismerem a C#-ot (inkább Java, PHP-s vagyok), de mikor tanultam valami ilyesmi maradt hátra. :)

2017. máj. 9. 14:47
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:
Persze tudom, hogy a tulajdonsággal (propertyvel) lehet "varázsolni" is úgy, ahogy írtad (pl. return-öljön 0-t stb), illetve lehet szabályozni vele az írást/olvasást, de én konkrétan erre a fentebb írt formájára vagyok kíváncsi, tehát mikor a 'get' és a 'set' is adott, de nincsenek kifejtve egy blokkba, hanem a fentebb látható módon azonnal egy ; jön utánuk.
2017. máj. 9. 15:14
 3/9 anonim ***** válasza:

Ezek szerint mégsem nagyon tudod.

Egyrészt van szemantikai különbség. A mező az, ami, felfedi az implementáció, míg a property elrejti.

Másrészt Property lehet része interface-nek, leszármazásnál felül lehet definiálni, ésatöbbi.


Publikus mezőket nagyon egyszerű mutable struct-ok és néhány nagyon speciáls eseten kívül soha sem érdemes használni.

2017. máj. 9. 15:25
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:

"Ezek szerint mégsem nagyon tudod. "


Nem ezt kérdezte. Hanem azt, hogy amikor nincs megadva egy privát mező a property mögött, akkor mi történik. Ezt igazából én sem tudom. Ugye a szokásos eljárás:


private int mezo;

public int Mezo

{

get{ return mezo;}

set{ mezu = value;}

}


No de ha ÖNMAGÁBAN így használod:

public int Mezo{get;set;}


Na ilyenkor mi van? Ilyenkor ez gyakorlatilag egy mezőként viselkedik, a háttérben viszont nem tudom mi történik.

2017. máj. 9. 18:42
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

Ugyanaz, a különbség, hogy a mögöttes mező automatikusan generálódik ki.


A fent írt konkrét példában túlzottan sok funkcionális különbség nincsen, ami például kiemelhető, hogy a propertyt interface-ben is tudod deklarálni, míg a mezőt nem. Ezen felül ebben a konkrét formában nincs túl sok eltérés.

2017. máj. 9. 18:53
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:

Igen, én is értem, hogy nincs különbség, teljesen tisztában vagyok a getter-setter metódusok értelmével meg használatával, én most a nyelv mögöttes logikájára lettem volna kíváncsi, mint ahogy a kérdező is. De hát akkor ezek szerint ilyenkor automatikusan generál egy mezőt.


Az interfaces dologért köszönet, ez még nem tűnt fel.

2017. máj. 9. 18:57
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:

Tervezési, architekturális különbség van köztük. Ha majd a SOLID-ot és az enkapszulációt tanulni fogod, abban sokkal jobban ki van fejtve.


Röviden egy-két mondatban arról van szó, hogy komoly szoftvert nem osztályokban gondolkozva tervezel, hanem interfészeket hozol létre. Az, hogy az az interfész konkrétan hogy van implementálva, nem érdekes az őt felhasználó kód számára, neki azt kell tudnia, hogy ez egy olyan valami, ami csinál egy bizonyos dolgot, vagy szolgáltat valamilyen adatot. Ezért fontos például az, amit előttem is írtak, hogy interface-re nem tehetsz field-et, property-t viszont igen. Ha egy osztályszintű adat fontos az interfész szempontjából, akkor property-t csinálsz belőle. Ha csak az implementációhoz kell, private field-et hozol létre.


Példa:


interface IDogProvider

{

int NumberOfDogs { get; }

  Dog GetDobByName(string name);

}


Na most, ha fel akarod ezt használni egy osztályban, akkor elég annyit tudj róla, hogy ez egy kutyákat szolgáltató konstrukció. Teljesen mindegy, hogy adatbázisból szedi őket, memóriából, internetről, egy txt fájlból. A felhasználó kódnak ha van egy kutyaneve, az alapján vissza tud kapni egy kutyát, illetve meg tudja nézni, hogy hány kutya van összesen. Példa implementációk erre az interface-re:


[link]

2017. máj. 9. 19:56
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:
Próbáltál már WPF-es programban egy mezőt bind-olni? Ugye, hogy nem megy...
2017. máj. 11. 18:04
Hasznos számodra ez a válasz?
 9/9 anonim ***** válasza:
#8 Ez a legrosszabb példa amivel előjöhettél volna.
2017. máj. 11. 19:19
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!