Ik zie het echte antwoord hier nog niet duidelijk tussenstaan. Properties zijn namelijk ontstaan uit de behoefte naar information hiding (
Wikipedia: Information hiding) Dus nog een toevoeging op jullie verhaal:
Vroeger had je alleen members. Soms wil je toegang tot die member in jouw class geven aan andere classes of wat dan ook. Een class heeft altijd een interface, namelijk een set met methodes en hun signatures. Door members te exposen naar andere classes, worden deze ook onderdeel van je interface.
Een member, bijv: int age, is ook onderdeel van je implementatie. Verschillende methodes werken met die member en doen er dingen mee. Als ik plots wil dat mijn age member een double wordt, om wat voor reden dan ook. Dan moet ik behalve dit in mijn eigen class aanpassen, ook aanpassen in de andere dingen die mijn member gebruiken. Soms weet je dit niet, dus kunnen dingen stuk gaan etc.
Toen is in de trend van information hiding het idee van getters en setters ontstaan. Je schrijft dan per member een getter en een setter (of alleen een getter, net wat je wilt.) Een getter/setter is gewoon een wrapper om je member heen die voor de afscheiding zorgt tussen je implementatie van je class en je interface van je class. Je ziet dit veel terug in java. Als je dus je implementatie verandert, in dit geval onze member age, dan hoef je niet persee je interface te veranderen. Je kan namelijk conversie toepassen in die wrapper methodes
Voorbeeld:
Java:
1
2
3
4
5
6
7
8
| private int age;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
} |
Verandering in de implementatie
Java:
1
2
3
4
5
6
7
8
| private double age;
public void setAge(int age){
this.age = (double)age;
}
public int getAge(){
return double.toInt(age);
} |
Aangezien je soms heel wat getters en setters moet schrijven, levert dit wel een hele boel code op en vaak zien die functies er zo uit als hierboven. Daarom heb je dus properties in c#. Properties is dus een verkorte versie van het eerste stukje code. Het scheelt dus heel veel code. Zo behoudt je dus je interface en kan je wel aan je implementatie van de class rommelen.
Dus mijn advies: Gebruik properties als je member data naar buiten wilt gebruiken en maak members zelf altijd private of protected.
[
Voor 57% gewijzigd door
BlackHawkDesign op 23-10-2010 11:04
]