Я автоматически сгенерировал некоторые классы из файла xsd с помощью инструмента XSDObjectGen.exe . Мои классы содержат дополнительные открытые переменные, названные с использованием начальных подчеркиваний, и я не могу понять, почему.
Вот пример из файла xsd:
<xs:attribute name="Fare" type="xs:int" use="required">
<xs:annotation>
<xs:documentation>The fare price in pence</xs:documentation>
</xs:annotation>
</xs:attribute>
Соответствующий автоматически сгенерированный код C #:
[XmlAttribute(AttributeName = "Fare", DataType = "int")]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public int __Fare;
[XmlIgnore]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public bool __FareSpecified;
[XmlIgnore]
public int Fare
{
get { return __Fare; }
set { __Fare = value; __FareSpecified = true; }
}
Я понимаю весь этот код, включая атрибуты. Однако я не понимаю , почему это было реализовано таким образом.
- Почему этот класс сериализует свойство
__Fare
, а не Fare
? В этом случае переменная __Fare
будет закрытой (и переименована в _fare
), или можно использовать автоматическое свойство.
- Какова цель переменной
__FareSpecified
?
Мы считаем, что переменные с префиксом __
просто добавят неудобств для разработчиков, использующих эти классы, поэтому планируем переписать их следующим образом:
[XmlAttribute(AttributeName = "Fare", DataType = "int")]
public int Fare{ get; set;}
Или даже просто:
[XmlAttribute]
public int Fare{ get; set;}
Может ли кто-нибудь пролить свет на обоснование переменных с префиксом __
?
Обратите внимание, что наш xsd-файл не должен часто меняться, если вообще когда-либо, поэтому наша способность автоматически генерировать эти классы не важна.
Редактировать
Я дважды проверил с командой здесь, этот исходный код был фактически сгенерирован с использованием XSDObjectGen.exe, а не xsd.exe, как я первоначально сказал.