Presentation laddar. Vänta.

Presentation laddar. Vänta.

Programmering i C# 5. Structer.

Liknande presentationer


En presentation över ämnet: "Programmering i C# 5. Structer."— Presentationens avskrift:

1 Programmering i C# 5. Structer

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

3 5.1 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 Programmering i C# - Kapitel 5

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

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

7 ValueType Alla structer ärver implicit ValueType Omdefinierar Equals
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 Programmering i C# - Kapitel 5

8 5.2 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 Programmering i C# - Kapitel 5

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

10 5.3 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? 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 Programmering i C# - Kapitel 5

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


Ladda ner ppt "Programmering i C# 5. Structer."

Liknande presentationer


Google-annonser