🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #9674

Re: bledy popelniane przez programistow C#

#9674
From: j_marek
Date: Mon, 31 Oct 2005 14:36
85 lines
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-mail
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>

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