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: 36475    »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

>Tym razem program traktuje obiekt „z” jako typ referencyjny. Dlatego też metoda MojaMetoda() operuje teraz na oryginalnych wartościach a nie na kopiach obiektów (zmiany jakie nastąpią dzięki metodzie MojaMetoda() będą również dotyczyć oryginalnego obiektu w metodzie Main()).

Podsumowując, struktura to alternatywa dla klasy, której niestety nie możemy dziedziczyć. Innymi słowy, struktura jest zamknięta dla innych struktur oraz dla wszystkich innych klas. Struktury niejawnie dziedziczą po klasie Object, którą doskonale już znamy.

Ważną różnicą jest również to, że w strukturze nie można bezpośrednio inicjalizować pól np.:

private string zwierzak1 = "pies";
private string zwierzak2 = "kot";

jest dozwolone w klasie, a w strukturze jest już kodem niepoprawnym. Ostatnią różnicą, o której warto wspomnieć jest to, że struktury nie mogą zawierać domyślnego konstruktora bez parametrów, a także destruktora. Gdybyśmy w powyższym programie nie zainicjalizowali publicznego konstruktora Zwierzeta (przyjmąjącego 2 parametry typu string) to kompilator zainicjalizowałby tę strukturę poprzez przypisanie domyślnych wartości wszystkim jej składowym (zwierzak1 oraz zwierzak2).

Na koniec chciałbym napisać parę słów na temat tworzenia struktur bez słowa kluczowego new. Oczywiście jest to dozwolone i tak stworzona struktura jest jak najbardziej prawidłowa, ponieważ jest to zgodne z definicją typów wbudowanych. Spróbujmy więc dobrze już nam znany przykład napisać tak, aby struktura w nim nie była stworzona za pomocą słowa kluczowego new. W tym celu w metodzie Main() zdefiniujmy strukturę „z” bez słowa kluczowego new w następujący sposób:

public struct Zwierzeta
    {
        private string zwierzak1;
        private 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;
            //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);
        }
    }

Tak napisany przez nas program wyświetli prawidłowe wyniki. Niemniej jednak kompilator w czasie kompilacji zgłosi mniej więcej nastepujący błąd:


«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