public void UseMulticast() { //dlegate è immutabile //internamente viene crato uin nuovo delegat //il delegate è un tipo e //quindi adesso assegno al //multicast di tipo delegate //un metodo che rispetta la firma del delegate //e poi uso la variabile di tipo delegate //come se stessi usando il metodo //posso assegnare ad un delegate in 4 modi : //1 metodo anonimo delegate{espressione} //2 lambda //3 nome della funzione //4 espressione EmptyDel multicast = ToLow; multicast += ToUp; //metodo anonimo multicast = delegate { return(""); }; multicast = Convert.ToString; //lambda expression C#6 //(parametro) => espressione string mystring = "closure"; multicast = s => mystring;//CLOSURE uso variabile dichiarata fuori //ATTENZIONE LA VARIABILE MYSTRING VIENE VALUTATA QUANDO VIENE USATO //IL DELEGATE!!! mystring = "closure!";//multicast stampa closure! Console.WriteLine(multicast("roberto")); int x = 0; EmptyDel1 multicast1 = Add1; multicast1 += Add2; multicast1(ref x);//ESEGUO LE FUNZIONI CHE SI SONO REGISTRATE A MULTICAST Console.WriteLine("RISULTATO = " + x); multicast -= ToUp; var m2 = new mydel1(Convert.ToInt32); var a = m2("3"); var b = m2.Invoke("3"); }
private void IconObtained(Bitmap img) { m_obtainingIcon = false; EmptyDel del = delegate() { pB_icon.Image = m_tempGesture.Action.GetIcon(pB_icon.Width); tB_address.Enabled = true; //btn_obtainIcon.Enabled = true; btn_obtainIcon.Text = Translation.GetText("C_SearchOpenWeb_btn_getIcon");//"Get Web Icon"; this.Cursor = m_cursor; }; if (tB_address.InvokeRequired || btn_obtainIcon.InvokeRequired || pB_icon.InvokeRequired) { this.Invoke(del); } else { del(); } }