Ответ 1
- Это правильная интерпретация?
Почти, но не совсем. По умолчанию параметры первичного конструктора не записываются в поля; однако они доступны, например, в инициализаторах членов (и только там), поэтому вы можете явно инициализировать поля или свойства с ними:
class Point(int x, int y)
{
public int X { get; } = x;
public int Y { get; } = y;
}
(обратите внимание, что в этом случае создаются поля поддержки, но для свойств, а не для параметров конструктора)
Но вы также можете объявить параметры с помощью модификаторов доступа, и в этом случае они будут захвачены как поля и будут доступны из всех членов экземпляра:
class Point(public readonly int x, public readonly int y)
{
}
(как вы можете видеть, вы также можете указать другие модификаторы для полей, например readonly
)
- Означает ли это, что вы все еще можете выполнять перегрузки конструктора (подразумевается так термин "первичный" )?
Да, у вас могут быть другие, не первичные конструкторы. Тем не менее, все они должны вызывать первичный конструктор с помощью обычного синтаксиса : this(...)
.
- Вы можете ссылаться на эти неявные поля поддержки в других конструкторах/методах?
Как упоминалось выше, нет никаких неявных полей поддержки; поле поддержки создается только в том случае, если вы явно указываете модификатор доступа в параметре основного конструктора.
EDIT: эта функция снята и не будет в С# 6 (возможно, в С# 7, в немного другой форме)