Stichpunktartig schreibe ich in den kommenden Wochen über die Lerninhalte zur Vorbereitung auf die Prüfung zum MCTS
MCTS 70-536 Lession 1 – ValueTypes / Werttypen
- Die einfachsten Typen im Framework sind Werttypen und ca 300 davon befinden sich in diesem
- Daten werden direkt gespeichert und auf dem Stack abgelegt
- Werden Daten von der einen in eine andere Variable kopiert, werden diese auch zweimal auf dem Stack gespeichert
- Es gibt numerische und nicht numerische Typen (Übersicht unten)
- Wertetypen lassen sich allgemein in drei Kategorien einteilen, welche vom Grundtyp System.ValueType abgeleitet sind
- eingebaute Typen
- werden vom Framework bereitgestellt
- die Wahl fällt auf die Bedürfnisse -> Genauigkeit und/oder Größe
- benutzerdefinierte Typen – Strukturen
- Structs werden auf dem Stack abgelegt, verhalten sich aber fast wie Klassen, sind jedoch effizienter
- Daten werden hier direkt gespeichert
- Strukturen sollten: logisch gesehen einen einzelnen Wert darstellen, kleiner als 16Byte sein, nicht mehr geändert werden und nicht in ein Verweistype gecastet werden.
- Enumeration
- zusammengehörige Symbole mit festen Werten
- stellt Auswahlmöglichkeiten zur Verfügung
- sorgen für bessere Lesbarkeit des Codes
- eingebaute Typen
- Wertetypen habe einen impliziten Konstruktor, beim deklarieren wird automatisch eine Instanz angelegt
- Es wird automatisch 0 oder null zugewiesen, sollte aber dennoch innerhalb der Deklaration explizit initialisiert werden.
- Seit .NET 2.0 gibt es den Nullable-Typ, dieser kann mit HasValue überprüft werden, ob ein Wert zugewiesen wurde. Mit Value kann dieser dann ausgegeben werden.
Tabelle – Wertetypen
| Alias | Bytes | Wertebereich | Verwendung |
| sbyte | 1 | -128 bis 127 | byte mit Vorzeichen |
| byte | 1 | 0 bis 255 | byte ohne Vorzeichen |
| short | 2 | -32.768 bis 32.767 | Interoperationen |
| int | 4 | -2.147.483.648 bis 2.147.483.647 | ganze Zahlen / Zähler |
| uint | 4 | 0 bis 4.294.967.295 | positive ganze Zahlen / Zähler |
| long | 8 | -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 | große, ganze Zahlen |
| float | 4 | -3,402823E+38 bis 3,402823E+38 | Gleitkommazahlen |
| double | 8 | -1,79769313486232E+308 bis 1,79769313486232E+308 | große Gleitkommazahlen (hohe Genauigkeit) |
| decimal | 16 | -79228.162.514.264.337.593.543.950.335 bis 79228.162.514.264.337.593.543.950.335 | Finanzberechnungen, wissenschaftliche, sehr hohe Genauigkeit |
| char | 2 | einzelnes UnicodeZeichen | |
| bool | 4 | true/false | |
| date | 8 | Zeit |
BeispielCode für struct / enum / override string ToString()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | using System; namespace MCTSStructEnumeration { class Program { static void Main(string[] args) { Person p = new Person("Mario", "Priebe", 36, Gender.Male); Console.WriteLine(p); } } public struct Person { private readonly string firstName; private readonly string lastName; private readonly int age; private readonly Gender gender; public Person(string firstName, string lastName, int age, Gender gender) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.gender = gender; } public override string ToString() { return String.Format("Vorname: {0} Nachname: {1} Alter: {2} Geschlecht: {3}", firstName, lastName, age, gender); } } public enum Gender : int { Male, Female } } |
Tips:
- Die Runtime optimiert die Leistung von 32Bit-Integer (Int32, UInt32) und sollten daher für Zähler oder andere wichtige Variablen genutzt werden.
- Für Gleitkommeroperationen sollte double eingesetzt werden, da hier die Operationen durch die Hardware optimiert werden.
Links:
readonly, override, enum, struct
In der nächsten Lektion geht es weiter mit den Verweistypen.
Viel Spass beim entwickeln : )







