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