static void Main(string[] args) { var worker = new Worker(); worker.WorkPerformed += new EventHandler <WorkPerformedEvenArgs>(Worker_WorkPerformed1); worker.WorkPerformed += Worker_WorkPerformed2; // Delegate inference worker.WorkCompleted += (s, e) => Console.WriteLine("!!!Work Completed!!!".ToUpper());; worker.DoWork(5, WorkType.GenerateReports); BizRulesDelegate AddDel = new BizRulesDelegate((x, y) => x + y); BizRulesDelegate Multiply = (x, y) => x * y; var data = new ProcessData(); data.Process(2, 3, AddDel); Action <int, int> AddAction = (x, y) => Console.WriteLine(x + y); Action <int, int> MultiplyAction = (x, y) => Console.WriteLine(x * y); data.ProcessAction(2, 3, MultiplyAction); Func <int, int, int> funcAddDel = (x, y) => x + y; Func <int, int, int> funcMultiplyDel = (x, y) => x * y; Func <int, int, bool> compareNumbers = (x, y) => x == y; Func <bool> returnTrue = () => true; data.ProcessFuncBool(returnTrue); data.ProcessFunc(4, 11, compareNumbers); }