2016-04-05 9 views
0

私はMyClassを呼び出すクラスを持っています。内部には、オブジェクト内から呼び出せるようにする非直列化コードがあります。クラスに関連付けられた値をクラス内から割り当てる、よりクリーンな方法がありますか?ここ は、私は(表向きは同じオブジェクト型を表す)に私をMYTEMPの結果を代入することはできませんが、私はMYTEMPの性質のすべてを割り当てることができ、私は今現在のクラスのインスタンスに値を割り当てます。

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 

をやっているものです~プロパティMe。私の実際のクラスははるかに複雑なので(例ではプリミティブを使用しましたが、他の多くのクラスのプロパティを持つかなり大きなクラスです)、MyTempの値を割り当てるより良い方法があるかどうかは疑問でした。クラスのインスタンス

+0

「MyTemp」のポイントは何ですか? XMLは既にMyClassオブジェクトを表しているので、プロパティでtempオブジェクトプロパティをホップスコッチするのではなく、直接作成するだけです。 – Plutonix

+0

@Plutonix、 "XMLが既にMyClassオブジェクトを表しています..."という意味がわかりません - XMLはLoadXMLサブに渡されるString型です。 MyTempの目的は、私に相当するオブジェクトを作成することです。 「Me = CType(DeSerialize(XMLText、Me.Type)、MyClass)」のようなことはできないので、私はtempを作成して、トップレベルのプロパティを使ってホップスコッチしなければなりません。それは愚かに見えますが、それが私がこの問題を提起した理由です。 –

答えて

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

あなたはおそらく非直列化されたオブジェクトを返さshared関数としてLoadXMLを宣言するためにオフにたくさんの方が良いだろう。こうすることで、代わりに

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

のあなたは

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

を行うだろうそして、あなたはすべてそのプロパティのコピーを行う必要がありません。

(申し訳ありませんが、VBが錆びている)

関連する問題