Kezdőoldal » Számítástechnika » Programozás » C#-ban mikor érdemes property-...

C#-ban mikor érdemes property-t és mikor simán statikus adattagot használni?

Figyelt kérdés

Igyekszem (persze a saját szintemen) minél bonyolultabb programokat készíteni (WPF és WinForms), hogy a gyakorlatban is találkozzak néhány specifikusabb problémával, gyakoroljam az OOP-t stb.


Fel is merült bennem például az a kérdés, hogy mikor érdemes property-t használni?


Azért használok adattagokat, amit az adott osztály metódusai szabadon láthatnak, esetleg módosíthatják, sőt, esetleg adott esemény elsülésekor módosulnak.

Ezek jó, ha property-k vagy simán változók legyenek?


2019. ápr. 29. 21:13
1 2
 1/11 anonim ***** válasza:
Az esetek 99%-ban property.
2019. ápr. 29. 21:43
Hasznos számodra ez a válasz?
 2/11 anonim válasza:
53%
Statikust akkor, ha nincs instance, ami használja. Különben meg ki fér hozzá? Ha csak saját instance, akkor private, ha inherited, akkor protected. Ha “bárki”, akkor public.
2019. ápr. 29. 23:23
Hasznos számodra ez a válasz?
 3/11 A kérdező kommentje:

Hú, jól leírtad a láthatósági szinteket, köszi!



Hát, 90%-ban property-t is használok, csak elkezdtem gondolkozni rajta, hogy valaki meglátja a kódomat és azt gondolja: jesszus, ez még ez se érti.

2019. ápr. 30. 05:07
 4/11 anonim ***** válasza:
#2: bohóc
2019. ápr. 30. 07:44
Hasznos számodra ez a válasz?
 5/11 anonim ***** válasza:

Teljesen más a felhasználási terület.


Statikus adattag: ez nem függ az osztály példányától. Sőt, minden példány ugyanazzal az értékkel fog rendelkezni. Tehát ha egy osztály statikus adattagját beállítod 5-re, akkor hiába hozol létre abból akárhány új példányt, mindegyiknél 5 lesz ez az érték. Ha módosítod, mindnél módosul.


Privát adattagot használunk az osztály állapotának leírásához.


Property célja, hogy kontrollálni tudjuk egy adattag hozzáférhetőségét. WPF alkalmazások fejlesztésénél például azért használjuk, mert nem szeretnénk, hogy egy állapotot leíró változót meg lehessen változatni anélkül, hogy OnPropertyChanged függvény hívódna.

2019. máj. 1. 14:35
Hasznos számodra ez a válasz?
 6/11 A kérdező kommentje:

Property-t is az osztály állapotának leírásához használunk, nem?



A kiscicák száma növekszik a kiscica vásárlása gomb megnyomásának hatására, csökken a kiscica eladása gomb megnyomásának hatására, de nemcsak a felhasználó cselekedete (gombnyomása) befolyásolja a népességüket, hanem szaporodnak és sajnos néha meg is halnak.


Itt a kiscica property vagy csak simán változó? (A statikust véletlenül írtam oda :( azt már nagyjából értettem eddig is).


Szóval:


public int kisCicakSzama;

vagy

public int KisCicakSzama { get; set;}



Nekem mindig ingerenciám van az utóbbit használni, de ki tudja, jól értem-e.



Bocsánat a nagyon idétlen példáért.

2019. máj. 1. 17:03
 7/11 A kérdező kommentje:

Ha egy osztályba pakoltam egy metódust, ami csinál valamit, esetleg meghív más, private metódusokat az osztályából, és együtt, közös erővel csinálnak valamit :D


Akkor az az osztály lehet statikus, ha nem akarom példányosítani, nincs erre szükség, nem kell adatokat tároljon, nem függ az osztály példányainak állapotától semmi...

Lehet statikus, hogy simán csak úgy hivatkozhassak rá, hogy:

Osztalyneve.Metodusneve();


és ne kelljen:

Osztalyneve o = new Osztalyneve();

o.Metodusneve();

2019. máj. 1. 17:07
 8/11 anonim ***** válasza:

Property használatára egy példa:


private int _paros;


public int Paros {

get { return _paros; }

set { if (value % 2 == 0) { _paros = value; } }

}


Célszerű így használni egy property-t. Ekkor csak páros számmal lehet egyenlővé tenni.

Ha nincsenek ilyen céljaid (csak ki szeretnél vezetni egy értéket), akkor is inkább property-vel csináld, ugyanis később sokkal egyszerűbb módosítani a kódot, ha ki akarod egészíteni.


A másik kérdésed: igen, szoktak ilyet csinálni, amikor az osztály csak névtérként szolgál pár függvénynek. Arra figyelj, hogy statikus kontextusból nyilván nem hívhatsz nem statikus függvényt / nem érhetsz el nem statikus változót.

2019. máj. 1. 17:18
Hasznos számodra ez a válasz?
 9/11 A kérdező kommentje:

Ezt úgy szoktam most, hogy létrehozok egy "dobozt", valóban egy külön névteret valaminek, pl. fájl mentése (volt konkrétan olyan programom, amiben ez volt), ebben egy metódust hívok, ami sokszor hív továbbiakat.

Úgy érted, ha ez statikus, akkor innen más, nem statikus osztály függvényeit NEM tudom hívni?


Ilyet még nem próbáltam, de fennáll a veszély, hogy belefutnék.



Eddig auto property-ket használtam, tehát simán get; set;, de van már, ami csak get;



Egyébként köszönöm a példádat, ez is sokat segít egy hozzám hasonló zöldfülűnek.


A suliban szerintem csak hónapok múlva jutunk el ide, de nem szeretném megvárni, mert már jóval előrébb járok, pár hónappal előbb kezdtem magamtól tanulni, minthogy a sulit elhatároztam.

2019. máj. 1. 17:36
 10/11 anonim ***** válasza:

Erre gondoltam:

class Example

{

private void PrivateMethod()

{

}


public static void PublicStaticMethod()

{

PrivateMethod();

}

}

Ez nem fog lefutni, mert a PrivateMethod-ot nem tudod meghívni.


Nyilván a PublicStaticMethod()-ban csinálhatsz majd olyat, hogy például Example2 o = new Example2(); o.PublicMethod();

2019. máj. 1. 20:03
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!