예제 #1
0
        public bool exec()
        {
            var myDg = new DGBinOp(Add);

            double res = myDg.Invoke(1, 2);

            // Kurzschreibweise
            res = myDg(3, 6);

            // Ein Delegate kann n Einsprungadressen aufnehmen
            myDg += new DGBinOp(Mul);

            // Eine etwas sinnlose Anwendung von Delegates
            res = myDg(3, 6);

            // Einen Einsprungpunkt aus der Liste entfernen
            myDg -= new DGBinOp(Mul);

            res = myDg(3, 6);

            res = Calculator(2, 7, new DGBinOp(Add));
            res = Calculator(2, 7, new DGBinOp(Mul));


            // Lambdaausdruck als Sprachmittel, um inline Funktionen/Unterprogramme zu definieren

            res = Calculator(2, 7, (double a, double b) => { var summe = a + b; return(5 * summe); });

            res = Calculator(2, 7, (a, b) => { var summe = a + b; return(5 * summe); });

            res = Calculator(2, 7, (a, b) => { return(5 * (a + b)); });

            res = Calculator(2, 7, (a, b) => 5 * (a + b));

            // Lambdaausdrücke anwenden in Link- Erweiterungsmethoden

            int[] zahlen = { 3, 4, 6, 9, 12, 16, 18 };

            // Alle Zahlen, die durch 3 teilbar sind
            // klassisch
            var lst3 = new List <int>();

            foreach (var z in zahlen)
            {
                if (z % 3 == 0)
                {
                    lst3.Add(z);
                }
            }

            // Linq

            var lst3_2 = zahlen.Where(z => z % 3 == 0).ToList();

            // Abfrage wird definiert
            var lst3_2_1 = zahlen.Where(z => z % 3 == 0);

            // Ergbnisse der Abfrage abgerufen
            var lst3_2_2 = lst3_2_1.ToArray();

            return(true);
        }
예제 #2
0
 // Delegates einsetzen, um Rückrufmethoden an Unterprogramme zu übergeben (op ist der Callback)
 double Calculator(double a, double b, DGBinOp op)
 {
     return(op.Invoke(a, b));
 }