2010-04-15 42 views
0

我有一個MustInherit父類與兩個子類從父繼承。我作爲兒童類型在一般功能

如何在Parent函數中使用(或Cast)Me作爲該實例的子類型?

編輯:我的實際目標是能夠序列化(BinaryFormatter.Serialize(Stream, Object))我的任何一個孩子班。但是,「重複每個孩子的代碼」似乎是「錯誤的。

EDIT2:這是我的序列化功能。我應該在哪裏實現這個功能?複製並粘貼到每個孩子似乎並不正確,但將父母投給孩子似乎也不錯。

Public Function Serialize() As Byte() 
    Dim bFmt As New BinaryFormatter() 
    Dim mStr As New MemoryStream() 

    bFmt.Serialize(mStr, Me) 

    Return mStr.ToArray() 
End Function 
+0

你的父類/函數應該沒有任何子類的知識。你爲什麼需要它投到一個孩子班? – lxalln 2010-04-15 20:16:35

回答

0

要回答你的問題:正如你投一個正常的對象:

If TypeOf Me Is ChildClass1 Then 
    Dim x As ChildClass1 = DirectCast(Me, ChildClass1) 
    .... 
End If 

儘管如此,在做的Parent代碼中的鑄造被認爲是非常不好的做法。請看Template pattern,它可能更適合你的需求,而且比做這樣的演員還要乾淨。

+0

我的序列化函數應該在哪裏? – Steven 2010-04-15 20:36:53

+0

@Steven:父母中的 - * only *。是的,如果變量的* actual *類型是「ChildClass1」,它會序列化子的字段。 'BinaryFormatter.Serialize'使用傳遞給它的對象的* dynamic *類型,而不是變量的靜態類型。 – Heinzi 2010-04-15 21:16:51