. jak .NET

.NET & stuff blog by Maciej "Procent" Aniserowicz

Metody get_ i set_

22 marca 2008 13:11 w kategorii: pro
Tagi: ,

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.


Komentarze

:)

23 marca 2008 21:05

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

24 marca 2008 13:22

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!

3 czerwca 2008 23:35

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

4 czerwca 2008 08:22

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

Dodaj komentarz


 

[b][/b] - [i][/i] - [u][/u] - [quote][/quote] - [code][/code]