Я написал некоторый код, который прекрасно работает, но я не понимаю, почему он работает. Я хочу сериализовать класс с, скажем, целым числом. Итак, вот код класса.
[Serializable]
public class TestClass
{
public int Variable;
}
Теперь я хочу иметь возможность создать экземпляр этого класса и сразу установить Variable
. Поэтому я создаю конструктор, а также частный конструктор по умолчанию для сериализатора.
[Serializable]
public class TestClass
{
public int Variable;
private TestClass() {}
public TestClass(int value)
{
Variable = value;
}
}
Так что в коде, где я использую это, параметры по умолчанию становятся удобными. Поэтому я применил эту технику к общедоступному конструктору.
[Serializable]
public class TestClass
{
public int Variable;
private TestClass() {}
public TestClass(int value = 0)
{
Variable = value;
}
}
И все это прекрасно работает, но почему? Разве у нас нет двух конструкторов с одинаковым определением? Даже если я сделаю конструктор по умолчанию общедоступным, все работает нормально. Как только я удаляю конструктор по умолчанию, он терпит неудачу при сериализации. Мое первое предположение состоит в том, что XmlSerialize .NET не проверяет конструкторы с параметрами по умолчанию. Но почему компилятор все еще разрешает этот код?
Мне просто любопытно, но я также надеюсь узнать и лучше понять, как все работает внутри. Поиск в Google не дает ничего полезного, возможно, только потому, что я не мог придумать правильные условия поиска.