Schlagwort: Grundlagen

Der sinnvolle Einsatz von Schnittstellen

Die große Stärke von Schnittstellen ist, dass sie nachträglich einer Ableitungslinie hinzugefügt werden können. In .NET wird bspw. die Schnittstelle IDisposable für das Dispose-Pattern verwendet. In Java dient die Schnittstelle AutoCloseable dazu, für Klassen die Verwendung der try-with-resources-Anweisung zu ermöglichen.

Weiterlesen …

Threads und Deadlocks

Der Einsatz von Sperren zur Thread-Synchronisation birgt immer ein Deadlock-Risiko. Blockierungen treten dann auf, wenn zwei Sperren in unterschiedlicher Reihenfolge benutzt werden. Das folgende Beispiel zeigt exemplarisch eine fehlerhafte Implementierung, die im Multithreading-Einsatz zu Deadlocks führen wird.

Weiterlesen …

Nullwerte für Wertetypen

Im .NET Framework sind Datentypen entweder Wertetypen oder Referenztypen. Wertetypen haben grundsätzlich einen Standardkonstruktor, der dafür sorgt, dass alle Member-Variablen mit ihrem Standardwert initialisiert werden. Als Standardwert wird dabei auf Speicherebene der Wert 0 verstanden. Es ist generell nicht möglich, für Wertetypen einen Standardkonstruktor zu implementieren.

Weiterlesen …

Eigenschaften statt schreibgeschützter Variablen

Das .NET Framework kennt schreibgeschützte Variablen als Alternative zu Konstanten. Während der Wert von Konstanten bereits bei der Kompilierung bekannt sein muss, können schreibgeschützte Variablen zur Laufzeit im Konstruktor initialisiert werden (oder natürlich auch inline). Variablen veränderlicher Verweistypen Eine Variable kann unabhängig vom Datentyp als schreibgeschützt gekennzeichnet werden. Der Schreibschutz ist für Werttypen nach der […]

Weiterlesen …