Как описать в классе «Матрица» события, сигнализирующие о чем-либо? - C#
Формулировка задачи:
Здравствуйте.
В лабораторной работе задание, согласно которому необходимо в классе "Марица" описать события сигнализирующие об изменении размеров или компонентов.
Подскажите, пожалуйста, общий механизм, а то даже не знаю с чего начать "копать".
С уважением, Владислав.
Решение задачи: «Как описать в классе «Матрица» события, сигнализирующие о чем-либо?»
textual
Листинг программы
sealed class Matrix<T>
{
public event EventHandler<MatrixEventArgs> AccessElement;
public event EventHandler<MatrixEventArgs> ResizedMatrix;
private T[] arr;
public int Length0 { get; private set; }
public int Length1 { get; private set; }
public Matrix(int length0,int length1)
{
arr=new T[length0*length1];
Length0 = length0;
Length1 = length1;
}
public T this[int index0,int index1]
{
get
{
try
{
if (AccessElement != null)
AccessElement(this, new MatrixEventArgs("Прочитан элемент", index0, index1));
return arr[index0 * Length0 + index1];
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine("Ошибка!Обращения по не верному индексу.");
return default(T);
}
}
set
{
try
{
if (AccessElement != null)
AccessElement(this, new MatrixEventArgs("Записан элемент", index0, index1));
arr[index0*Length0 + index1] = value;
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine("Ошибка!Обращения по не верному индексу.");
}
}
}
public void Resize(int length0, int length1)
{
Array.Resize(ref arr,length0*length1);
this.Length0 = length0;
this.Length1 = length1;
if (ResizedMatrix != null)
ResizedMatrix(this, new MatrixEventArgs("Изменен размер матрицы!"));
}
}
class MatrixEventArgs:EventArgs
{
public string Message { get; private set; }
public MatrixEventArgs(string s)
{
Message = s;
}
public MatrixEventArgs(string s,int l0,int l1)
{
Message = s + string.Format("[{0},{1}]", l0, l1);
}
}