mirror of
https://github.com/JG2401/CsharpVersionHistory.git
synced 2026-08-28 20:20:10 +00:00
Version 2
Generics
Nicht definiert für einen bestimmten Datentyp. Verwendbar für Klassen, Methoden, Felder, etc.
Partial
- Ohne Verwendung von „partial“ tritt folgender Fehler auf wenn zwei gleichnamige Klassen in einem Namespace enthalten sind: Der Namespace enthält bereits eine Definition für „“.
- Anwendbar für Klassen, Strukturen, Interfaces oder Methoden.
- Alle Teile müssen das Schlüsselwort „partial“ und die gleiche Zugriffsebene beinhalten.
- Wenn ein Teil abstrakt definiert wird oder von einer Klasse erbt wirkt sich das auf alle Teile aus. Attribute oder Vererbungen werden zusammengefasst.
Methoden
Partielle Methoden können nur in partiellen Klassen verwendet werden. Dafür muss die Methode in einem Teil deklariert werden.
internal partial class Employee
{
partial void DoSomething();
}
In einem anderen Teil kann die Methode initialisiert werden.
internal partial class Employee
{
partial void DoSomething()
{
}
}
Warning
Eine partielle Methode darf nicht über mehrere implementierte Deklarationen verfügen. → Es darf nur eine Deklaration und eine Initialisierung in der gesamten partiellen Klasse.
Sealed
- Der Modifizierer „sealed“ verhindert, dass von dieser Klasse geerbt werden kann ??????????
- Anwendbar für Klassen, Methoden und Eigenschaften
- Der Modifizierer sealed muss immer mit override verwendet werden, wenn er auf eine Methode oder Eigenschaft angewendet wird.
- Fehlermeldung beim Versuch von einer sealed Klasse zu erben: Vom versiegelten Typ „“ kann nicht abgeleitet werden.
Extern
Nullable
Nullable ermöglicht Werttypen einen zusätzlichen Wert „null“. Das ist über „Nullable“ oder „Werttyp?“ möglich.
Beispiele
Deklaration
Nullable<int> NullableIntV1 = null;
int? NullableIntV2 = null;
int?[] NullableIntV3 = new int?[1];
Prüfung auf null
//HasValue
if (value.HasValue)
//is
if (value is int valueOfCount)
Ausgabe der Werte
Console.WriteLine(value);
Console.WriteLine(value.Value); //Fehler wenn value == null
Konvertierung in Ursprungstyp
int intValue = value ?? 0; //Wenn value == null -> intValue = 0
int intValue2 = value.GetValueOrDefault(); //Wenn value == null -> intValue = 0
int intValue3 = (int)value; // Fehler wenn value == null
Is
Beschreibung
Is ist geeignet für Prüfung nach dem Typ, Null oder um ein bestimmtes Muster abzugleichen.
Beispiele
int? count = 0;
DateTime dt = DateTime.Now;
if (count is null)
Console.WriteLine("count is null");
if (count is not null)
Console.WriteLine("count is not null");
if (count is int valueOfCount)
Console.WriteLine($"count is {valueOfCount}");
if (dt is { Day: 17, Month: 04, Year: 2023 })
{
Console.WriteLine("dt is true");
}
weiteres Beispiel in typeof
As
Beschreibung
- Konvertiert in einen anderen Datentyp.
- Unterschied zu Cast: Wenn die Konvertierung nicht möglich ist → kein Fehler (Rückgabewert ist NULL)
Cast
Beschreibung
- Konvertiert in einen anderen Datentyp.
- Unterschied zu As: Wenn die Konvertierung nicht möglich ist → Fehler
Typeof
Beschreibung
Dient zur Prüfung um welchen Objekttyp es sich handelt.
public class Animal { }
public class Giraffe : Animal { }
object b = new Giraffe();
Console.WriteLine($"is Animal: {b is Animal}"); // output: True
Console.WriteLine($"typeof Animal: {b.GetType() == typeof(Animal)}"); // output: False
Console.WriteLine($"is Giraffe: {b is Giraffe}"); // output: True
Console.WriteLine($"typeof Giraffe: {b.GetType() == typeof(Giraffe)}"); // output: True
Const
Beschreibung
- Konstanten werden für Variablen verwendet die beim deklarieren direkt initialisiert und danach nie mehr verändert werden.
- Konstanten können nicht static sein
Beispiel
int value = 15;
value = 20; // überschreibbar
Console.WriteLine(value);
const int value2 = 15;
value2 = 20; // Nicht überrschreibar
Console.WriteLine(value2);
const int value3; // Konstanten müssen direkt initialisiert werden