Почему C# разрешил скомпилировать конструктор без параметров?
В книге Рихтера, о теме: "Конструкторы экземпляров и структуры (значимые типы)".
Так как компилятор не генерирует автоматически для структур их конструкторы без параметров, то поля инициализируются 0/Null, и что бы принудительно исполнить конструктор значимого типа без параметров, то его нужно явно объявить, иначе как написано в книге данный код даже нельзя скомпилировать.
Пример кода из книги Рихтера:
internal struct Point {
public Int32 m_x, m_y;
public Point() {
m_x = m_y = 5;
}
}
internal sealed class Rectangle {
public Point m_topLeft, m_bottomRight;
public Rectangle() {
}
}
Однако протестив данный код компилятор выдал мне такую ошибку по поводу структуры Point:

После этого я решил изменить версию языка до 10.0 и обратно протестировать данный код и вуаля у меня все получилось. Почему получилось?
Код версии языка 10.0
var rect = new Rectangle();
Console.WriteLine(rect.ToString()); //блок метода Main
internal struct Point
{
public Int32 m_x, m_y;
public Point()
{
m_x = m_y = 5;
}
}
internal sealed class Rectangle
{
public Point m_topLeft, m_bottomRight;
public Rectangle()
{}
}
public override string ToString()
{
return string.Format($"{m_topLeft.m_x}, {m_topLeft.m_y} : {m_bottomRight.m_x},
{m_bottomRight.m_y}");
}
.NET6 решили поменять шаблон консольного приложения Шаблон консольного приложения .NET6