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(); }
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 }