Почему 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


Ответы (0 шт):