06. august 2010 - 12:47Der er
5 kommentarer og 1 løsning
Inheritance instancering.
Hej Folkens.
Jeg sidder og er igang med at prøve at få en forståelse for inheritance, jeg vil mene jeg har fået en okay forståelse C#.
Men i et kode eksemple møder jeg den her.
GenericCustomer arabel = new Nevermore60Customer("Arabel Jones"); (Hele kode eksemplet er nedenfor.
Altså jeg ved godt man opretter et object altså. Altid kun brugt denne måde at oprette objecter. TestRef ObjTestRef = new TestRef();
Men kan ikke se mig ud af den anden der, hvad der sker og hvordan. Søgt på google og den bog jeg læser forklarer udemidbart ikke hvad der sker. Selv gået helt tilbage i starten for at se om der skulle være nået.
namespace Wrox.ProCSharp.OOProg { using System;
public abstract class GenericCustomer { private string name;
public GenericCustomer() { name = "<no name>"; }
public GenericCustomer(string name) { this.name = name; }
public string Name { get { return name; } set { name = value; } }
}
public class Nevermore60Customer : GenericCustomer { private string referrerName; private uint highCostMinutesUsed;
public Nevermore60Customer(string name) : this(name, "<None>") { }
Det smarte ved arv er er jo netop polymorfi. At et objekt kan være flere forskellige ting.
Altså din Nevermore60Customer er af typen Nevermore60Customer - men efter som han også er en GenericCustomer (som han jo arver fra), så kan han også antage den form. Han er altså begge dele.
Når de så laver denne: GenericCustomer arabel = new Nevermore60Customer("Arabel Jones")
Så fortæller de kompileren at de vil arbejde med et objekt af typen GenericCustomer (og altså kun tilgå GenericCustomer's members). Og de instancierer et objekt af typen Nevermore60Customer, da han OGSÅ er en GenericCustomer.
Ja, og hvis GenericCustomer har nogen properties/methods som er "overriden" i Nevermore60Customer ... er det dem som bliver kaldt i stedet for de oprindelige, det er her noget af det rigtig smarte kommer ind ved inheritance.
Aha. Kan se hvis jeg så skrive Nevermore60Customerarabel = new Nevermore60Customer("Arabel Jones"). Kan jeg tilgå alle medlemmer og ikke kun dem i GenericCustomer. Jeps havde fået styr på det med Virtual og override.
Der helt klart lidt øvelse før den sidder helt haft på rygraden. Men jeres svar var helt klart en god hjælp.
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.