Arv Murach s: kap 14 2013-02-26 1 Elektronikcentrum i Svängsta AB
Arv (Inheritance) Grundpelare inom OOP En klass, den härledda, utvidgar en annan klass, basklassen, genom att ärva dess metoder. Den härledda klassen kallas även för subklass. Subklassen utvidgar basklassen med egna medlemmar EC Utbildning AB 2013-02-26 2
Arv exempel Book och Software är syskon EC Utbildning AB 2013-02-26 3
Arv Relationerna kan benämnas på flera sätt: Basklassen Förälder, superklass, bastyp, supertyp Subklassen Barn, subklass, härledd klass, härledd typ, ärvande klass, ärvande typ. Relationen mellan subklass och dess basklass kan beskrivas som är en. Software är en TaxableProduct Label är en Control EC Utbildning AB 2013-02-26 4
Arv i.net Alla data- och referenstyper härstammar från object Metoder som ärvs: ToString() Equals(object) Static Equals(object1, object2) ReferenceEquals(object1, object2) GetType() GetHashCode() Finalize() MemberwiseClone() EC Utbildning AB 2013-02-26 5
När används arv? Skapa en basklass med gemensamma medlemmar Product som ärvs av Book och Software Building som ärvs av Factory och House Shape som ärvs av Circle och Square Bygga ut befintliga.net-klasser Skapa egna Form-typer Specialiserad List<Product> EC Utbildning AB 2013-02-26 6
Skapa basklasser Basklasser kan vara vilken klass som helst Inkapsling public protected internal, protected internal Private Virtuella metoder Kan överskuggas av ärvande klasser Görs ofta på ToString()-metoden EC Utbildning AB 2013-02-26 7
Basklasser Exempel på en (bas)klass olika åtkomstnivåer en virtuell metod class Product // Hidden in derived classes private decimal price; private string name; // Default constructor public Product() name = "UNKNOWN"; Initialize(); public Product(string thename) name = thename; Initialize(); public string Name get return Name; set name = value; public decimal Price get return price; set price = value; protected void Initialize() //Do some initializations... public virtual string GetDisplayText() return name + "\t" + price.tostring("c"); EC Utbildning AB 2013-02-26 8
Skapa subklasser Skapas genom att i klassdefinitionen ange klassen som ska ärvas. Endast en basklass kan användas Nyckelordet base representerar basklassen override används på metoder som ska överlagras (om de är virtual i basklassen) class Book : Product //... EC Utbildning AB 2013-02-26 9
Subklasser class Book : Product //New auto-properties public string Title get; set; public string Author get; set; //Default constructor public Book() Initialize(); //inherited from Product //Calling Product constructor public Book(string thename) : base(thename) //Overrides the method in Product (which is virtual) public override string GetDisplayText() return base.getdisplaytext() + "\tauthor: " + Author + "\ttitle: " + Title; EC Utbildning AB 2013-02-26 10
Polymorfism Flera former Subklasser hanteras gemensamt som dess basklass Kan skicka olika typer till samma metod En basklass kan peka på en subklass EC Utbildning AB 2013-02-26 11
Polymorfism public partial class Form1 : Form private void btnpolym_click(object sender, EventArgs e) Book b = new Book("C# 2008", 300m, "Murach"); Software s = new Software("MyOwnSoftware", 10000m, "1.2"); //Can send both Software and Book - they are derived from Product PrintInfo(b); PrintInfo(s); private void PrintInfo(Product p) MessageBox.Show(p.GetDisplayText()); class Book : Product public string Author get; set; class Software : Product public string Version get; set; public Book(string name, decimal price, string author) : base(name, price) this.author = author; public override string GetDisplayText() return "Author: " + Author + "\tname: " + Name + "\tprice: " + Price.ToString("c"); public Software(string name, decimal price, string version) : base(name, price) this.version = version; public override string GetDisplayText() return base.getdisplaytext() + "\tversion: " + Version; EC Utbildning AB 2013-02-26 12
Casting Konvertering från basklass till subklass Den underliggande typen måste vara av subklass-typen Görs en felaktig konvertering kastas undantaget InvalidCastException EC Utbildning AB 2013-02-26 13
Casting public partial class Form1 : Form private void btncasting_click(object sender, EventArgs e) Book thebook = new Book("C# 2008", 300m, "Murach"); Product prod = thebook; //implicit casting PrintInfo(prod); PrintInfo(theBook); //implicit casting Book otherbook = (Book)prod; //explicit casting BookDisplay(otherBook); BookDisplay(theBook); BookDisplay((Book)prod); //in-place casting private void PrintInfo(Product p) MessageBox.Show(p.GetDisplayText()); private void BookDisplay(Book b) MessageBox.Show("Title:\t" + b.name + Environment.NewLine + "Author:\t" + b.author + Environment.NewLine + "Price:\t" + b.price); EC Utbildning AB 2013-02-26 14