Forums Neueste Beiträge
 

Reference gegen Object types?

08/09/2009 - 12:58 von Milan | Report spam
Hallo zusammen,

warum im folgendes Code "test_ab" Type zeigt daß "aa_bb" ist von BB type
aber bittet nicht BB - > blach eingeschalt ?
Mann würde erwarten wenn "aa_bb" ist BB type daß es bittet auch alle
Methode/eingeschaften die BB type beinhaltet, richtig ?

Grüß,
Milan.

class AA
{
public void Foo() { Console.WriteLine("A::Foo()"); }
}

class BB : AA
{
public int blach = 0;
public void Foo() { Console.WriteLine("B::Foo()"); }
}


AA aa;
AA aa_bb;
BB bb;

aa = new AA();
aa.Foo(); // output --> "A::Foo()"
Type test_aa = aa.GetType();//test_aa = {Name = "AA" FullName =
"Reflection.AA"}

bb = new BB();
bb.Foo(); // output --> "B::Foo()"
Type test_bb = bb.GetType();//test_bb = {Name = "BB" FullName =
"Reflection.BB"}

aa_bb = new BB();
Type test_ab = aa_bb.GetType();//test_ab = {Name = "BB" FullName
= "Reflection.BB"}
//aa_bb.blach = 0; blach property gibts nicht obwohl aa ist von
type BB!
aa_bb.Foo(); // output --> "A::Foo()"
 

Lesen sie die antworten

#1 Marvin Massih
08/09/2009 - 14:54 | Warnen spam
Hallo Milan,

Milan schrieb:
warum im folgendes Code "test_ab" Type zeigt daß "aa_bb" ist von BB type
aber bittet nicht BB - > blach eingeschalt ?
Mann würde erwarten wenn "aa_bb" ist BB type daß es bittet auch alle
Methode/eingeschaften die BB type beinhaltet, richtig ?



Das ist EXAKT die Fragestellung, die ich Dir hier schon beantwortet hatte:



Die Problematik gilt für Klassen ganz genauso wie für Schnittstellen -
wenn Du eine Variable vom Typ der Superklasse hast, dann gilt auch nur
diese "Sicht" auf das Objekt. Für alles andere müsstest Du ggf. casten.

Für Deine Methoden suchst Du vermutlich nach der Doku der
Schlüsselwörter "virtual" und "override".

Bitte stelle konkrete Rückfragen, wenn Du etwas nicht verstehst,
und/oder lies entsprechende Einstiegsliteratur.

Gruß
Marvin

Ähnliche fragen