Task1.
Создать универсальные (generic) классы для представления квадратной, симметрической и диагональной матриц (симметрическая матрица – это квадратная матрица, которая совпадает с транспонированной к ней; диагональная матрица – это квадратная матрица, у которой элементы вне главной диагонали заведомо имеют значения по умолчанию типа элемента).
Описать в созданных классах событие, которое происходит при изменении элемента матрицы с индексами (i, j). В классе-клиенте (консольное приложение) продемонстрировать обработку этого события.
Реализовать сложение двух матриц, используя метод расширения, в случае невозможности выполнения операции должно генерироваться исключение.
Создать unit-тесты для тестирования методов разработанного типа.