fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

Metody get_ i set_


22.03.2008

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.

0 0 votes
Article Rating
7 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
:)
:)
16 years ago

Czyli co, wychodzi na to, ze piszac zwykla wlasciwosc czy odpowiednie metody (get i set) wychodzi na to samo? Czy moze jest jakas roznica w predkosci?

Procent
16 years ago

Wychodzi na to samo – z pewnością wydajność nie powinna być kwestią rozstrzygającą jeżeli chodzi o użycie metod vs użycie właściwości. Właściwości są po prostu bardziej praktyczne.

fromasz!
fromasz!
16 years ago

tak sobie czytam Twoj blog od poczatku i musze powiedzc ze to swietna sprawa i wielu ciekawostek mozna sie tu dowiedziec. (nie od poczatu istnienia blogu, tylko od wczoraj ale od konca :)) pozdrawiam

Procent
16 years ago

Dzięki, radość ma nie zna granic;)

Bonk
Bonk
16 years ago

Mam takie pytanko…
Czasami widze w kodzie cos takiego:
public string Path { get; set; }

Co oznacza taki kod?
Dzieki za wyjasnienie…

Procent
16 years ago

@Bonk:
Są to tzw "automatic properties". Zostały wprowadzone w C# 3.0. Kompilator zamieni je na normalne [g|s]ettery. To co napisales jest rownowazne z:

private string _path;
public string Path
{
get { return _path; }
set { _path = value; }
}
Bonk
Bonk
16 years ago

Dzieki za wyjasnienie.

pozdrawiam

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również