Getter og setter c#

Tags:    c#

<< < 12 > >>
Hejsa :)

Jeg sidder og er ved at omlægge min webform til at benytte get og set metoder.
Jeg har lavet en specifik class kun til data: Data.cs med følgende indhold.

Når jeg debugger bliver oplysningerne fint lagt i min get og set, men så snart jeg skal bruge oplysningerne i en anden class, så er den nulled

Måden jeg lægger indhold i er:

Fold kodeboks ind/udCSharp kode 



Data.cs fil

Fold kodeboks ind/udCSharp kode 



Kan i se hvorfor min get/set ikke gemmer oplysningerne ?

//Jesper



16 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 9 karma
Sorter efter stemmer Sorter efter dato
Jeg er stadig i en læringsfase, og vil helst lære "best practise" samt kan jeg bruge det som noter/opslagsværk til undervisning og eksamer.

Har i ikke et eksempel på hvordan man bedst håndterer data ?

min overbevisning var at der oprettes en dataklasse som kun indeholder data med get og set og hvad der ellers hører til.

så man ikke har data liggende rundt i de forskellige klasser. :)



[code type="c#"]

Fold kodeboks ind/udCSharp kode 
[/code] Så skulle den ikke resette hvis du bruger sc.
Tam



Jeg må nok indrømme jeg skal have lidt forklaring ?

Hvad er din SeeClass ? og hvordan passer det ind i mit eksempel..



Okay jesper prøv at komme med din kode til din data klasse. Det er lidt nemmere at give råd til hvordan du kan ændre din klasse når vi ved hvordan den ser ud.

Der findes mange måder at lave klasser som kan hente data. Kom med koden dertil så kan vi tage et kig på det derfra.

Edit: Nu må jeg hellere være sikker. Den kode du har stående under Data.cs er det hele koden eller kun et udpluk?

Edit edit:
Okay nu tror jeg forstår det (måske :D). Csharper er faktisk allerede inde på det rigtige.

Nedenunder har du din (partial) klasse Default:

Fold kodeboks ind/udCSharp kode 


Den har en private property af typen Data. Når din side i webformen bliver oprettet så bliver der lavet en instans af din Data klasse, men den er kun tilgængelig for klassen Default.

Hvis du ønsker at kunne gemme data i Data klassen og det skal være tilgængeligt fra en anden webform så er du nød til at lave din Data klasses properties statiske for ellers vil propertyen altid være en del af instansen i stedet for klassen.

Din Data klasse kunne se således ud:
Fold kodeboks ind/udCSharp kode 


Jeg håber det giver mening :)



Indlæg senest redigeret d. 20.02.2013 19:51 af Bruger #6559
indholdsrigt svar :)

din dataproperty har jeg ikke helt forstået.. jeg vil gerne kunne kalde min data direkte fra min dataklasse uden alt for meget kode:

Hvis jeg gør sådan i min data.cs er der så ikke en mere simpel måde at kunne tilgå min get/set på fra en anden klasse? :/

Fold kodeboks ind/udCSharp kode 


Hejsa Jepser

Min DataProperty er det der behøves for at du beholder dit objekt.
Et objekt lever kun så længe der er en pegepind til det som holder fast i det.
Så fx
Fold kodeboks ind/udCSharp kode 

der lever dit Data-objekt kun imellem "{" og "}" og så er det væk igen.
Så hvis du har et event senere (fx. IndexChanged på en dropdown) så findes den ikke fordi ovenstående variabel kun lever i den metode og efter den er der ingenting der holder fast i den eller peger på den = den bliver garbagecollected.
Det eksempel Martin har givet er der noget der holder fast i den ved at den bliver sat i en variabel udenfor metoderne og lever derfor efter hver enkelt metode er udført.
Min DataProperty var blot fordi jeg bedre kan li properties til den slags fremfor en variabel.

Så hvis du gerne vil have dine data fra dit Data-objekt så skal du blot kalde den property eller variabel der holder dit objekt (DataProperty eller dataClass (Martins eksempel)) og så kalde de metoder eller properties på det du har behov for:
Fold kodeboks ind/udCSharp kode 

Du skal tænke på at din variabel eller property vil holde dit objekt, og derfor holde det. Så når du kalder det får du objektet og derefter kan du kalde properties på det - Så DataProperty giver dig Data-objektet og på dette kan man kalde Server.

Hvis du bruger static sørger du for at det gemmes som en enkelt instans uden behov for en pegepind.
Så hvis du bruger denne kan du skrive Data.Server = "Server goes here", og senere henne bruge den til txtServerAdresse.Text = Data.Server fordi at din værdi vil altid blive gemt i dit objekt uden behov for en pegepind dertil.
Det er noget du bør tænke over om du skal bruge det enormt mange steder og mange steder i din webforms applikation, for hvis du kun skal bruge det på et par enkelte billeder så overvej om det virkelig er det du vil. Ellers vil du have et objekt flyvende rundt i memory uden behov for at skulle bruge specielt tit som ikke bliver garbagecollected og tager unødig plads.
Det er sådanne overvejelser man skal gøre sig når man konstuerer sin applikation.



i får lige min data.cs:

Der kommer flere felter med tiden som det bliver udbygget, men det er en start.

Fold kodeboks ind/udCSharp kode 


I starten brugte jeg sessions, men det vanskeliggjorde nogle ting, og var ikke en hensigtsmæssig løsning.

på min default.aspx side har jeg kun tekstboxe og en knap.
når der trykkes på knappen skal indholdet fra tekstboxene over i in dataklasse og ligge.

og i min data.cs skal de være globalt tilgængelige på tværs af klasser. så mine get og set metoder skal kunne holde på de data indtil der bliver skrevet nyt til dem.

Jeg kan ikke helt se hvordan jeg kan flette min data.cs sammen med dine DataProperty metode.

og vil helst undgå at have logik i mit gui lag. :)



Indlæg senest redigeret d. 21.02.2013 12:18 af Bruger #8303
<< < 12 > >>
t