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. I » Dodaj do ulubionych Dodaj do ulubionych   Dodaj do ulubionych Wersja do wydruku

07. Tworzenie oraz inicjalizacja obiektów

Autor: Daniel Celeda    Opublikowano: 10 stycznia 2006    Odsłon: 143545    »Skomentuj...
Strona:
Zobacz również:

01. "Programowanie" - z czym to się je?

02. Programowanie obiektowe

03. Do czego potrzebne jest nam Visual Studio 2005

04. Konfiguracja i obsługa C# 2005 Express Edition

05. Tworzenie solution i nowych projektów

06. Klasy i obiekty

08. Operatory arytmetyczne

09. Porozmawiajmy o „stringach”

10. Typy proste i referencyjne

11. Wartości logiczne

12. Inne operatory logiczne

13. Instrukcje iteracyjne (tzw. pętle) - cz. I

14. Instrukcje iteracyjne (tzw. pętle) - cz. II

15. Tablice

16. Kolekcje

17. Typy generyczne (generics)

18. Przestrzenie nazw (namespaces)

19. Modyfikatory dostępu

20. Metody statyczne oraz metody instancyjne

»Uzyskaj pomoc na forum

Inicjalizacja składowych

 Jeśli nasz klasa jest rozbudowana i ma wiele zmiennych oraz konstruktorów to może się zdarzyć, że w każdym z nich będziemy musieli przypisywać wartości zmiennym. Dużo nadmiarowej pracy – dublowanie się kodu. Możemy temu zapobiec na kilka sposobów.

Wywołanie jednego konstruktora poprzez drugi

 Aby uzyskać taki efekt musimy użyć słówka „this”.

class Echo
{
    string napis;
    string napis2;

    public Echo(string parametr)
    {
        napis = parametr;
    }

    public Echo(string parametr1, string parametr2) : this(parametr1)
    {
        napis2 = parametr2;
    }

    public void Napisz()
    {
        System.Console.WriteLine(napis);
        System.Console.WriteLine(napis2);
    }
}
class
KlasaGlowna
{
    static void Main()
    {
        Echo obiekt = new Echo("Pierwszy parametr.", "Drugi parametr.");
        obiekt.Napisz();
        System.Console.ReadLine();
    }
}

W tym przykładzie mamy dwa konstruktory, z jednym oraz z dwoma parametrami. W definicji drugiego wywołujemy pierwszy poprzez słówko „this” oraz przekazujemy do pierwszego pierwszy parametr. W linijce:

Echo obiekt = new Echo("Pierwszy parametr.", "Drugi parametr.");

wywołujemy drugi konstruktor (dwa parametry), ten natomiast wywołuje pierwszy przekazując mu wartość „Pierwszy parametr.". Tak więc wartość zmiennej „napis” jest ustalana w pierwszym konstruktorze, który został wywołany przez drugi, natomiast wartość zmiennej „napis2” jest przypisywana w drugim konstruktorze.


«Wstecz 1 2 3 4 Dalej» 

Aktualna ocena to: 4,34

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 07. Tworzenie oraz inicjalizacja obiektów

Dodaj komentarz»

Kastor25 22 czerwca 2006, 13:18

Napisałeś: Napis podany w konstruktorze Takie jest rozwiazanie ale dlaczego tak to dziala to nie mam pojecia. Jak dotad wszystko bylo dla mnie bardzo jasne i klarowne ale pojecie konstruktora troche mnie przygniotlo, bo nie widze zadnego sensu w tej konstrukcji. Zwlaszcza tekstu w metodzie main (Napis podany w konstruktorze)obok stworzonego obiektu Echo-jak to sie ma do konstruktora?

Kastor25 22 czerwca 2006, 13:47

OK juz mam:) Echo obiektEcho = new Echo("Napis podany w konstruktorze "); Ta linia odnosi sie bezposrednio do: public Echo(string nowyNapis) Poniewaz string jest parametrem tekstowym automatycznie nowyNapis=Napis; podany w konstruktorze. wtedy napis = nowyNapis; a co za tym idzie tekst wskakuje do pamieci pod nazwa konstruktora string napis; Cala operacja sprowadza sie do przyporzadkowania tekstu do slowa napis ktore jest wykorzystane w dalszej czesci kodu. Troche to zawiklane ale jesli sie myle to prosze o sprostowanie;)

Kastor25 22 czerwca 2006, 13:51

KOREKTA: Trzecia linia --automatycznie nowyNapis="Napis podany w konstruktorze"

Arcdoes 11 lipca 2006, 14:58

Poradnik jest spoksik, przydaje się:) chociaz mozna sie zamotac

bartek 21 sierpnia 2006, 16:16

cytat: Definicję konstruktora powinno poprzedzać słówko „public”, ponieważ konstruktor będzie używany wewnątrz innych klas, które będą chciały powoływać do życia obiekty klasy „Echo”. Istnieją sytuacje, w których należy zdefiniować prywatny konstruktor, jednak nas one na razie nie dotyczą koniec cytatu. A kiedy będą nas dotyczyć? Może warto by o tym wspomnieć. Poza tym określenie "Dzięki konstruktorowi, możemy podczas jego użycia od razu przypisać wartości zmiennym." nie jest najszczęśliwszym określeniem konstruktora.

Dominik 23 lipca 2007, 12:22

bartek jak się nie podoba to sam napisz lepszy kurs. Ten jest dla początkujących i takie określenie na razie wystarcza, później odkryją inne zastosowania konstruktora. A jak chcesz mieć wszystko dokladnie to proszę bardzo: http://www.microsoft.com/poland/developer/press/visual_csharp.mspx. Ale to kosztuje, a za darmo nic lepszego od tego kursu nie znajdziesz, a jeszcze narzekasz, że ktoś poświęca swój czas (=pieniądze) żeby Cię czegoś nauczyć...

ketchOOp 8 sierpnia 2007, 10:12

Nie ma co narzekać trzeba grzecznie podziekować za kurs bo jest za co !!!

OwcA 3 września 2007, 23:57

Warto by wspomnieć że w części na temat "Inicjalizacja w dodatkowej metodzie", zmienne parametr1 i parametr2 w konstruktorze: public Echo(string parametr1, string parametr2) i w zwykłej metodzie: public void PrzypiszWartosci(string parametr1, string parametr2) są faktycznie widziane przez program jako zupełnie różne zmienne, parametry które należą do danej metody. Czyli jeśli deklaracja metody pomocniczej wyglądałaby: public void PrzypiszWartosci(string parametr3, string parametr4) to też powinno działać, bo to są lokalne zmienne, przynależne do metody. przynajmniej tak było w C++ :/. To żeby ludzie nie mysleli że w takich przypadkach trzeba te zmienne nazywać tak samo jak w koństruktorze ;P

j 8 października 2007, 13:20

poprostu- od paru przykladów autor stara sie wyjasnić że można w różnych momentach i na różne sposoby przypisać wartość zmiennymi tyle

Quavitor 14 kwietnia 2008, 19:46

Kurs spoko tylko nie chce mi się pokazać rozwiązanie

Tomek 19 maja 2008, 20:24

Rozwiązanie pokaże się jak skorzystasz z Internet Explorera.

ja 17 sierpnia 2008, 16:36

ale co to w ogole jest ten konstruktor? bo czytam i cos nie moge zalapac

EnD-RiU 7 października 2008, 13:51

Do konstruktora przypisujesz jakieś wartości żeby przy użyciu okiektu nie pojawiły się dziwne rzeczy "śmieci " . Chodzi o to że jeśli masz klasę która przykładowo dodaje ułamki, to chciałbyś najpierw wczytać wartośc dla tych ułamków z klawiatury a pózniej dodać. Konstruktor jest Ci potrzebny po to aby na wszelki wypadek na początu przy użyciu nie dostały się tam przypadkowe wartości, np. 1/0 czy 2/0 dzielenie przez zero. Wtedy możesz użyć konstruktora aby zawsze przy wywołaniu w mianowniku było 1. Wtedy jesteś na 100% pewny(a), że nic złego się nie stanie i program będzie działał dobrze.

PD 13 października 2008, 16:38

Mam tylko mały problem bo w nie chce mi się wyświetlić rozwiązanie na stronie. To wina strony czy może ustawień przeglądarki?

ren 21 października 2008, 17:28

w jaki sposób drugi konstruktor odnosi się do pierwszego skoro w drugim jest napisane - [color=blue">this[/color">(parametr1).

 
nie powinno być - [color=blue">this[/color">(parametr)?

 

duch 16 listopada 2008, 21:54

super prosto przejrzyście

ziomek 8 grudnia 2008, 21:16

Powinnienes zaznaczyc, ze ten przyklad jest przytoczony tylko po to aby poznac rozne sposoby przypisywania i ewentualnie mozliwosc wywolania jednego konstruktora w drugim. Wiadomo, ze aby wyswietlic dwa proste napisy nikt nie bedzie tworzyl dwoch konstruktorow z ktorych kazdy bedzie przypisywal inny string innej zmiennej. Warto zawsze dodac jak zrobic dana czynnosc najlatwiej, mimo, ze nie samo wyswietlenie napisow jest w tym przykladzie istotne. Takie przyklady wprowadzaja zamet u poczatkujacych programistow. Mysla.... "Nie da sie osiagnac tego samego efektu w latwiejszy sposob? "

Zhipes 13 grudnia 2008, 12:46

bardzo fajny i przydatny kurs :) z początku wydawał mi się on trochę dziwny, gdyż przykłady były zapisane w postaci poleceń po polsku (jestem przyzwyczajony do normalnego kodu), aczkolwiek później było już znacznie lepiej, bo były zapisane już właściwe kody ;">
na prawdę można się z tego wiele nauczyć
i do praktykujących:
nie wiem czy ktoś dał link do Visual C# Express 2008 bo nie sposób przeczytać wszystkich komentarzy, ale
http://www.microsoft.com/express/download/

Aldczak89 13 stycznia 2009, 21:21

witam wszystkich.
na początku wielkie dzięki za napisanie tutoriala, gdyby nie on, to pewnie rzuciłbym studia uznając pozyskanie umiejętności z programowania za mission imposible. a teraz przejdę do rzeczy:
 
nie wiem czy dobrze rozumiem jeszcze pojęcia klas i obiektów. Jesteśmy w stanie, napisać program przedstawiony w tym rozdziale w jednej klasie, prawda? ale dla potrzeb tutoriala, stworzone zostało rozbicie na dwie osobne klasy, dobrze rozumiem?
 
Dziękuję za pomoc i proszę o wyrozumiałość, mam masę pytań ciągle, spróbuje je dopiero zadać po głębokiej analizie tutoriala, żeby nie zanieczyszczać przejrzystości komentarzy. Niestety nie ma mi kto pomóc w tej dziedzinie, że tak się wyrażę "stacjonarnie".
 
pozdrawiam
adrian

Marek 26 marca 2009, 10:50

Świetny kurs dzięki wielkie autorowi, do tej pory do ręki brałem 600-800stronowe książki do nauki programowania, gdzie odechciewało mi się w to bawić po przeczytaniu 80-100 stronowego wstępu, bo tak zazwyczaj mają te ksiązki. A taki wstęp paraktycznie nic nie wnosił bo się po tylu stronach dochodzi do Hell World dopiero :) a tu jest wszystko fajnie wytłumaczone na przykładach i nie musze sie przebijać przez dziesiątki stron żeby dojść do tego co mnie interesuje. Pozdrawiam

carck3r 27 marca 2009, 18:38

Gładko wchodzi. Przydała się nauka c++.
BTW: Na początek polecam C++.

sebeQ 9 listopada 2009, 19:45

Prosto, przejżyście, super !!!

marek 15 maja 2010, 15:25

nic nie dzeje sie

dmxn 24 listopada 2010, 15:52

Fajny tutek. Dość przejrzysty język. Super 

Kamila 22 stycznia 2011, 19:43

Kurs jest po prostu super!! Chodź miałam problemy z niektórymi rzeczami. Potem dopiero sama zaczynałam powoli wpadać co jest nie tak :) najbardziej mi coś nie chciało pójśćz tym static void Main() bo mi pokazywał tj. błąd, ale potem sobie przypomniałam, że Main a main to co innego bo wielkość liter ma znaczenie ;P i potem już mi gładko szło wszystko. Pozdrawiam

M@sterUkacz 16 lutego 2011, 15:44

Bardzo fajny kurs :D Szczególnie jeśli zna się już jakiś inny język, najlepiej obiektowy

bri 23 marca 2011, 11:33

Odcinek z tymi konstruktormi to jakiś belkot... nie da sie nic skumać.

kris 12 września 2011, 5:12

rozwiązania ćwiczeń nie działają ;/

Dawid 30 września 2011, 0:59

Kurs zrozumieją tylko ci, którzy umieją myśleć. Jeżeli uważasz bri że ten kurs to jest bełkot, to według mnie powinieneś się zastanowić o czym ten kurs bełkocze. Bo czytać "szybko" to ja też potrafię.

raf 23 grudnia 2011, 16:43

Chyba mi wyszło :) Tylko wartość wiek np.33 trzeba wpisać bez cudzysłowów bo to idzie do int a nie do string. :)


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