Der 24.02.2022 beweist wieder einmal mehr wie dumm der Mensch sein kann. Leider nichts aus der Geschichte gelernt.
Warum kämpft man nicht gemeinsam gegen den grössten Feind, der alle Menschen bedroht? Vielleicht wäre es sinnvoller, die Ressourcen zum Retten unseres Planeten Erde zu verwenden, anstelle sich gegenseitig abzuschlachten?
Zum Glück hat die Geschichte uns auch folgendes gelernt:
Angenommen, wir haben ein Objekt AppColor, welches uns beim Erstellen der gewünschten Farben hilft. Wir möchten die Möglichkeit besitzen, die Farben über die Parameter Red, Green, Blue und Alpha zu steuern. Weiter brauchen wir verschiedene Möglichkeiten, um das Objekt zu initialisieren – sprich zu erzeugen. Direkt mit allen Parametern RGBA, nur RGB oder den einzelnen Farben. Dies führt dazu, dass wir eine ganze Reihe an Konstruktoren im Objekt haben werden:
public AppColor(byte red = 0, byte green = 0, byte blue=0, byte alpha=0)
{
Red = red;
Green = green;
Blue = blue;
Alpha = alpha;
}
public AppColor(byte red, byte green, byte blue)
{
Red = red;
Green = green;
Blue = blue;
Alpha = 0;
}
public AppColor(byte red)
{
Red = red;
Green = 0;
Blue = 0;
Alpha = 0;
}
...
Eine viel elegantere Lösung können wir mit einer Fabrikmethode (Factory methode) erstellen. Dazu erstellen wir eine Sub-Klasse mit dem Namen Builder, welche sämtliche Parameter als einzelne Methode enthält und als Rückgabewert wieder sich selber enthält. Zusätzlich wird noch eine Methode Create benötigt, welche dann das eigentliche Objekt erstellt:
public class Builder
{
#region fields
private byte _red;
private byte _green;
private byte _blue;
private byte _alpha;
#endregion
#region methodes
public Builder Red(byte red)
{
_red = red;
return this;
}
public Builder Green(byte green)
{
_green = green;
return this;
}
public Builder Blue(byte blue)
{
_blue = blue;
return this;
}
public Builder Alpha(byte alpha)
{
_alpha = alpha;
return this;
}
public AppColor Create()
{
return new AppColor(_red, _green, _blue, _alpha);
}
#endregion
}
Welche Vorteile haben wir nun mit diesem Konstrukt? Jetzt haben wir die Möglichkeit, eine x-beliebige Kombination von Parameter zu verwenden, um das Objekt AppColor zu erstellen:
// Einzelne Farbe
AppColor colorRed = new AppColor.Builder().Red(255).Create();
// Gemischte Farbe
AppColor mixColor = new AppColor.Builder().Red(22).Green(25).Create();
// Gemischte Farbe
AppColor mixColor2 = new AppColor.Builder().Green(25).Blue(12).Create();
// Gemischte Farbe
AppColor mixColor3 = new AppColor.Builder().Red(255).Green(255).Blue(0).Alpha(215).Create();
...
Wenn die Null-Prüfung des Compilers aktiviert wurde („enabled nullable annotation context“), wird das Ausrufezeichen „!“ Verwenden, um bewusst einen Nullwert zu erlauben.
Den „nullable annotation context“ aktivieren oder deaktivieren
Null-Prüfung des Compilers ein- ausschalten mit Preprocessor-Direktiven:
#nullable enable
#nullable disable
Die Null-Prüfung kann auch auf der Projektebene in der Projekt-Datei eingeschaltet werden:
Nach dem Aktivieren der Null-Prüfung zeigt der Compiler eine Warnung bei möglichen Nullwerten an:
Sollte ein bestimmter Wert auch Null sein dürfen, haben wir die Möglichkeit, den „Null-Forgiving Operator“ zu verwenden: