Przejdź do treści

DevStyle - Strona Główna
Metody get_ i set_
Backend

Właściwości (properties) to przyjemny mechanizm do zapewniania enkapsulacji, czyli jednej z najważniejszych cech programowania obiektowego. Przyjemniejszy niż zwykłe metody zwane “getters & setters”. Zwrócę jednak uwagę na ciekawy fakt (zapewne znany większości czytelników, ale…). Popatrzmy na następujący kod:

 1:   private int _number;
2: public int Number
3: {
4: get { return _number; }
5: set { _number = value; }
6: }
7:
8: public int get_Number()
9: {
10: return 0;
11: }
12:
13: public void set_Number(int number)
14: {
15: }

Z jednej strony znana wszystkim doskonale właściwość, z drugiej – zwykłe metody nie mające z nią nic wspólnego poza taką samą nazwą poprzedzoną przedrostkami get_ i set_.
Co otrzymamy przy próbie kompilacji? Błąd (różny w zależności od wersji kompilatora)! Powód? Otóż “pod spodem”, w mrocznych i strasznych flakach Języka Pośredniego, właściwości to nic innego jak… tworzone w locie getters & setters wywoływane w odpowiednim momencie:

 [MSIL]
1: .property instance int32 Number()
2: {
3: .get instance int32 ConsoleApplication1.Program::get_Number()
4: .set instance void ConsoleApplication1.Program::set_Number(int32)
5: }

Oczywiście to samo dotyczy “automatycznych właściwości” wprowadzonych w C# 3.0.

Zobacz również