4
我正在嘗試創建一個基類和派生類,它們都實現了ICloneable
。在我看來,基類Clone
方法應該照顧所有基類屬性和派生類Clone
方法的所有派生類屬性,並使用基類的Clone
方法。其結果是這樣的: -如何使派生類可複製?
Public Class MyBaseClass
Implements ICloneable
Private my_base_var As Integer
Public Function Clone() As Object Implements System.ICloneable.Clone
Dim new_base_class As MyBaseClass = New MyBaseClass
new_base_class.my_base_var = my_base_var
Return new_base_class
End Function
End Class
Public Class MySubClass
Inherits MyBaseClass
Implements ICloneable
Private my_sub_var As Integer
Public Overloads Function Clone() As Object Implements System.ICloneable.Clone
Dim new_sub_class As MySubClass = CType(MyBase.Clone, MySubClass) ' (1)
new_sub_class.my_sub_var = Me.my_sub_var
Return new_sub_class
End Function
End Class
這導致運行時異常Unable to cast object of type MyBaseClass to type MySubClass
在線路(1),我承認並沒有讓我感到吃驚。用
Dim new_sub_class As MySubClass = MyBase.Clone
產生編譯錯誤。在我看來,我需要某種方式將MyBaseClass
轉換爲MySubClass
,以便讓基類的成員設置基類的Clone
。一個不太吸引人的選擇是複製基類的成員在子類的Clone
中。有誰知道在這裏做什麼?
我已經看過here這個問題,但不能將它翻譯成VB.Net。如果解決方案here是必要的,那麼我會放棄這個想法。在時間充裕的情況下,我打算使基類MustInherit
,如果這有什麼區別。
既然你不想使用(污)解決方法之一,也許庫可以幫助你。 AutoMapper可能適合您的需求(或任何其他映射庫也可以完成這項工作):http://www.codeproject.com/Articles/61629/AutoMapper – WeSt 2014-10-30 14:38:18