29. april 2014 - 13:22Der er
8 kommentarer og 1 løsning
Properties vs indkapsling
Hej eksperter
Nu har jeg hygget mig lidt med java og er begyndt at kigge på C#.
Det er jo rasende nemt at lave Properties med get/set metoder i C#. Er der den samme indkapsling af en property som der er med en privat klassevariabel med get og set metoder?
public int Property {get; set;}
private int field; public int getField(){ return field; } public void setField(int field){ this.field = field; }
Udover, at det er meget nemmere at lave properties, hvad taler så for/imod denne metode?
Det sker selvfølgelig inde bag i, men din int property får automatisk genereret en privat variable og et sæt get og set metoder til at læse og sætte den med.
Du kan se det hvis du køre i debug mode at det rent faktisk også er tilfældet.
Dit eksempel er skidt fordi enten skal du lade begge dine properties være auto implementeret eller også skal begge have en krop. Med andre ord dit eksempel vil give kompilerings fejl:)
men jeg forstår hvad du spørger om og groft sagt så ja det er indkapsling, men i sin simpleste form. Vi har nemlig ikke direkte adgang til den private int, som der bliver generet i ovenstående, men får adgang til den via. en public get metode, som C# generere.
Du kan sætte protection level; f.eks. en public getter og en private setter: public int Foo { get; private set; }
Det virker fint i interfaces: public interface Foo { int Bar { get; set; } }
Jeg vil stærkt anbefale denne måde; det er en integreret del af sproget og hvis du koder Java-style getFoo()/setFoo(), så vil dine klasser i høj grad være anderledes. F.eks.
Foo a = new Foo(); Bar b = new Bar(); Wtf c = new Wtf(); a.Name = "hello world"; b.setName("hello world"); c.Name = "hello world";
Alle points til kalp. Han svarede på det væsentligste.
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.