|
|
|
Supreme Being
      
модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047,
Visits: 33 391
|
|
Допустим, имею класс с двумя свойствами:
_
Public Property IntProp() As Integer
Get
IntProp = c_IntProp
End Get
Set(ByVal value As Integer)
c_IntProp = value
End Set
End Property
_
Public Property StrProp() As String
Get
StrProp = c_StrProp
End Get
Set(ByVal value As String)
c_StrProp = value
End Set
End Property
Как видите, у каждого из свойств установлено дефолтное значение. Поэтому, когда я сериализую (через XmlSerializer и FileStream) экземпляр этого класса, то в итоговый XML-файл попадают только те свойства, значения которых [bold]отличаются[/bold] от дефолтных. Например, если IntProp = 123 (не равно 5), а StrProp = "Вася" (совпадает с дефолтом), то XML будет выглядеть так:
123
т.е. StrProp в него не попадает. Что ж, так и задумано.
Однако, когда я выполняю [underline]десериализацию[/underline] из этого XML-файла, то StrProp получит пустое значение, - если только в конструкторе класса нет явной инициализации свойства StrProp в строку "Вася". Получается, что дефолтные значения нужно указывать в ДВУХ местах: в атрибутах [bold]DefaultValueAttribute[/bold] и в коде конструктора. С одной стороны, это логично: атрибуты - это [bold]метаданные[/bold], а конструктор - это [bold]код[/bold]. Но с другой стороны, очень хоцца сказать конструктору: [italic]"А ну-ка возьми-ка начальные значения всех членов класса из метаданных! чтоб мне любимому дважды не писАть!"...[/italic] вопрос в том, КАК это сделать? как заставить конструктор проинициализировать экземплярные члены класса значениями из соотв. атрибутов [bold]DefaultValueAttribute[/bold]?!
While (!Life.EOF) { You.Money ++; You.Girls.Add(new Girl(90,60,90)); BeHappy(); }
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047,
Visits: 33 391
|
|
|
|
|