mikrocontroller.net

Forum: PC Hard- und Software C# Objekt einer abgeleiteten Klasse Basisklassenobjekt zuweisen


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich arbeite mich gerade in C# ein und habe da noch ein großes 
Verständnisproblem...


Soweit ist mir mit der Vererbung alles klar, nur verstehe ich folgendes 
nicht. Angenommen ich habe folgenden Code:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    public class Tier                                
    {
        public virtual void Ausgabe()                
        {
            Console.WriteLine("Ich bin Nichts...");
        }
     }
   
     public class Schlange: Tier                 
     {
         new public void Ausgabe()                 
         {
             Console.WriteLine("Ich bin eine Schlange");
         }
     }

        class Program
        {
            static void Main(string[] args)
            {
                Tier EinTier;
                Schlange EineSchlange = new Schlange ();
                
                EinTier = EineSchlange;
                EineSchlange .Ausgabe();
                
                EineSchlange .Ausgabe();
            }
       }
}

Wenn ich das mal durchgehe:

Main 1. Zeile: Ein Objekt namens EinTier wird erzeugt (ist das überhaupt 
schon ein Objekt?

Main 2. Zeile: Ein Objekt namens EineSchlange wird aus der Klasse 
Schlange erzeugt. Okay!

Main 3. Zeile: Ich weise dem erzeugten Objekt(?) EinTier der Klasse Tier 
das Objekt EineSchlange zu. Wie geht das? Wie kann ich ein "geerbtes" 
Objekt einem Basisklassenobjekt zuweisen?

Die Zeile darunter ist nicht so ganz klar, liegt aber an oberem.

Die letzte Zeile ist klar.

Ich hoffe ihr könnt mir helfen.

Autor: Chris ... (dechavue)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Es muss richtig heißen:
     public class Schlange: Tier                 
     {
         public override void Ausgabe()                 
         {
             Console.WriteLine("Ich bin eine Schlange");
         }
     }


mit new überlagerst du nur, das heist dass die Methode der Klasse 
aufgerufen wird, von deren Typ die Variable ist.

Mit override wird wirklich überschrieben und es wird die Methode des 
Objekts hinter der Variable aufgerufen.

Zu 1: Nein es wird noch kein Objekt erzeugt, du legst lediglich eine 
Variable an (welche noch den Wert null hat, also noch auf kein Objekt im 
Speicher zeigt)

Zu 2: Es wird ein Objekt vom Typ Schlange erzeugt und der Variable 
EineSchlange zugewiesen. (Objekte selbst haben keinen Namen)

Zu 3: Du weist das Objekt auf welches EineSchlange zeigt der (noch 
uninitialisierten) Variable EinTier zu. Nach diesem Schritt zeigen 
EinTier und EineSchlange auf das selbe Objekt im Speicher.

(Ich vermute in 4. oder 5. Zeile im Main sollte stehen EinTier.Ausgabe()
Dann ergibt sich folgende Ausgabe
(Mit override)
Ich bin eine Schlange
Ich bin eine Schlange

(Mit new & EinTier.Ausgabe() als 4. Zeile)
Ich bin Nichts...
Ich bin eine Schlange
)

Im Anhang noch ein Bild zur Verdeutlichung

greets

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.