2016-04-05 2 views
0

У меня есть класс, который мы будем называть MyClass. Внутри у меня есть некоторый код десериализации, который я хочу иметь возможность вызвать изнутри объекта. Есть ли более чистый способ присвоить значения, связанные с классом, внутри класса. Вот что я делаю сейчасНазначить значение экземпляру текущего класса

Public Class MyClass 
    Public Property Prop1 as New String(String.empty) 
    Public Property Prop2 as New String(String.empty) 
    Public Property Prop3 as Boolean = False 
    Public Sub LoadXML(ByVal XMLText as String) 
    Dim MyTemp as New MyClass 
    MyTemp = CType(DeSerialize(XMLText, MyTemp.Type), MyClass) 'this returns an object 
    Me.Prop1 = MyTemp.Prop1 
    Me.Prop2 = MyTemp.Prop2 
    Me.Prop3 = MyTemp.Prop3 
    End Sub 
End Class 

Я не могу присвоить результат MyTemp к Me (которые якобы представляют один и тот же тип объекта), но я могу присвоить все свойства из MyTemp до Недвижимость от Me. Поскольку мой фактический класс намного сложнее (я использовал примитивы в примере), но на самом деле это довольно большой класс со свойствами, которые являются многими другими классами), я задавался вопросом, есть ли лучший способ присвоить значение MyTemp экземпляр класса.

+0

В чем смысл 'MyTemp'? Поскольку XML уже представляет объект MyClass, почему бы просто не создать его напрямую, а не перекочевать через свойство temp object по свойству? – Plutonix

+0

@Plutonix, я не уверен, что вы подразумеваете под «... XML уже представляет объект MyClass ...» - XML ​​- это тип String, который передается в подгрузку LoadXML. Цель MyTemp - создать объект, который является эквивалентом Me. Поскольку вы не можете сделать что-то вроде: «Me = CType (DeSerialize (XMLText, Me.Type), MyClass)» - я вынужден создать временную, а затем перекличку с помощью свойств верхнего уровня. Это выглядит глупо, но именно поэтому я поднял эту проблему. –

ответ

0

Вы, вероятно, хотите создать общую функцию, которая будет возвращать экземпляр MyClass вместо конструктора.

Public Shared Function LoadXML(ByVal XMLText As String) As MyClass1 
    Dim MyTemp As New MyClass1 
    MyTemp = CType(DeSerialize(XMLText, MyTemp.GetType()), MyClass1) 
    Return MyTemp 
End Function 

Вы можете запустить, чтобы создать первоначальный экземпляр класса, так что вместо вызова нового вы могли бы назвать MyClass.LoadXML (xmlString).

0

Возможно, вам было бы намного лучше объявить LoadXML как функцию shared, которая только что вернула десериализованный объект. Таким образом, вместо того, чтобы

dim myClassInstance = new MyClass(); 
myClassInstance.LoadXML(...) 

Вы бы

dim myClassInstance = MyClass.LoadXML(...); 

И вам не нужно будет делать все, что свойство копирования.

(извините, VB ржавый)

Смежные вопросы