Avatar billede brian0905 Nybegynder
12. januar 2006 - 11:46 Der er 6 kommentarer og
2 løsninger

Public variable contra properties

Hej Eksperten,

Endnu engang gik bølgerne højt til et af vores udviklingsmøder. Som mange gange før kom vi ind på vores "kode-teknik". Jeg selv står meget stejlt på mine holdninger (hvilket ofte har bragt mig i disse skænderier om vores forskelligartede implementeringsmetoder). Diskutionen denne gang gik på hvorfor i alverden man skulle lave en property (med set og get metoder) i stedet for blot at lave en public variabel, hvis man alligevel kun skulle assigne og læse fra den. Jeg selv holder på at man ALTID laver en private instansvariabel og så en public property man kan tilgå, det mener jeg er den "rigtige måde" at holde objektorienteret-heden intakt på (dvs objektet styrer selv sine instansvariable). Argumenterne (som faktisk er helt fornuftige) er at der jo ikke er nogen forskel, på nær hvis jeg kun skal gette eller kun sette. Men hvis det er en property, der kun settes og gettes (ingen databehandling) så hvorfor ikke lave den som en public variabel.

Jeg kunne godt tænke mig at høre andres holdninger til denne debat. På forhånd tak.

For at vise eksemplet, så er det det her vi snakker om:

PUBLIC INSTANSVARIABEL:

public class Bruger
{
    public string fornavn;

    public Bruger()
    {
    }
}

CONTRA EN PROPERTY

public class Bruger
{
    private string fornavn;

    public Bruger()
    {
    }

    public string Fornavn
    {
        get { return fornavn; }
        set { fornavn = value; }
    }
}
Avatar billede arne_v Ekspert
12. januar 2006 - 12:05 #1
det er almindeligt accepreret bland 90% af OOP programmører at man skal
encapsulate med get/set også selvom ikke de gør andet

begrundelsen er at man jo evt. senere vil gøre andet
Avatar billede innercitydk Nybegynder
12. januar 2006 - 12:06 #2
Enig. OOP ligger jo netop op til en strukturering af koden. Get/Set metoderne er god praksis
Avatar billede brian0905 Nybegynder
12. januar 2006 - 12:32 #3
Fuldstændig enig, men omvendt så er det jo nemt (specielt i C#) at ændre det efterfølgende, det er blot at lave en property, der hedder det samme som den public variabel, og så rename denne... og vupti, så har du en property i stedet for en public instansvariabel.
Avatar billede bennytordrup Nybegynder
12. januar 2006 - 12:34 #4
Jeg er enig med dette synpunkt. Grundideen i OOP er at lade klassen styre adgang til interne variable, og det sker netop gennem Properties.

Der er jo også i Property Set mulighed for at lave validering af det overførte.
Avatar billede arne_v Ekspert
12. januar 2006 - 12:48 #5
konventionen hedder fields starter med småt properties starter med stort, så
en ændring fra field til property med samme navn er absolut ikke pænt
Avatar billede brian0905 Nybegynder
12. januar 2006 - 14:14 #6
Takker, giv lige nogle svar
Avatar billede bennytordrup Nybegynder
12. januar 2006 - 14:26 #7
svar
Avatar billede arne_v Ekspert
12. januar 2006 - 14:29 #8
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester