Presentation laddar. Vänta.

Presentation laddar. Vänta.

Programmering i C# 5. Structer. Programmering i C# - Kapitel 5 2 Typkategorier Värdetyper Struct Enum Referenstyper Klass Delegerare Interface Typomvandling.

Liknande presentationer


En presentation över ämnet: "Programmering i C# 5. Structer. Programmering i C# - Kapitel 5 2 Typkategorier Värdetyper Struct Enum Referenstyper Klass Delegerare Interface Typomvandling."— Presentationens avskrift:

1 Programmering i C# 5. Structer

2 Programmering i C# - Kapitel 5 2 Typkategorier Värdetyper Struct Enum Referenstyper Klass Delegerare Interface Typomvandling struct till klass: boxing

3 Programmering i C# - Kapitel Skillnader mot klass Struct har defaultkonstruktor Sätter alla medlemmar till noll Kan ej omdefinieras Structobjekt kan skapas utan konstruktoranrop Bättre prestanda än klasskonstruktion Ytterligare konstruktorer kan finnas

4 Programmering i C# - Kapitel 5 4 Konstruktor Skapas ändå på stack Viss inkonsekvens i new Anses därmed initierade Kan användas utan tilldelning int obj = new int(); // eller: Int32 obj = new Int32();

5 Programmering i C# - Kapitel 5 5 Egendefinierad struct OK göra fält public struct Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } }

6 Programmering i C# - Kapitel 5 6 Specialregler för struct Defaultkonstruktorn försvinner inte då egna konstruktorer läggs till Explicit initiering av fält får ej ske Destruktor kan ej finnas Arv finns inte Varken till eller från struct Medlem kan ej vara protected Interface kan implementeras

7 Programmering i C# - Kapitel 5 7 ValueType Alla structer ärver implicit ValueType Härledd från Object Omdefinierar Equals Alla structers Equals ger utan omdefinition jämförelse av tillstånd == och != är inte överlagrade för egna structer Men är det i klassbibliotekets structer Kan lätt göras med anrop till Equals

8 Programmering i C# - Kapitel Enum Klass härledd från ValueType heter Enum Struct härledd från Enum skapas i C# med nyckelordet enum Trots att structer inte kan ärva! Ger objekt som kan tilldelas namngivna värden – namngivna tillstånd Ger tydligare kod än exempelvis ett heltal vars värden har symbolisk betydelse

9 Programmering i C# - Kapitel 5 9 Enum exempel Värdena är explicit typomvandlingsbara till/från int Även annan underliggande typ kan anges Underliggande typens operatorer gäller enum MyEnum {First, Second, Third}; MyEnum e = MyEnum.First; e = MyEnum.Second; if (e == MyEnum.Second)... MyEnum.Second = MyEnum.Third; // Fel!

10 Programmering i C# - Kapitel Boxing Klasser och structer har gemensam basklass i Object Objectreferens bör kunna referera till structobjekt! Trots olika semantik i klass/structnamn int x = 5; object obj = x; // vad tilldelas?

11 Programmering i C# - Kapitel 5 11 Boxing forts. Implicit typomvandling från struct till objectreferens genom att ett nytt klassobjekt med samma innehåll som structen skapas och referensen tilldelas det nya objektet Objekt av odefinierad klass, på heap Referensen kan explicit typomvandlas tillbaka till den boxade typen

12 Programmering i C# - Kapitel 5 12 Boxing exempel Funktionen får referens till ett boxat objekt Värdeanrop! void func(object obj) { // gör något med obj, och anroparens objekt ändras if (obj is MyClass)... } … int x = 5; func(x);


Ladda ner ppt "Programmering i C# 5. Structer. Programmering i C# - Kapitel 5 2 Typkategorier Värdetyper Struct Enum Referenstyper Klass Delegerare Interface Typomvandling."

Liknande presentationer


Google-annonser