<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=48&amp;t=10060&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-06T14:38:51+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=48&amp;t=10060&amp;mode</id>
<entry>
<author><name><![CDATA[developer85]]></name></author>
<updated>2015-01-06T14:38:51+01:00</updated>
<published>2015-01-06T14:38:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112717#p112717</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112717#p112717"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112717#p112717"><![CDATA[
Witam!<br />O ile dobrze cię zrozumiałem to chcesz mieć wpływ na pola prywatne w jednej klasie z klasy drugiej. <br />Po pierwsze w gwoli wyjaśnienia. Pole to a właściwość to dwie różne zmienne. Chociaż można stosować zamiennie, ale należy się <br />trzymać konwencji jaka istnieje. Pola są zwykle prywatne, a właściwości publiczne i posiadają akcesory get i set.<br /><br />pole<br />[syntax=csharp]private string imie;  //i zwykle pisze sie z małej litery[/syntax]<br /><br />właściwość<br />[syntax=csharp]public string Imie {get;set;} //i pisze się z wielkiej litery[/syntax]<br /><br />Powoli przejdźmy do meritum sprawy. Aby mieć dostęp do pól z jednej klasy w drugiej przy zachowaniu hermetyzacji<br />należy skorzystać z interfejsu. Co to takiego? generalnie jest to kontrakt, a klasa która impelmentuje interfejs musi go wypełnić<br />czyli jeśli posiadamy w interfejsie jakieś pola, właściwości, metody to należy je zaimplementować. Takie są warunki kontraktu.<br /><br />A teraz bez tego miszmaszu. Stworzyłem dwie klasy i interfejs - KlasaPierwsza, KlasaDruga, i interfejs IPrzekazywanie<br /><br /><br />KlasaPierwsza<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br /><br />namespace testKlasyiIinterfejsu<br />{<br />    class KlasaPierwsza<br />    {<br />        //pola - zwykle sa prywatne<br />        private string imie;<br />        private string nazwisko;<br />        private int wiek;<br /><br />        public KlasaPierwsza(IPrzekazywanie dane)<br />        {<br />            this.imie = dane.Imie;<br />            this.nazwisko = dane.Nazwisko;<br />            this.wiek = dane.Wiek;<br />        }<br />    }<br />}[/syntax]<br /><br />jak widać nie ma tutaj nic do umówienia. Konstruktor klasy przyjmuje parametr typu I przekazywanie w głównym programie będzie widać o co chodzi<br /><br /><br />Interfejs<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br /><br />namespace testKlasyiIinterfejsu<br />{<br />    interface IPrzekazywanie<br />    {<br />        string Imie { get; set; }<br />        string Nazwisko { get; set; }<br />        int Wiek { get; set; }<br />    }<br />}[/syntax]<br /><br />widzimy, że posiada 3 pola które nie posiadają modyfikatorów dostępu, a dlaczego tak jest to sobie doczytaj.<br /><br />KlasaDruga<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br /><br />namespace testKlasyiIinterfejsu<br />{<br />    class KlasaDruga : IPrzekazywanie<br />    {<br />        //pola klasy drugiej<br />        private string imieWKlasieDrugiej;<br />        private string nazwiskoWKlasieDrugiej;<br />        private int wiekWKlasieDrugiej;<br />        private int myVar;<br /><br />        #region interfejs IPrzekazywanie<br />        public string Imie<br />        {<br />            get<br />            {<br />                return imieWKlasieDrugiej;<br />            }<br />            set<br />            {<br />                imieWKlasieDrugiej = value;<br />            }<br />        }<br /><br />        public string Nazwisko<br />        {<br />            get<br />            {<br />                return nazwiskoWKlasieDrugiej;<br />            }<br />            set<br />            {<br />                nazwiskoWKlasieDrugiej = value;<br />            }<br />        }<br /><br />        public int Wiek<br />        {<br />            get<br />            {<br />                return wiekWKlasieDrugiej;<br />            }<br />            set<br />            {<br />                wiekWKlasieDrugiej = value;<br />            }<br />        }<br />        #endregion<br />    }<br />}[/syntax]<br /><br />W KlasieDrugiej mamy pola prywatne do których nie mamy dostępu nigdzie indzie - private<br />Zaimplementowaliśmy interfejs IPrzekazywanie. Widać to po dwukropku po nazwie klasy.<br /><br />Gółówny program<br /><br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br /><br />namespace testKlasyiIinterfejsu<br />{<br />    class Program<br />    {<br />        static void Main(string&#91;&#93; args)<br />        {<br />            KlasaDruga k2 = new KlasaDruga();<br />            k2.Imie = &quot;Jasio&quot;;<br />            k2.Nazwisko = &quot;Kowalski&quot;;<br />            k2.Wiek = 6;<br /><br /><br />            KlasaPierwsza k1 = new KlasaPierwsza(k2);<br />            k1.ToString(); <br /><br />        }<br />    }<br />}[/syntax]<br /><br />Tworzymy obiekt k2 klasy drugiej i do jej właściwości przypisujemy dane. Co automatycznie wypełnia nam pola prywatne w tej klasie (są one tutaj w sumie zbędne ale ich tez będzie można zmienić jeśli inna klasa będzie implementowała interfejs IPrzekazywanie).<br />Następnie tworzony jest obiekt klasy pierwszej i tam jak wstawimy breakpointa zobaczymy ze mamy dane które ustawiliśmy dla właściwości w obiekcie drugim.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/390/0f392d1713ae0c772e3a8974215d5b4e.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/390/0f392d1713ae0c772e3a8974215d5b4e.jpg" alt="Obrazek" /></a><br /><br />I to wszystko.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=390">developer85</a> — 6 sty 2015, o 14:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2015-01-06T10:10:22+01:00</updated>
<published>2015-01-06T10:10:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112663#p112663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112663#p112663"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112663#p112663"><![CDATA[
C# za bardzo nie znam, ale jest bardzo zbliżony do C++ więc powinno się dać zrobić to samo.<br />Jeśli masz bardzo dużo zmiennych w klasie to lepiej jest utworzyć wewnętrzną strukturę (struct) i w niej przechowywać dane.<br />Jeśli chcesz kopiować dane pomiędzy obiektami utwórz konstruktor kopiujący i wtedy w momencie tworzenia obiektu możesz kopiować do niego dane z innego obiektu. <br />Albo możesz przeciążyć operator (Operator Overloading) &quot;=&quot; i wtedy kopiujesz dane pomiędzy obiektami przy użyciu przypisania &quot;=&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 6 sty 2015, o 10:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2015-01-06T09:27:55+01:00</updated>
<published>2015-01-06T09:27:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112660#p112660</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112660#p112660"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112660#p112660"><![CDATA[
Jezeli przekazujesz taka ilość danych,to może należało by zmienić typ danych. Wykorzystać kolekcję/bazę danych /specjalnie stworzona klasę /wczytywać z pliku<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 6 sty 2015, o 09:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moriss]]></name></author>
<updated>2015-01-06T00:45:28+01:00</updated>
<published>2015-01-06T00:45:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112644#p112644</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112644#p112644"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112644#p112644"><![CDATA[
Dziękuję kolego za wyczerpującą odpowiedź.<br />Sposób z ustawieniem pola jako publiczne znam. Umiem też przekazać zmienne wykorzystując metody. I o to właśnie chciałbym zapytać kolegę. Co jeśli tych zmiennych mam sporą liczbę? np dwucyfrową? jak wtedy radzić sobie z problemem?<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7662">moriss</a> — 6 sty 2015, o 00:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndrzejG]]></name></author>
<updated>2015-01-06T00:30:47+01:00</updated>
<published>2015-01-06T00:30:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112642#p112642</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112642#p112642"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112642#p112642"><![CDATA[
Kolego moriss, postawiłeś bardzo ważne pytanie. <br /><br />Na początku musisz znać różnicę pomiędzy klasą a obiektem. Upraszczając <strong>klasa jest to wzorzec (model)</strong>, który jest wykorzystywany przy tworzeniu <strong>obiektu</strong>. Zgodnie z jednym z paradygmatów programowania obiektowego, powinno stosować się hermetyzację między obiektami, czyli &quot;po chłopsku mówiąc&quot; nie dopuszczać, by obiekt A zmieniał bezpośrednio wartości zmiennych obiektu B ( powinno się to robić z wykorzystaniem metod ). To w jaki sposób mogą być zmieniane wartości w poszczególnych obiektach definiują <strong>Modyfikatory dostępu</strong>. Określają one zakres widoczności dla zmiennych, metod, klas i są bezpośrednio związane z przestrzenią nazw. W C# przestrzeń nazw definiowana jest poprzez słowo kluczowe &quot;namespace&quot;. Informację o modyfikatorach dostępu w C# znajdziesz w sieci bardzo łatwo, np. <a href="http://4programmers.net/C_sharp/Modyfikatory_dost%C4%99pu"  class="postlink">tutaj</a>. Wiedzę o modyfikatorach dostępu powinieneś przyswoić sobie bardzo dobrze.<br /><br />Jakie modyfikatory powinny być użyte, to w dużym stopniu zależy czemu to ma służyć - są to tzw. założenia projektowe. Na tym etapie Ty jako projektant sobie to zakładasz. Wiesz najlepiej co chcesz osiągnąć <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Uczułam nad zbyt nadmiernym stosowaniem modyfikatora &quot;public&quot;. Należy ograniczyć go do minimum. Przez wielu początkujących jest on nadużywany z uwagi na pozornie łatwy dostęp do pól, natomiast niesie ze sobą wiele niebezpieczeństw i błędów, które jest później ciężko wykryć.<br /><br />&quot;Ale nie taki diabeł straszny, jak go malują ... &quot;<br /><br />Co do pytania:<br /><div class="quotetitle">moriss napisał(a):</div><div class="quotecontent"><br />chciałbym aby inne klasy widziały pola z klasy pierwszej a dodatkowo mogły je edytować.<br /></div><br />to jest trochę za mało precyzyjne. Musiałbyś napisać co tą są za klasy i co obiekty utworzone na podstawie tych klas miałyby robić. Będzie wtedy można łatwiej Ci doradzić jakich mechanizmów powinieneś użyć. Samą inicjalizację jednego obiektu z wykorzystaniem innego możesz wykonać w konstruktorze. Dodatkowo tak jak wspominał kolega savian86 możliwe, że będzie potrzeba wiedza w zakresie dziedziczenia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6885">AndrzejG</a> — 6 sty 2015, o 00:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2015-01-05T22:35:04+01:00</updated>
<published>2015-01-05T22:35:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112615#p112615</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112615#p112615"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112615#p112615"><![CDATA[
Żeby pola były widoczne na zewnątrz klasy muszą istnieć akcesory get,set (właściwości) albo pola muszą być public. Innej opcji chyba nie ma. Też dopiero macam się z C# więc &quot;chyba&quot;. Na tym polega hermetyzacja lub jej brak. Static na polu zdaje się oznacza, że różne instatncje klasy posiadają jedną wspólną wartość pola typu static i chyba niekoniecznie musi to być pole public czyli widoczne na zewnątrz klasy. W takim przypadku instancje klasy potomnej widzą to samo co instancja klasy rodzica.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 5 sty 2015, o 22:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moriss]]></name></author>
<updated>2015-01-05T22:31:43+01:00</updated>
<published>2015-01-05T22:31:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112612#p112612</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112612#p112612"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112612#p112612"><![CDATA[
tak, ale przy dziedziczeniu w mojej klasie &quot;pochodnej&quot; dostane takie same pola, ale fizycznie będą to inne elementy. Ja natomiast chciałbym aby obydwie klasy operowały na tym samym<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7662">moriss</a> — 5 sty 2015, o 22:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2015-01-05T22:01:54+01:00</updated>
<published>2015-01-05T22:01:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112598#p112598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112598#p112598"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112598#p112598"><![CDATA[
Poczytaj o dziedziczeniu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 5 sty 2015, o 22:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moriss]]></name></author>
<updated>2015-01-05T21:57:03+01:00</updated>
<published>2015-01-05T21:57:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112595#p112595</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112595#p112595"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112595#p112595"><![CDATA[
Ja tez dopiero raczkuje i wymyśliłem sobie, że chce się tego nauczyć. Wszędzie w internecie jest napisane jak przekazywać parametry metody (przez wartość lub referencję) ale wydaje mi się to problemowe gdy tych parametrów jest dużo lub gdy w jakieś klasie jest kilka/kilkanaście metod to nie ma sensu każdej przekazywać parametrów tylko przekazać parametry całej klasie. Tak mi się wydaje. Ale nie wiem jak to zrobić  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7662">moriss</a> — 5 sty 2015, o 21:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2015-01-05T21:09:40+01:00</updated>
<published>2015-01-05T21:09:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112569#p112569</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112569#p112569"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112569#p112569"><![CDATA[
Możesz dodać do klasy metody publiczne które zwrócą/zmodyfikują<br />niepubliczne składowe klasy.<br />Tylko ja dopiero raczkuje w C++ i nie wiem czy to jest dobry pomysł <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 5 sty 2015, o 21:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2015-01-05T20:50:44+01:00</updated>
<published>2015-01-05T20:50:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112559#p112559</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112559#p112559"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112559#p112559"><![CDATA[
Dodatkowo jeśli chcesz aby różne klasy pracowały na tej samej instancji to musi być static<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 5 sty 2015, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moriss]]></name></author>
<updated>2015-01-05T20:49:28+01:00</updated>
<published>2015-01-05T20:49:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112558#p112558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112558#p112558"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112558#p112558"><![CDATA[
chciałbym uniknąć upubliczniania zmiennych, jest jakiś inny sposób?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7662">moriss</a> — 5 sty 2015, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[IUVOit]]></name></author>
<updated>2015-01-05T20:41:10+01:00</updated>
<published>2015-01-05T20:41:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112554#p112554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112554#p112554"/>
<title type="html"><![CDATA[Re: Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112554#p112554"><![CDATA[
Tak ogólnie odpowiadając to pole musi być typu &quot;public&quot;<br /><br />Np:<br />public string OpisModulu {get;set;}<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=94">IUVOit</a> — 5 sty 2015, o 20:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moriss]]></name></author>
<updated>2015-01-05T20:09:14+01:00</updated>
<published>2015-01-05T20:09:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112547#p112547</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112547#p112547"/>
<title type="html"><![CDATA[Przekazywanie zmiennych C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10060&amp;p=112547#p112547"><![CDATA[
Witajcie, postanowiłem poduczyć się programować w C#. <br />Mam pewną klasę, w niej pola. W kodzie mam również inne klasy które chciałyby korzystać z tych pól. <br />Jak je przekazać? chciałbym aby inne klasy widziały pola z klasy pierwszej a dodatkowo mogły je edytować.<br /><br />Pozdrawiam:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7662">moriss</a> — 5 sty 2015, o 20:09</p><hr />
]]></content>
</entry>
</feed>