Article View: alt.pl.comp.lang.csharp
Article #9674Re: bledy popelniane przez programistow C#
From: j_marek
Date: Mon, 31 Oct 2005 14:36
Date: Mon, 31 Oct 2005 14:36
85 lines
3426 bytes
3426 bytes
W wiadomości: crxbo9q0fdfi.dlg@piotr-wlodarek.pl,
Piotr 'Qertoip' Włodarek <qer1@o2.pl> napisał(a):
[...]
>> Jeśli w bibliotece zmienisz pole na propercję, to bez
>> przekompilowania klient nie będzie działał z nową biblioteką. Nawet
>> jeśli nazwy będą takie same. Dostaniesz błąd typu
>> 'System.MissingFieldException'.
>
> To prawda, przekompilować trzeba. Zgadzam się, że może to być istotny
> argument.
[...]
Witam!
Czasem nawet może wymagać zmian w kodzie:
1. Pole można przekazać do metody jako argument typu ref i out, a
właściwości nie.
2. Nie można modyfikować pól struktur dostępnych przez właściwość, ale można
je modyfikować kiedy struktury dostępne są przez pola.
W tych przypadkach kompilator wyłapie takie błędy. Ale mogą być przypadki
kiedy nie wyłapie.
Weźmy ten przykład:
struct SampleStruct
{
private int test;
public int Test
{
get { return test; }
set { test = value; }
}
public void TestMe()
{
test++;
}
}
class SampleClass
{
public SampleStruct Struct1;
private SampleStruct struct2;
public SampleStruct Struct2
{
get { return struct2; }
set { struct2 = value; }
}
}
Ten kod się skompluje:
private SampleClass c = new SampleClass();
private void button1_Click(object sender, System.EventArgs e)
{
c.Struct1.TestMe();
c.Struct2.TestMe();
label1.Text = c.Struct1.Test.ToString();
label2.Text = c.Struct2.Test.ToString();
}
Użycie c.Struct1 i c.Struct2 wygląda tak samo, ale efekt daje zupełnie inny
ponieważ c.Struct2 działa na kopii struktury, a c.Struct1 na oryginale.
Dodatkowo w przykładzie widać niebezpieczne zabawy ze strukturami, więc w
tym sensie jest on trochę naciągany.
Generalnie takich podmian właściwości na pola lepiej nie stosować jeśli ktoś
nie zamierza zachować dyscypliny w kodzie. Z drugiej strony po co później
się zastanawiać jeśli po prostu można dać właściwości. Lepiej z góry
zdecydować albo na właściwości albo na pola.
--
Pozdrawiam,
Marek Janaszewski
[ j_marek(małpa)gazeta(kropka)pl ]
[ == USUN_TO. z adresu == ]
Technical Details
Message-ID:
<dk5aql$23e2$1@news2.ipartners.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.ipartners.pl!ipartners.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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.ipartners.pl!ipartners.pl!not-for-mail From: "j_marek" <j_marek@USUN_TO.gazeta.pl> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: bledy popelniane przez programistow C# Date: Mon, 31 Oct 2005 15:36:58 +0100 Organization: Internet Partners Lines: 86 Message-ID: <dk5aql$23e2$1@news2.ipartners.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> NNTP-Posting-Host: 217.153.157.130 Mime-Version: 1.0 X-Trace: news2.ipartners.pl 1130770069 69058 217.153.157.130 (31 Oct 2005 14:47:49 GMT) X-Complaints-To: abuse@ipartners.pl NNTP-Posting-Date: 31 Oct 2005 14:47:49 GMT X-Priority: 3 X-Antivirus: avast! (VPS 0543-2, 2005-10-27), Outbound message X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2670 X-Newsreader: Microsoft Outlook Express 6.00.2900.2670 X-MSMail-Priority: Normal X-Antivirus-Status: Clean Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit