CentrumXP.pl » Witamy
CentrumXP.pl
 
Szukaj
Subskrypcja
Powiadomienie e-mailem o nowościach na CentrumXP.pl:
E-mail: Zapisz
Czy zamierzasz pobrać Internet Explorer 9?


CentrumXP.pl » Microsoft .NET » Kurs C#, cz. II » Dodaj do ulubionych Dodaj do ulubionych   Dodaj do ulubionych Wersja do wydruku

09. Struktury

Autor: Paweł Kruczkowski    Opublikowano: 21 listopada 2006    Odsłon: 36478    »Skomentuj...
Strona:
Zobacz również:

01. Zmienne, stałe, wyrażenia i odstępy w C# 2.0

02. Usuwanie obiektów

03. Przekazywanie parametrów

04. Przeciążanie metod i konstruktorów

05. Hermetyzacja danych

06. Dziedziczenie i polimorfizm

07. Abstrakcja w C#

08. Porozmawiajmy o klasach

10. Interfejsy, część 1

11. Interfejsy, część 2

12. Słowniki w C# 2.0

13. Łańcuchy w C# 2.0

14. Wyrażenia regularne

15. Wyjątki - część I

16. Wyjątki - część II

17. Delegaty i zdarzenia

18. Operacje wejścia - wyjścia cz.1

19. Operacje wejścia - wyjścia cz. 2

20. Atrybuty i mechanizm refleksji

»Uzyskaj pomoc na forum

Aby ten błąd jak najszybciej poprawić musimy przypommieć sobie pojęcie właściwości. Jak już doskonale wiemy właściwości pozwalają nam na hermetyzację danych i deklarowanie ich jako prywatne. Ale – jak też pamiętamy – w rzeczywistości są metodami składowymi, a wywołanie metody przed inicjalizacją zmiennych składowych, których to te metody będą wykorzystywać jest procesem niedozwolonym (o czym kompilator nas czym prędzej poinformuje, co widzimy powyżej). Tak więc, aby powyższy błąd natychmiast poprawić, musimy również przypisać wszystkim zmiennym składowym danej struktury odpowiednie wartości:

public struct Zwierzeta
{
    public string zwierzak1;
    public string zwierzak2;
 
    public Zwierzeta(string zwierzak1, string zwierzak2)
    {
        this.zwierzak1 = zwierzak1;
        this.zwierzak2 = zwierzak2;
    }
 
    public string Zwierzak1
    {
        get { return zwierzak1; }
        set { zwierzak1 = value; }
    }
 
    public string Zwierzak2
    {
        get { return zwierzak2; }
        set { zwierzak2 = value; }
    }
 
    public override string ToString()
    {
        return (String.Format("{0} oraz {1}", zwierzak1, zwierzak2));
    }
}
 
public class MojeZwierzeta
{
    public void MojaMetoda(Zwierzeta z)
    {
        z.Zwierzak1 = "pies";
        z.Zwierzak2 = "gołąb";
        System.Console.WriteLine("Moje ulubione zwierzaki to: {0}.", z);
    }
}
 
class Glowna
{
    static void Main()
    {
        //definiujemy strukture bez wywolania konstruktora
        Zwierzeta z;
        //przypisanie do zmiennych odpowiednich wartosci, w naszym przypadku bedzie to pusty string
        z.zwierzak1 = "";
        z.zwierzak2 = "";
        //uzywamy wlasciwosci
        z.Zwierzak1 = "kot";
        z.Zwierzak2 = "kuna";
        System.Console.WriteLine("Nie lubię takich zwierzaków jak: {0}.", z);
        MojeZwierzeta mz = new MojeZwierzeta();
        mz.MojaMetoda(z);
        System.Console.WriteLine("Nie jest fajny: {0}.", z);
    }
 }

Teraz nasz program skompiluje się bez żadnych przeszkód i otrzymamy prawidłowe wyniki, mimo że zadeklarowaliśmy strukturę bez słowa kluczowego: new.


«Wstecz 1 2 3 4 5 Dalej» 

Aktualna ocena to: 4,29

Oceń artykuł...
Porażka Kiepski Taki Sobie Dobry Super!

Tagi:  

A teraz:    Dodaj do ulubionych Dodaj do ulubionych    Wydrukuj Wydrukuj    Wyślij link znajomemu Wyślij link znajomemu    Skomentuj Skomentuj

Komentarze do 09. Struktury

Dodaj komentarz»

ja 26 maja 2008, 14:36

tyle co umiałem to zrozumiałem - po co ta zabawa z tym ToString()

camillos 16 lipca 2008, 10:25

Ja nie wiem po co w metodzie ToString() tak dziwnie piszą: String.Format("coś tam") Po co to w ogóle jest?

KA 9 listopada 2008, 21:44

Co do kwestii merytorycznej artykułu, niestety w kodzie jest błąd, nie został on uaktualniony o ptaki. 
Co do ToString() jest to funkcja, która w klasie/strukturze Zwierzęta w sposób specjalny formatuje przekazane argumenty np. "arg1" i "arg2" będzie "arg1 oraz arg2". Metoda ToString() jest zawsze wywoływana, gdy chcemy coś wyświetlić na konosoli, dlatego nie trzeba dopisywać słowa "oraz". 

loop 18 stycznia 2010, 15:24

mogły by być nazwy właściwości parametry w konstruktorze i agrument w strukturze ponazywane w bardziej różniący się sposób poniewarz zwierzak1, zwierzak1 i Zwierzak1 troche jest uciążliwe w czytaniu i zrozumieniu co jest co, poprostu mało czytelne

janf 5 sierpnia 2011, 14:11

Cytuję> "Efekt mamy pożądany, ale dlaczego właśnie w taki sposób go otrzymaliśmy? Odpowiedź jest prosta: struktura została przekazana jako typ skalarny, dlatego też metoda MojaMetoda() operuje na kopiach a nie na oryginalnych obiektach." < Koniec cytatu. To jest BŁĘDNE WYJAŚNIENIE! MojaMetoda, zgodnie z deklaracją, pobrała lokalnie wartości elementów struktury z funkcji wywołującej, wykorzystała przy tym tę samą strukturę (identycznie ją nazywając), jako lokalny "schowek", po czym, NADZYCZAJNIEJ W ŚWIECIE N A D P I S A Ł A elementy struktury lokalnej i wyświetliła je! Pietro wyżej obiekt "z" użyty w wywołaniu MojejMetody ma swoje wartości elementów, które się nie zmieniły i one sa wyświetlane.


Dodaj swój komentarz

»Zasady udzielania komentarzy

Autor:  
Komentarz:
Dodaj komentarz
© 2012 Onex Group
Onex Group O Onex Group  |  O CentrumXP.pl  |  Kontakt  |  Reklama
Nasze serwisy: CentrumXP.plXboxSpot.pl  |  Jama Mastaha