C# Objekt einer abgeleiteten Klasse Basisklassenobjekt zuweisen

Gast #1053057
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:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4

5
namespace ConsoleApplication1
6
{
7
    public class Tier                                
8
    {
9
        public virtual void Ausgabe()                
10
        {
11
            Console.WriteLine("Ich bin Nichts...");
12
        }
13
     }
14
   
15
     public class Schlange: Tier                 
16
     {
17
         new public void Ausgabe()                 
18
         {
19
             Console.WriteLine("Ich bin eine Schlange");
20
         }
21
     }
22

23
        class Program
24
        {
25
            static void Main(string[] args)
26
            {
27
                Tier EinTier;
28
                Schlange EineSchlange = new Schlange ();
29
                
30
                EinTier = EineSchlange;
31
                EineSchlange .Ausgabe();
32
                
33
                EineSchlange .Ausgabe();
34
            }
35
       }
36
}

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.
Hi,

Es muss richtig heißen:
1
     public class Schlange: Tier                 
2
     {
3
         public override void Ausgabe()                 
4
         {
5
             Console.WriteLine("Ich bin eine Schlange");
6
         }
7
     }

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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.