Зачем мне вызывать конструктор по умолчанию для `struct` с автоматическими свойствами

Это не скомпилируется

public struct Matrix 
{
    readonly double[] elems;
    public Matrix(int rows, int cols) 
    {
        this.elems=new double[rows*cols];
        this.Rows=rows;
        this.Columns=cols;
    }
    public int Rows { get; private set; }
    public int Columns { get; private set; }
}

но это делает:

public struct Matrix 
{
    readonly double[] elems;
    public Matrix(int rows, int cols) : this()
    {
        this.elems=new double[rows*cols];
        this.Rows=rows;
        this.Columns=cols;
    }
    public int Rows { get; private set; }
    public int Columns { get; private set; }
}

Это почему?

Ошибка времени компиляции

ошибка CS0188: объект 'this' нельзя использовать, пока все его поля не назначены

а также

Ошибка CS0843: поле поддержки для автоматически реализованного свойства 'SO_MMul.Matrix.Columns' должно быть полностью назначено, прежде чем элемент управления будет возвращен вызывающей стороне. Попробуйте вызвать конструктор по умолчанию из инициализатора конструктора.

Разве параметризованный конструктор в любом случае не вызывает конструктор по умолчанию?

0 ответов

Другие вопросы по тегам