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

07. Abstrakcja w C#

Autor: Paweł Kruczkowski    Opublikowano: 7 listopada 2006    Odsłon: 47162    »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

08. Porozmawiajmy o klasach

09. Struktury

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

W poprzednim tygodniu opowiedzieliśmy sobie o dwóch bardzo ważnych pojęciach jakimi niewątpliwie są: dziedziczenie oraz polimorfizm. Wprowadziliśmy sobie również definicje metod wirtualnych i przesłaniających, a także poznaliśmy nowe, ważne słówko kluczowe: base.

Dzisiaj na pewno każdy z nas potrafiłby wykorzystać swoją wiedzę na powyższe tematy, dlatego też czym prędzej przejdźmy do przykładu:

public class Figura
{
    protected double a;
    protected double b;
 
    public Figura(double a, double b)
    {
        this.a = a;
        this.b = b;
    }
 
    public virtual double PoleFigury()
    {
        System.Console.WriteLine("Niezdefiniowana figura!");
        return 0;
    }
}
 
public class Prostokat : Figura
{
    public Prostokat(double a, double b) : base(a, b)
    {  }
    public override double PoleFigury()
    {
        double pole = a * b;
        System.Console.WriteLine("Obliczamy pole prostokąta.");
        return pole;
    }
}
 
public class Trojkat : Figura
{
    public Trojkat(double a, double b) : base(a, b)
    { }
    public override double PoleFigury()
    {
        double pole = (a * b) / 2;
        System.Console.WriteLine("Obliczamy pole trójkąta.");
        return pole;
    }
}
 
class Glowna
{
    static void Main(string[] args)
    {
        //deklarujemy odpowiednie obiekty wraz z wartosciami ich zmiennych
        Figura f = new Figura(5, 6);
        Prostokat p = new Prostokat(7, 8);
        Trojkat t = new Trojkat(9, 10);
        //wywolujemy metode obliczajaca pole odpowiedniej figury
        System.Console.WriteLine("Pole wynosi więc: {0}", f.PoleFigury());
        System.Console.WriteLine("Pole wynosi: {0}", p.PoleFigury());
        System.Console.WriteLine("Pole wynosi: {0}", t.PoleFigury());
         
    }
}

Powyższy przykład jest dla nas przypomnieniem podstawowej wiedzy na temat dziedziczenia oraz polimorfizmu. Po skompilowaniu otrzymamy następujące wyniki:


1 2 3 4 Dalej» 

Aktualna ocena to: 3,52

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. Abstrakcja w C#

Dodaj komentarz»

jbk 6 listopada 2007, 17:32

Brawo, ciekawie i bardzo przystepnie opisane.

Tyson 7 stycznia 2008, 15:12

Wreszcie zrozumialem to cholerstwo :) Pozdrawiam.

Jurek Ogórek 8 stycznia 2008, 9:18

Brakuje trochę opisu polimorfizmu, czyli odwoływania się do każdej z figur z ostatniego przykładu przez referencję do CFigura zamiast CKwadrat, CProstokat itd.

hy 11 czerwca 2009, 20:03

 nic nie czaje

hyhy 11 czerwca 2009, 20:05

nie placz Skarbie zdazysz sie jeszcze nauczyc

janf 2 sierpnia 2011, 15:26

Hmm ... mam mieszane uczucia, zawsze programiści robili różne dziwne konstrukcje, zeby osiagnąc zamierzony efekt, które minimalizowały wkład pracy nad kodem programu. Tu mamy pierwszorzędny tego przykład! Przecież można to zrobic NORMALNIE, bez udziwnień w semantyce i składni :-) i żadne pieprzone "abstrakcje" nie są do tego potrzebne.

programista 9 sierpnia 2011, 5:52

#janf Po przeczytaniu tego artykułu, gdybym nie znał wcześniej C++, pomyślałbym tak samo. A to dlatego że autor artykułu nie wspomniał o NAJWAŻNIEJSZEJ funkcji polimorfizmu, czyli tworzenia obiektów klas dziedziczących ze wskaźnika (w c++; w c# to jakoś inaczej się nazywa) na klasę bazową. I dopiero wtedy ten cały system abstrakcji i metod wirtualnych nabiera sensu. W tym kodzie można by usunąć wszystkie słowa "abstract", "virtual" i "override", a program działałby nadal tak samo. Polecam na własną rękę poczytać w googlach o polimorfiźmie w C#, bo w tym artykule brakuje podstawowej informacji - jak można to wykorzystać.


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