Witam. Przeczytałem kilka poradników na temat tych dwóch instrukcji i za cholerę nie mogę zrozumieć czemu ma to służyć. Po co mówić kompilatorowi, że jeżeli odwołamy się do tej wartości to ta wartość jest zwracana? Czy tak nie jest domyślnie? Jeżeli coś źle zrozumiałem, proszę mi to wytłumaczyć. Pozdrawiam.
Ja uważam to za błąd projektowy C#, i ogólniej .NETa.
Twórcy C# zmarnowali okazję, by pozbyć się podziału na pola (field) i właściwości (property).
Powinno być tak (ale nie jest), że taki zapis w klasie:
int x { get; set; }
znaczyłby to samo co
int x;
Jeremi napisał(a):
Witam. Przeczytałem kilka poradników na temat tych dwóch instrukcji i za cholerę nie mogę zrozumieć czemu ma to służyć. Po co mówić kompilatorowi, że jeżeli odwołamy się do tej wartości to ta wartość jest zwracana? Czy tak nie jest domyślnie? Jeżeli coś źle zrozumiałem, proszę mi to wytłumaczyć. Pozdrawiam.
Bo ani get ani set nie musi być pusty, może robić coś jeszcze (chociaż to zła praktyka wrzucać logikę do get). Mając get i set wykrywasz moment, gdy wartość się zmienia oraz z jakiej na jaką i możesz coś z tym zrobić.
A czemu jest pusty get, set no cóż po to żeby to było właściwością a nie polem. Możesz np później w klasie dziedziczonej zaimplementować get i set.
Nie no... słuchajcie. Gettery i settery są bardzo przydatne, bo nie muszę pisać tych głupich metod typu public string getName() { return this._name; }
etc... tylko mam gettera i od razu mam dostęp do własności z domyślnie zdefiniowanym returnem albo settera z domyślnie zdefiniowanym ustawieniem obiektu navalue
.
A jak chcę sobie przedefiniować domyślne wartości to zawsze przecież mogę to zrobić tak jakbym pisał zwykłą funkcję. Wg mnie bardzo wygodny i fajny pomysł.
Oprócz tego co napisali poprzednicy
- http://stackoverflow.com/questions/13833558/when-to-use-get-and-set-in-c-sharp-class-declaration + google
- właściwości mogą być obecne w iterfejsie
- bindowanie działa tylko na właściwościach
- nie zrobisz pola tylko do odczytu (readonly tyczy się czego innego)
- serializacja, kontrakty i właściwie cały WCF jest oparty na właściwościach
Świetny Samiec napisał(a):
Jeremi napisał(a):
Witam. Przeczytałem kilka poradników na temat tych dwóch instrukcji i za cholerę nie mogę zrozumieć czemu ma to służyć. Po co mówić kompilatorowi, że jeżeli odwołamy się do tej wartości to ta wartość jest zwracana? Czy tak nie jest domyślnie? Jeżeli coś źle zrozumiałem, proszę mi to wytłumaczyć. Pozdrawiam.
Bo ani get ani set nie musi być pusty, może robić coś jeszcze (chociaż to zła praktyka wrzucać logikę do get). Mając get i set wykrywasz moment, gdy wartość się zmienia oraz z jakiej na jaką i możesz coś z tym zrobić.
A czemu jest pusty get, set no cóż po to żeby to było właściwością a nie polem. Możesz np później w klasie dziedziczonej zaimplementować get i set.
@Świetny Samiec
Tak wiem, że może robić coś jeszcze, ale zastanawiałem się nad sensem tego zapisu:
int zmienna {get; set;}
@Michał Bodziony
Chodzi o int zmienna { get; set; }
Myślę, że ten wątek wszystko wyjaśni w temacie: http://stackoverflow.com/questions/1876197/why-have-empty-get-set-properties-instead-of-using-a-public-member-variable