Typdeklaration

Allgemein betrachtet lassen sich bei den Sprachen C, C++ und C# deutliche Unterschiede feststellen:

  • Ein C-Programm besteht aus einer Sammlung von Funktionen und Datentypen
  • Ein C++-Programm besteht aus einer Sammlung von Funktionen und Klassen
  • Der Kern eines C#-Programms hingegen ist eine Menge von Typdeklarationen

Der Quellcode einer ausführbaren C#-Datei (EXE) oder einer dynamischen Bibliothek (DLL) setzt sich aus einer oder mehreren Typdeklarationen zusammen.

DLL-Dateien besitzen keinen Main-Einstiegspunkt. Bei ausführbaren Dateien (EXE) muss hingegen mindestens eine Klasse deklariert werden, die eine Methode namens Main als Programmstartpunkt enthält.

Große Softwareprojekte können tausende unterschiedliche Typen (wie Klassen) im Quellcode beinhalten. An solchen Projekten arbeiten meist mehrere Entwickler, die jeweils separate Module betreuen – Namenskonflikte bei Typen lassen sich dadurch kaum vermeiden. Wie lassen sich solche Konflikte auflösen? Hier kommen die bereits erwähnten „Namespaces“ zum Einsatz.

Ein Namespace (Namensraum) dient dazu, zusammengehörige Typdeklarationen zusammenzufassen und dieser Gruppe einen einheitlichen Bezeichner zu verleihen. Da jedes Programm im Grunde aus verbundenen Typdeklarationen besteht, legen Entwickler üblicherweise eigene Namespaces an und platzieren sämtliche Projekttypen darin.

Einfach ausgedrückt ist ein Namensraum eine Gruppenbezeichnung für eine Reihe von Klassen. Wenn anderer Code auf diese Klassen zugreifen möchte, muss er diese Gruppenbezeichnung mit angeben.

Stell dir eine Schulklasse vor, in der zwei Schüler denselben Vor- und Nachnamen tragen. Lehrer und Mitschüler können sie allein am Namen nicht voneinander abgrenzen, also werden Zusatzbezeichnungen verwendet – zum Beispiel TOM aus Gruppe A und TOM aus Gruppe B. Die Markierungen A und B übernehmen dabei genau die Aufgabe eines Namespaces.

Der folgende Code zeigt ein Beispielprogramm mit drei Typdeklarationen, wobei alle Typen innerhalb eines Namespace mit dem Namen MyProgram definiert sind.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloDemo // Deklariere einen Namespace
{

    class A                  // Deklariere Typ A (Klasse)
    {
        void Fun1() // Funktion
        {
            // Programm-logik
        }
    }

    class B                  // Deklariere Typ B (Klasse)
    {
        void Fun1() // Funktion
        {
            // Programm-logik
        }
    }

    class C                  // Deklariere Typ C (Klasse)
    {
        static void Main(string[] args) // Main Programmeinstieg
        {
            double pi = 3.14;
            string webSite = "foxdevelop.com";
            Console.WriteLine($"The Pi is {pi} and the website is {webSite}.");
        }
    }

}
Code-Sprache: PHP (php)

Wir werden die Funktionsweise von Namespaces in späteren Lektionen detailliert erläutern.

Typen sind Vorlagen

Da ein C#-Programm im Wesentlichen eine Sammlung von Typdeklarationen darstellt, liegt der Schwerpunkt beim Erlernen von C# darin, das Erstellen und Verwenden von Typen zu beherrschen. Zuerst muss ein zentraler Begriff verstanden werden:

Was ist ein Typ (Type)

Man kann einen Typ als Vorlage zum Erstellen von Datenstrukturen begreifen: Er ist selbst keine konkrete Datenstruktur, sondern legt alle Eigenschaften fest, die Objekte besitzen, die aus dieser Vorlage erzeugt werden.

Ein Typ ist lediglich eine „Bauzeichnung“ und belegt selbst keinen Arbeitsspeicher. Erst bei der Instanziierung wird Speicher zugewiesen und Daten abgelegt.

Ein Typ ist eine Bauvorlage, mit der konkrete Objekte erzeugt werden. Das lässt sich mit einem Hausbauplan vergleichen: Aus einem einzigen Plan lassen sich zahlreiche eigenständige Häuser errichten.

Jeder Typ wird durch drei Bestandteile definiert:

  1. Name
  2. Datenstruktur zur Ablage von Mitgliedswerten
  3. Verhalten und Einschränkungen

In C# ist alles ein Typ – auch die eingebauten Grundtypen.

Unten sind zwei gängige eingebaute Typen abgebildet: short und int.

Ihre Struktur sieht wie folgt aus:

Typ shortTyp int
Name: shortName: int
Struktur: Belegt 2 ByteStruktur: Belegt 4 Byte
Verhalten: 16-Bit-GanzzahlVerhalten: 32-Bit-Ganzzahl
  • Name: Identifikator des Typs (int/string/eigene Klassennamen)
  • Ablagestruktur: Legt Speichergröße und Feldanordnung fest (Beispiel: short belegt stets 2 Byte)
  • Verhaltenseinschränkungen: Definiert zulässige Rechenoperationen, Wertebereich und eingebaute Methoden (Beispiel: int unterstützt alle Grundrechenarten, Wertebereich -2^31 ~ 2^31-1)

Instanziierung (Instantiate)

Mithilfe des Schlüsselworts new aus einer Typvorlage ein nutzbares Datenobjekt erzeugen

Objekt (object) = Instanz (instance)

Nehmen wir die oben genannten Typen int und short als Beispiel: Daraus lassen sich Instanzen erzeugen. Im folgenden Codebeispiel sind pi, age und nums Instanzen, die jeweils aus den Typen double, int und short erstellt wurden.

namespace HelloDemo 
{

    class Program
    {
        static void Main(string[] args)
        {
            double pi = 3.14;
            int age = 12;
            short nums = 23;
        }
    }

}Code-Sprache: JavaScript (javascript)

In C# sind sämtliche Variablen und Daten eines Programms ausnahmslos Instanzen eines bestimmten Typs; es existieren keine typenlosen Daten.

Sie können sich am vorherigen Codebeispiel orientieren

Die im Beispiel gezeigte class C ist die Einstiegsklasse und erfüllt alle Anforderungen für eine ausführbare Datei:

  • Sie ist ein benutzerdefinierter Typ innerhalb des Namespace MyProgram
  • Sie enthält eine statische rückgabewertlose Main-Methode als Startpunkt der Anwendung

C# kennt mehr Typen als nur class

Alle deklarierbaren Typen in C#: Klasse (class), Struktur (struct), Schnittstelle (interface), Aufzählung (enum), Delegat (delegate), Datensatz (record)

BCL (Base Class Library): Die integrierte Standardklassenbibliothek von .NET. Sie stellt vordefinierte Systemtypen wie int, short, string, List<T> zur Verfügung, die Entwickler direkt instanziieren und nutzen können.

Typdeklaration

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert