Skal sige fra starten at jeg ikke har "lært" C# i skole eller noget, men gjorde det på samme måde som dig, så hvis hvis nogen fortæller dig at jeg tager fejl så skal du nok tro på dem. Jeg arbejder dog med C# ofte, så ved en smule om det ;)
I spørgsmål nummer 2:
(me as Employee).TestF(); // virker me.TestF(); // virker ikke
Når du skriver: Person me = new Employee("Bradley", "Jones", 1983);
Så er "me" af typen Person, den bruger bare Person's child constructor. Det vil sige at "me" bliver betragtet som Person og kan derfor kun bruge ting fra klasser som Person selv arver fra (går du fra det kun er klassen object - som alle klasser arver fra). Den kan derfor ikke bruge Employee's funktioner uden at du først laver typen om (Det er det du gør med (me as Employee)). En klasse kan "kun" læse op i hiakiet, ikke ned: object | --Person | --Employee
Grunden til dette: me.displayFullName(); // bruger Employees funktion, ikke base-klassens
Da du i Employee overrider den metode, så er det den overridede metode der bruges.
GetType() fortæller hvilken constructor der blev brugt til at lave objectet. (med mindre du skifter type bagefter)
"Men jeg forstår stadig ikke fordelen ved at bruge Person i spørgsmål 1.": Det kommer an på hvad der ellers er i klassen. Ud fra det du har skrevet ville jeg bruge Employee me = ... Kan faktisk ikke lige komme nogen steder hvor det kan være en fordel at bruge Person me = ... og så bruge en constructor fra en klasse der arver fra Person. Hvis det er fordi man gerne vil bruge noget fra Person og ikke Employee så kan man jo bare bruge (me as Person). Mon ikke han bare skriver det for at vise at man KAN gøre det?
Du har nok ret mht Person vs Emp. Ellers betyder det nok ikke det store. Vil du lægge svar nu, eller skal jeg vente til i morgen og se om der evt kommer flere svar?
Det bestemmer du helt selv. Jeg prøver bare at hjælpe, så godt jeg kan. Du må gerne vente og se om der er nogen der mener noget andet i morgen. Men vil gerne ha' point ellers :)
Person me = new Employee("Bradley", "Jones", 1983);
giver god mening i masser af sammenhænge.
Og grunden er sådan se spørgsmål #2 !!!!
Hvis koden nedenunder skal kunne processe alle slags Person, så kan man ved at gøre me til typen Person sikre at man ikke uden videre kan kalde metoder som er specifikke for Employee.
Ahh ja du har som altid helt ret arne_v. Hvis der er flere klasser der arver fra Person og så f.eks. vil samle en masse forskellige Person childs i f.eks. et array.
Med hensyn til: (me as Employee).TestF(); vs. ((Employee)me).TestF();
Er der så nogen forskel? Ud over du måske synes nummer 2 er lettest at skrive (Jeg synes det ikke)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.