public void _02_03_ErweiterungsmethodenTest() { long l1 = 13; // Klassisch Assert.IsTrue(LongExtensions.IsOdd(l1)); // Dank Erweiterungsmethode syntaktisch möglich Assert.IsTrue(l1.IsOdd()); Assert.IsFalse(l1.IsEven()); Assert.IsTrue(l1.IsPrime()); var bismarck = new Schlachtschiff() { AnzLeben = 100, Feuerkraft = 10 }; var hood = new Schlachtschiff() { AnzLeben = 70, Feuerkraft = 10 }; schiessen(bismarck, hood); bismarck.schiesstAuf(hood); // Kompiler übersetzt den vorausgegangenen Ausdruck in folgenden SchlachtschiffExtensions.schiesstAuf(bismarck, hood); }
// Klassische Lösung, einen Vorgegebene Klasse um Funktionen zu erweitern static void schiessen(Schlachtschiff feuernde, Schlachtschiff befeuerte) { befeuerte.AnzLeben -= feuernde.Feuerkraft; }
public static void schiesstAuf(this Schlachtschiff feuernde, Schlachtschiff befeuerte) { befeuerte.AnzLeben -= feuernde.Feuerkraft; }