Exceptionfault
Erfahrenes Mitglied
Ein sehr schönes Feature, das komischerweise viel zu selten genutzt wird, ist die Operanden Überladung in .NET. In C war das eine ziemlich schräge Sache und so haben wohl viele noch die mahnenden Worte vieler C Entwickler im Ohr: "Tut das niemals wenn ihr Chaos vermeiden wollt"
Unter .NET ist es aber eine sehr praktische Sache, kleines Beispiel:
Wie haben eine Klasse Konto
Im Normalfall würden wir, um den Betrag eines Kontos zu ändern die Methode "BucheBetrag" aufrufen. /* Sehen wir mal über irgendwelche Validierungen hinweg! */ Im Code würde das dann vielleicht so aussehen:
Ist sicher nicht falsch, und auch sehr leserlich, aber für interne Funktionen etc. ist mir das zu viel Code. Wie wärs denn damit ?
Was erwarten wir hier? Klar, der Betrag von k1 wird um 100 erhöht, danach wird der Betrag von k2 auf k1 addiert.
Um ganze Objekte addieren zu können habe ich in der Klasse Konto den "+" Operator überladen:
Ist nicht viel Aufwand, und der Code wird kurz und intuitiv (wenn mans nicht übertreibt ! )
Unter .NET ist es aber eine sehr praktische Sache, kleines Beispiel:
Wie haben eine Klasse Konto
Code:
class Konto
{
private decimal _geld;
private String _besitzer;
public Konto(String Besitzer)
{
this._geld = 0;
this._besitzer = Besitzer;
}
public decimal Geld
{
get { return this._geld; }
}
public String Besitzer
{
get { return this._besitzer; }
}
public void BucheBetrag(decimal betrag)
{
this._geld += betrag;
}
}
Im Normalfall würden wir, um den Betrag eines Kontos zu ändern die Methode "BucheBetrag" aufrufen. /* Sehen wir mal über irgendwelche Validierungen hinweg! */ Im Code würde das dann vielleicht so aussehen:
Code:
class Program
{
static void Main(string[] args)
{
Konto k1 = new Konto("Exceptionfault");
Konto k2 = new Konto("Anonymous");
Console.WriteLine("Betrag : " + k1.Geld.ToString());
Console.WriteLine("Betrag : " + k2.Geld.ToString());
Console.WriteLine("==============================");
k1.BucheBetrag(100);
k2.BucheBetrag(1000);
Console.WriteLine("Betrag : " + k1.Geld.ToString());
Console.WriteLine("Betrag : " + k2.Geld.ToString());
Console.WriteLine("==============================");
}
}
Code:
k1 += 100;
Console.WriteLine("Betrag : " + k1.Geld.ToString());
Console.WriteLine("Betrag : " + k2.Geld.ToString());
Console.WriteLine("==============================");
k1 = k1 + k2;
Console.WriteLine("Betrag : " + k1.Geld.ToString());
Console.WriteLine("Betrag : " + k2.Geld.ToString());
Um ganze Objekte addieren zu können habe ich in der Klasse Konto den "+" Operator überladen:
Code:
public static Konto operator +(Konto k, decimal betrag)
{
k._geld += betrag;
return k;
}
public static Konto operator +(Konto k1, Konto k2)
{
k1._geld += k2._geld;
k2._geld = 0;
return k1;
}