Files
2024-11-04 18:18:00 +01:00
..
2024-11-04 18:18:00 +01: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