» »

metoda #get, #set ---> c#

metoda #get, #set ---> c#

fokz8 ::

Zanima me, kako in zakaj se uporablja metoda get in set v c#

Imam primer:

string ime;
string priimek;
string datumRojstva;
string datumVeljavnosti;

public void vnosPodatkov()
{
}

public void izpisPodatkov()
{
}

...tale izpis zajema izpis zgoraj vnesenih podatkov, torej imena, priimka in datuma veljavnosti, namreč gre se za nekakšne vozovnice...ali potrebujem za to metodo GET IN SET? za tale izpis?

zanima me tudi, če potrebujem metodo get in set v primeru:

public void poisciVozovnice()

...torej da nam poišče že kupljene vozovnice.

hvala in lp

Wisse ::

Kar uporabljaš (string ime...) je enako prazni get/set formi in ti zato ni potrebno tega posebej pisat. Get/set bi uporabil, če bi hotel med nastavljanjem (set) oz prebiranjem (get) izvesti še kakšno dodatno operacijo.
Primer: V set bi lahko dodal nekaj kode, ki bi pretvorila besedo s samimi velikimi ali malimi črkami v besedo z veliko začetnico in ostalimi malimi črkami.

Za iskanje vozovnice boš potreboval nek seznam vozovnic. Tvoja struktura zgoraj omogoča vnos samo enega seta podatkov. Jaz bi recimo naredil razred (class), ki bi vseboval vse potrebne lastnosti (brez funkcij) in nato ustvaril seznam (list) teh razredov.

fokz8 ::

@wisse

hvala za prvi del odgovora.

za drugi del pa...imam razred seznamVozovnic, ki ima tole metodo poisciVozovnice

class SeznamVozovnic
{
//Metode razreda Seznam vozovnic
public void prodajVozovnice()
{
}
public void poisciVozovnice()
{
}

...kaj misliš s tem "Jaz bi recimo naredil razred (class), ki bi vseboval vse potrebne lastnosti (brez funkcij) in nato ustvaril seznam (list) teh razredov. "?

Wisse ::

Ne vem kako si si ti zamislil iskanje vozovnic. Za iskanje potrebuješ seznam in ti seznama nisi pokazal. Ali imaš že kakšno idejo kako bi zabeležil večje število prodanih vozovnic? Lahko ti pomagam s predlogom.

Še malo dodatka k 1. delu:
string ime;
string priimek;
string celoIme
{
   get { return ime + " " + priimek; }
}
Tu sem uporabil get/set formo za lastnost "celoIme". Set sem pobrisal, zato lastnosti ni mogoče neposredno nastaviti, pod get pa sem dodal malo kode, ki zbere drugi dve lastnosti in vrne željeno. "ime" in "priimek" lahko seveda nastavljaš in bereš na čisto običajen način.

fokz8 ::

1.Mišleno je kot konzolna aplikacija. Če daš iskanje, nj bi ti prikazalo datum nakupa, ceno in kraj vstopa ter izstopa. Nekaj podobnega. Ubistvo je še use v gradnji, tako da še nimamo nekako najbol oblikovano. Sicer nočem met tega, vendar pa se ne spomnem karkoli drugega. Sam prfoks mi je rek naj imam razred seznam vozovnic, in noter dam atribut "prodajVozovnice". Ker nočem da je samo ta atribut, sem dodal še tega, vendar pa se mi zdi zelo butast in ga niti nebom znal sprogramirat, vendar pa se ne spomenm karkoli drugega ki bi lahko blo pod razred seznam vozovnic.

2.Za tole zgornjo kodo?. Get morem js dat znotraj metode, tako zahteva naloga.

naprimer:
string ime;
string priimek;
string celoIme;

public void izpisPodatkov()
{
get { return ime + " " + priimek };
}

...vendar pa če to napišem tako, mi vrže error.Kako je pol prav?

Wisse ::

Se pravi metoda prodajVozovnice bi dodala nov vnos v seznam, poisciVozovnice pa bi prebrskala seznam in vrnila željeno. Imaš kašna navodila po čem bi rad iskal?

2.:
Šlo bi npr tako:
public string izpisPodatkov()
{
   return celoIme;
}
Za ime, priimek in celoIme obdržiš del, ki sem ti ga prej predlagal.

Zgodovina sprememb…

  • spremenil: Wisse ()

fokz8 ::

1. Da, nimam kakih navodil.

2.hvala

Wisse ::

Narediš čisto preprost razred:
class Vozovnica
{  
   public string ime;
   public string priimek;
   public string datumRojstva;
   public string datumVeljavnosti;
   // lahko dodaš poljubne lastnosti, tudi z get set opeatorji
}

Potem pa v svojem glavnem razredu narediš seznam, katerega obliko narekuje razred Vozovnica:
private List<Vozovnica> seznamVozovnic = new List<Vozovnica>();

In nadaljuješ z metodo:
private void prodajVozovnico()
{
   Vozovnica novaVozovnica = new Vozovnica();
   // koda, ki napiše v konzolo "Prosim vnesi ime:" (Console.WriteLine)
   // koda, ki prebere vpisano ime iz konzole (Console.ReadLine) npr na dolgo:
   string konzolaIme = Console.ReadLine();
   // nastaviš ime novi vozovnici (lahko bi to storil tudi neposredno, brez vmesne lastnosti "string konzolaIme")
   novaVozovnica.ime = konzolaIme;
   // to sotriš še za priimek, datum rojstva in datum veljavnosti
   // ...
   // ko je vse vnešeno, dodaš novo vozovnico na seznam:
   seznamVozovnic.Add(novaVozovnica);
   return;
}

Osnovna metoda za iskanje lepo preišče seznam:
private void poisciVozovnico()
{
   // v konzoli zaprosi za iskalni niz
   Vozovnica najdenaVozovnica = //metoda za iskanje, ki vrne eno vozovnico
   // razne rešitve, če seznam še ne vsebuje vozovnic oz. iskanje ni obrodilo sadov
   // izpis uspešno najdene vozovnice. npr:
   Console.WriteLine("Ime: " + najdenaVozovnica.ime")
   // ...
}
Metod za iskanje je več. Rezultati izkanja so tudi lahko različni, zato se tu ne bi rad preveč razpisal. Malo preveri googlove zadetke in se poigraj. Koda za iskanje je sicer lahko izjemno elegantna, vendar včasih malo naporna za razumet. Vseeno ti predlaga, da se v to poglobiš in poizkusiš dojet, ker je tu vaja res dobrodošla :)

Kode nisem preveril v VS, zato so možne napake.

fokz8 ::

wow hvala ti ful. hvala za tvoj čas in use. to mi bo pa ful pomagalo:). Najraj bi ti kr za per dau(Y). Res hvala še enkrat.

Wisse ::

Ni problema. Sem bil tudi sam na taki točki in mi je vsaka pomoč zelo prav prišla. Sedaj pač sprašujem kaj malenkost bolj kompliciranega -.-

Ti samo zvijaj pamet in nalogo reši, ker nima smisla, da ti tu kdorkoli napiše celotno rešitev.

fokz8 ::

Hja. sem začetnik v tem in so problemi povsod. Sj googlam in tako naprej, vendar pa je tam samo ponavadi kakšen primer brez dobre razložitve in pol mi ni nič jasno -.-

Bom pa seveda sam rešo..mam rad k mi nekdo neki razloži in pol dejansko sam razumem...ne samo copy+paste varjante:)

me pa zanima še tole:če lahko tut takole

string ime;
string priimek;
string datumVeljavnosti;

public void izpisPodatkov ...brez oklepajev
{
get { return ime + " " + priimek };
}

in kljub temu še vedno vračam datum veljavnosti...torej da mi ne vrne samo imena in priimka temveč tudi datum veljavnosti..torej če lahko vračam več kot eno stvar znotraj metode če uporabljam get

Zgodovina sprememb…

  • spremenil: fokz8 ()

Wisse ::

Void metoda ne vrača ničesar. To je definicija void-a. Načeloma z ene metode lahko vračaš le eno stvar, vendar je ta stvar lahko sestavljena (kot npr. Vozovnica, ki sem ti jo zgoraj predlagal). Tista tvoja koda z metodo brez oklepajov najbrž sploh ni veljavna.
Get nima kaj početi znotraj metode, ker se uporablja v navezi z lastnostmi. Ne prevajaj si ključnih besed stila get/set/return dobesedno. Da od nekje nekaj dobiš ni nujno potrebno uporabiti get. Vse je odvisno od konteksta.
Get in set se npr sprožita samodejno:
string ime;
string priimek;
string celoIme
{
   get { return ime + " " + priimek; }
   set { priimek = value; } //tukaj bi recimo dopolnil tako, da bi del pred presledkom dodelilo imenu, del po presledku pa priimku
}

public void test()
{
   celoIme = "Wisse W."; // celo ime si nastavil, zato se sproži set od lastnosti celoIme
   string imeInPriimek = celoIme; // celo ime si klical, zato se sproži get od lastnosti celoIme
}


Metodo, ki nekaj vrne oblikuješ tako:
public string izpisPodatkov()
{
   return ime + " " + priimek;
}
Lahko prej oblikuješ poljuben string:
public string izpisPodatkov()
{
   string podatki;
   podatki = ime + " " + priimek;
   podatki = podatki + " " + datumVeljavnosti;
   return podatki;
}
Metoda lahko vrača tudi celotno vozovnico:
public Vozovnica izpisPodatkov()
{
   return seznamVozovnic[0]; // vrne prvo (ničto v C-ju) vozovnico iz seznama
}
Znotraj metode seveda lahko spreminjaš vse lastnosti, ki so skupne razredu. Tudi, če metoda ne vrača ničesar.

fokz8 ::

aaa. okej hvala še enkrat:)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c# seminarska

Oddelek: Programiranje
112436 (2109) tuned
»

[C#] Deserializacija

Oddelek: Programiranje
181761 (1364) Cvenemir
»

[C#] Kopiranje osebe iz seznama v drug seznam

Oddelek: Programiranje
51399 (1260) Presidente
»

Povezani seznam

Oddelek: Programiranje
131981 (1578) pohano
»

[Java][Naloga] Seznam študentov, majčken problem

Oddelek: Programiranje
362236 (1923) VASkO

Več podobnih tem