Я пишу библиотеку классов на C # для работы с матрицами, и в настоящее время я работаю над подклассом Matrix, который называется ComplexMatrix.Базовый класс Matrix работает со значениями типа данных Int32 (более продвинутая версия использует Double) и ComplexMatrix структуры System.Numerics.Complex (.NET 4).
Для базового класса Iпереопределить ToString () как:
| 1 2 |
| 3 4 | printed as {{1,2}{3,4}}
Структура System.Numerics.Complex переопределяет ToString () в виде:
a+bi printed as (a,b) where a is real and b is imaginary
При переопределении ToString в ComplexMatrix я просто использовал метод:
public override string ToString()
{
return base.ToString();
}
К сожалению, для сложной матрицы произошло следующее:
| 1+1i 1+2i |
| 2+1i 2+2i | printed as {{0,0}{0,0}} rather than {{(1,1),(1,2)}{(2,1)(2,2)}}
Исходный код ToString (), который я написал для класса Matrix:
public override string ToString()
{
StringBuilder matrixString = new StringBuilder();
string comma = "";
matrixString.Append("{");
for (int i = 0; i < this.Rows; i++)
{
matrixString.Append("{");
for (int j = 0; j < this.Columns; j++)
{
if (j == 0) comma = "";
else comma = ",";
matrixString.Append(comma + this.Elements[i, j].ToString());
}
matrixString.Append("}");
}
matrixString.Append("}");
return matrixString.ToString();
}
В приведенном выше коде:
- this.Elements Свойство: в классе Matrix это двумерный массив типа Int32 (Double в более новой, более продвинутой версии);он имеет тип System.Numerics.Complex в ComplexMatrix
- this.Rows, this.Columns Свойства: количество строк и столбцов матрицы соответственно
У меня есть несколько вопросов::
- Когда ToString вызывается для экземпляра ComplexMatrix и вызывает базовый метод ToString (), выполняется ли попытка преобразования типа из Complex в Int32?
- в качестве элементов ComplexMatrixСвойство (тип Complex [,]) скрывает свойство Elements базового класса (тип Int32 [,]), требуется новое ключевое слово?
- Видится ли ключевое слово this в качестве типа Matrix, а не ComplexMatrix?