static void Main(string[] args)
        {
            NumbChange nc1 = new NumbChange(Add12); //Vewrwende den Funktionszeige von Add12

            //int result = nc1(50);
            nc1 += Sub17;
            var result1 = nc1(50); // Add12 + Sub17

            nc1 -= Add12;
            nc1(70);                                          //wird nur Sub17 aufgerufen

            Action a1 = new Action(VoidMethodeWithoutParams); //Action kann nur Methoden ohne Rückgabetyp aufrufen

            a1();

            NumbChange2            nc2 = new NumbChange2(AddNums);
            Action <int, int, int> a2  = AddNums;

            a2 += AddNums;
            a2(12, 33, 4); //AddNums wird 2x gecalled


            Func <int, int, int> rechnerFunc = Addition;
            int result2 = rechnerFunc(23, 12);
        }
        static void Main(string[] args)
        {
            #region Delegate
            NumbChange nc1 = new NumbChange(AddNum);
            nc1(12); //Ruft AddNum auf

            Console.WriteLine("2ter Call mit 2 angehängten Methoden");

            nc1 += MultNum;
            nc1(25); //Ruft AddNum + MultNum auf

            nc1 -= AddNum;
            nc1(13); // Ruft nur MultNum auf



            NumbChange numberChanger1 = new NumbChange(AddNum);
            NumbChange numberChanger2 = new NumbChange(MultNum);
            nc1 = numberChanger1;
            nc1(11); //Es wird nur AddNum aufgerufen

            nc1 += numberChanger2;
            nc1(13); //Es werden beide Methoden aufgerufen.
            #endregion


            #region Action<T> und Func<T>
            // Action hat kein Rückgabewert.
            Action a1 = new Action(A);
            a1 += B;

            // Action<int> a2a = new Action<int>(C);
            Action <int> a2 = C; //Kurzschreibweise zu -> Action a1 = new Action(A);
            a2(123);

            Action <int, int, int> a3 = AddNums;
            a3(123, 565, 222);


            Func <int, int, int> rechner = Add; //Letzter Parameter ist der Rückgabewert!
            int result = rechner(33, 66);

            #endregion

            Console.ReadKey();
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            #region Delegates vor .NET 2.0
            NumbChange nc1 = new NumbChange(AddNum);
            nc1(12); //Ruft AddNum auf

            nc1 += MultNum;
            nc1(25); //Ruft AddNum + MultNum auf

            nc1 -= AddNum;
            nc1(13); // Ruft nur MultNum auf


            NumbChange numberChanger1 = new NumbChange(AddNum);
            NumbChange numberChanger2 = new NumbChange(MultNum);

            nc1 = numberChanger1;
            nc1(11); //Es wird nur AddNum aufgerufen

            nc1 += numberChanger2;

            nc1(13); //Es werden beide Methoden aufgerufen.
            #endregion



            #region Action<T> und Func<T>
            Action a1 = new Action(A); //delegate void System.Action
            a1 += B;
            a1();


            Action <int> a2 = C; //Kurzschreibweise zu -> Action a1 = new Action(A);
            a2(123);

            Action <int, int, int> a3 = AddNums;
            a3(123, 565, 222);



            //Func gibt einen Rückgabewert zurück
            Func <int, int, int> rechner = Add; //Letzter Parameter ist der Rückgabewert!
            int result = rechner(20, 56);

            #endregion
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            #region Delegates vor .NET 2.0

            NumbChange nc1         = new NumbChange(AddNum); //Verwende AddNum (muss die selbe Methoden-Signatur vorweisen, wie diese in Delegate angegeben wurde
            int        returnValue = nc1(33);                //AddNum wird gecalled

            nc1 += MultNum;                                  // mit += kann man weitere Methoden an dem Delegate dranhängen
            nc1(15);                                         //AddNum + MultNum

            Console.WriteLine($"{nc1(10)}");                 // Ausgabe der letzten angehängten Methode

            nc1 -= AddNum;                                   //AddNum wurde vom Delegate entfernt und wird auch nicht mehr aufgerufen.


            NumbChange numberChanger1 = new NumbChange(AddNum);
            NumbChange numberChanger2 = new NumbChange(AddNum);

            nc1 = numberChanger1;
            nc1(11);

            nc1 += numberChanger2;

            nc1(99);

            Console.ReadLine();
            #endregion


            #region Delegate with Callbacks

            //Del handler = new Del(DelegateMethod);
            Del handler = DelegateMethod;
            handler("Hallo World");


            MethodWithCallback(1, 2, handler);
            Console.ReadLine();
            #endregion


            #region Action<T> und Func<T>

            //Methoden mit void und ohne Parameter können von a1 verwendet werden.
            Action a1 = new Action(A);
            a1 += B;
            a1(); // Hier wird Methode A und B gecalled


            Action <int> a2 = C;
            a2(123);

            Action <int, int, int> a3 = AddNums;
            a3(123, 456, 789);

            Func <int, int, int>  rechner       = Add;
            Func <int, int, bool> valueComparer = ValueAreEqual;
            int result = rechner(22, 33);


            Func <int, string, Tuple <int, string> > tc = MethodeABC;

            //Func<int, string, Tuple<int, string>> tc1 = Tuple.Create<int, string>;



            bool equalResult = valueComparer(12, 13);
            equalResult = valueComparer(13, 13);
            #endregion
        }