Zum Hauptinhalt springen
Veröffentlicht am

struct in C#

Teilen:

Einführung

Die Sprache C# ist reich an Typen und bietet Programmierern eine breite Palette von Werkzeugen zur Problemlösung. Zu diesen Werkzeugen gehören Strukturen (structs), die besonders nützlich sind, um leichtgewichtige Objekte mit Wertsemantik darzustellen.

Was ist eine Struktur (struct)?

In C# ist eine struct ein Werttyp, der dazu dient, kleine Mengen zusammengehöriger Daten zu kapseln. Aufgrund ihrer Natur als Werttyp belegt sie direkt Speicherplatz, vermeidet Heap-Allokationen und ist daher in bestimmten Situationen schneller als Klassen.

Strukturen vs Klassen

Unterschiede zwischen structs und Klassen:

  1. Zuweisungstyp: Während eine struct ein Werttyp ist, ist eine Klasse ein Referenztyp. Dieser grundlegende Unterschied bestimmt das Verhalten bei verschiedenen Operationen, insbesondere bei der Zuweisung und Parameterübergabe.
  2. Vererbung: structs unterstützen keine Vererbung, außer der Implementierung von Interfaces.
  3. Konstruktoren: Eine struct kann keinen parameterlosen Konstruktor haben. Sie kann jedoch parametrisierte Konstruktoren besitzen.
  4. Destruktoren: structs können keine Destruktoren haben. Destruktoren werden in Klassen verwendet, um notwendige Bereinigungen vorzunehmen, bevor ein Objekt vom Garbage Collector eingesammelt wird.
  5. Zugriffsmodifizierer: Der Modifizierer protected hat in einer struct keine Bedeutung, da sie keine Vererbung unterstützen.

Wann sollte man eine struct verwenden?

structs sind ideal in Situationen, in denen:

  • Die Instanz klein ist und Wertsemantik hat.
  • Heap-Allokationen vermieden werden sollen.
  • Das Objekt einen einzelnen logischen Wert darstellt, wie eine Zahl oder einen Datenpunkt.

Praktisches Beispiel

Hier ist ein Beispiel einer struct im Einsatz:

using System;

namespace Base {
  class Struct {
    public void Run() {
      var struktur = new Struktur();
      struktur.Zahl = 200;

      // Die Zahl muss >= 0 und <= 100 sein.
    }
  }

  struct Struktur : IZahl {
    private int zahl;

    public int Zahl {
      set {
        if (value >= 0 && value <= 100) {
          zahl = value;
          ZahlAusgeben();
        }
        else
          Console.WriteLine("Die Zahl muss >= 0 und <= 100 sein.");
      }
    }

    public void ZahlAusgeben() {
      Console.WriteLine($"Zahl: {zahl}");
    }
  }

  interface IZahl {
    void ZahlAusgeben();
  }
}

Fazit

Die Wahl zwischen einer struct und einer Klasse in C# hängt von den spezifischen Anforderungen deines Projekts ab. Wir hoffen, dass du mit diesem Artikel ein klares Verständnis von Strukturen und ihren sinnvollen Einsatzmöglichkeiten gewonnen hast.

Happy coding!