Неожиданные открытые переменные с префиксом __- в автоматически создаваемом коде XSDObjectGen.exe - PullRequest
0 голосов
/ 09 апреля 2009

Я автоматически сгенерировал некоторые классы из файла 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, как я первоначально сказал.

1 Ответ

1 голос
/ 09 апреля 2009

Различать публичную собственность и вспомогательную переменную.

XSD выполняет заданную XXXS ерунду для ненулевых типов.

Я не особенно люблю XSD-инструмент из-за подобных вещей. Посмотрите на XSDObjectGen или WSDL.EXE и посмотрите, работают ли они лучше для вас.

...