Article View: alt.pl.comp.lang.csharp
Article #9686Re: bledy popelniane przez programistow C#
From: Jaroslaw Kowalski
Date: Wed, 02 Nov 2005 12:05
Date: Wed, 02 Nov 2005 12:05
84 lines
4179 bytes
4179 bytes
"Marcin Grzębski" <mgrzebski@taxussi.no.com.spam.pl> wrote in message
news:dka85j$mnh$1@nemesis.news.tpi.pl...
> Jaroslaw Kowalski wrote:
>> Ciekawi mnie po co w ogóle MS pozostawił w dotnecie takie nieobiektowe
>> pojęcie jak publiczne pola.
>
> Co jest w tym nieobiektowego?
> Przepraszam bardzo ale takiej definicji obiektowości nie znam.
Jedną z podstawowych cech obiektowości jest (wybierz właściwe słowo):
1. encapsulation
2. hermetyzacja
3. enkapsulacja
4. kapsułkowanie (pozdrowienia dla p. JMD)
5. ...
6. ...
7. ...
Udostępnienie publicznego pola, po którym każdy z zewnątrz może pisać bez
kontroli jest zaprzeczeniem tej idei.
>> Wystarczyło zabronić ich stosowania i w każdym przypadku generować
>> automatycznie właściwość z ukrytym polem prywatnym przechowującym stan.
>
> No, to byłby naprawdę wynalazek na miarę "systemu totalitarnego
> programowania". Czy naprawdę tak ciężko jest samemu napisać
> kod właściwości?
> Dlaczego odbierać komuś możliwość korzystania z pól publicznych?
Ależ skąd. Chodzi raczej o generowanie automatyczne właściwości
opakowujących te pola. W .NET masz rozróżnienie na pola i właściwości, gdzie
raczej jest zgoda że w publicznych interfejsach należy używać właściwości.
Gdyby wszystkie pola publiczne były przez kompilator tłumaczone jako
właściwości (Property) a nie pola (Field) to zniknąłby problem
kompatybilności binarnej.
>> JITter dość dobrze radzi sobie z inline'owaniem takich konstrukcji jak
>> trywialne get/set więc chyba nie powinno być problemu wydajnościowego.
>> Zachowana zostałaby za to binarna kompatybilność kodu w przypadku
>> zdefiniowania własnej operacji get/set w przyszłości.
>
> Oczywiście wszystko da się zrobić. Ale jak to się ma do
> przejrzystości kodu i składni samego języka?
Mówię tylko o tym, że dla uniknięcia Field'ów w interfejsie publicznym
kompilator mógłby tłumaczyć:
--------
public int Counter;
--------
każdorazowo na
--------
private int _Counter;
public int Counter
{
get { return _Counter; }
set { _Counter = value; }
}
--------
public readonly typ nazwa; byłoby tłumaczone jako właściwość z akcesorem(?)
get a pola prywatne zostałyby po staremu.
> Osobiście jestem przeciwnikiem tego co M$ zrobił ze składnią
> właściwości o różnych modyfikatorach dostępu, czyli:
>
> public int IntValue {
> get {
> // ...
> }
> protected set {
> // ... }
> }
A ja jestem za. W Soodzie bardzo chętnie bym powitał takie usprawnienie już
w .NET 1.1. Chodzi głównie o możliwość ustawienia "set" jako "internal".
Czyli biblioteka/assembly/pakiet kodu sama może zmodyfikować jakąś
właściwość a klienci mogą tylko ją czytać. Obecnie muszę robić SetXXX() do
ustawiania i int XXX { get; } do pobierania.
Jarek
Technical Details
Message-ID:
<dkaa5t$1842$1@node3.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mailReferences:
<1130508326.894711.153970@z14g2000cwz.googlegroups.com> <1eocwqzx1mywz$.dlg@piotr-wlodarek.pl> <dk4mhr$r5s$1@atlantis.news.tpi.pl> <4f5ksod9hocm.dlg@piotr-wlodarek.pl> <dk4t9e$pk5$1@inews.gazeta.pl> <crxbo9q0fdfi.dlg@piotr-wlodarek.pl> <dk5fb4$dmh$1@nemesis.news.tpi.pl> <13nmve9r1u93s$.dlg@piotr-wlodarek.pl> <dk7dd9$6rv$1@node1.news.atman.pl> <dka85j$mnh$1@nemesis.news.tpi.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mail From: "Jaroslaw Kowalski" <jaak@wyrzuc.to.jkowalski.net> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: bledy popelniane przez programistow C# Date: Wed, 2 Nov 2005 13:05:57 +0100 Organization: ATMAN Lines: 86 Message-ID: <dkaa5t$1842$1@node3.news.atman.pl> References: <1130508326.894711.153970@z14g2000cwz.googlegroups.com> <1eocwqzx1mywz$.dlg@piotr-wlodarek.pl> <dk4mhr$r5s$1@atlantis.news.tpi.pl> <4f5ksod9hocm.dlg@piotr-wlodarek.pl> <dk4t9e$pk5$1@inews.gazeta.pl> <crxbo9q0fdfi.dlg@piotr-wlodarek.pl> <dk5fb4$dmh$1@nemesis.news.tpi.pl> <13nmve9r1u93s$.dlg@piotr-wlodarek.pl> <dk7dd9$6rv$1@node1.news.atman.pl> <dka85j$mnh$1@nemesis.news.tpi.pl> NNTP-Posting-Host: saturn.atm.com.pl X-Trace: node3.news.atman.pl 1130933245 41090 217.17.34.18 (2 Nov 2005 12:07:25 GMT) X-Complaints-To: abuse@atman.pl NNTP-Posting-Date: Wed, 2 Nov 2005 12:07:25 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.3790.1830 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830 X-RFC2646: Format=Flowed; Response MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit