Web- und Software Development

MCTS 70-536 – ValueTypes / Werttypen

Written By: Mario Priebe - Okt• 12•09

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
  • 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 : )

Ähnliche Beiträge

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.