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


von Martin (Gast)


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:
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.

von Chris .. (dechavue)


Angehängte Dateien:

Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.