/// <summary> /// Публичный конструктор для создания объекта калькулятора у которого /// будет доступ к методам, в которых участвует словарь. /// </summary> public Calculator() { /*АЛЬТЕРНАТИВА: СДЕЛАТЬ ЧЕРЕЗ АНОНИМНЫЕ МЕТОДЫ ИЛИ ЛЯМБДА_ВЫРАЖЕНИЯ.*/ MathOperation delPlus = Plus; MathOperation delMinus = Minus; MathOperation delMult = Mult; MathOperation delDiv = Divide; MathOperation delStepen = Stepen; // Передача делегатов в словарь. operations.Add("*", delMult); operations.Add("/", delDiv); operations.Add("+", delPlus); operations.Add("-", delMinus); operations.Add("^", delStepen); }
static void Main(string[] args) { MathOperation m = new MathOperation(); // Single cast delegate Console.WriteLine("**Single Cast Delegate**"); Console.Write("\n"); SampleDelegate dgt = m.Area_Of_Triangle; dgt(4, 8); dgt = m.Area_Of_Rectangle; dgt(8, 8); Console.Write("\n"); // Multicast delegates Console.WriteLine("**MultiCast Delegate**"); Console.Write("\n"); // Add methods using + operator Console.WriteLine("Adding Method reference using + operator"); SampleDelegate dgt1 = m.Area_Of_Triangle; dgt1 += m.Area_Of_Rectangle; dgt1(6, 6); Console.Write("\n"); // Remove method using - operator Console.WriteLine("Removing Method reference using - operator"); dgt1 -= m.Area_Of_Rectangle; dgt1(4, 4); Console.Write("\n"); Console.Write("Press any key to exit.."); Console.ReadLine(); }
static void Main(string[] args) { // Передача методов в делегаты. // Альтернативное решение - сделать через анонимные методы. /*MathOperation delTrue; * operations.Add("0", delTrue = (a, b) => a + b); * MathOperation delTry = (a, b) => a + b; * Console.WriteLine(delTry(3, 5)); * Console.WriteLine(operations["0"](4, 8));*/ MathOperation delPlus = Plus; MathOperation delMinus = Minus; MathOperation delMult = Mult; MathOperation delDiv = Divide; MathOperation delStepen = Stepen; // Передача делегатов в словарь. operations.Add("*", delMult); operations.Add("/", delDiv); operations.Add("+", delPlus); operations.Add("-", delMinus); operations.Add("^", delStepen); do { Console.WriteLine("Чекайте файлы и подождите предложение о повторе решения."); try { // Если программу будут перезапускать, то удалять файлы с результатами после каждого запуска. if (File.Exists(output1)) { File.Delete(output1); } if (File.Exists(output2)) { File.Delete(output2); } // Чтение из файлов в массивы строк. string[] firstDoc = File.ReadAllLines(input1); string[] secondDoc = File.ReadAllLines(input2); for (int i = 0; i < firstDoc.Length; i++) { try { // Вычиление результата выражения из первого файла. double answer = Calculate(firstDoc[i]); // Запись в файл. File.AppendAllText(output1, answer.ToString("f3") + Environment.NewLine); } catch (Exception) { Console.WriteLine("Входная строка имела неверный формат."); } } CheckAnswers(); } // Ексепшены. catch (IOException ex) { Console.WriteLine(ex.Message); } catch (UnauthorizedAccessException ex) { Console.WriteLine(ex.Message); } catch (SecurityException ex) { Console.WriteLine(ex.Message); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("Нажмите Enter, чтобы повторить."); } while (Console.ReadKey().Key == ConsoleKey.Enter); }