2010-04-15 74 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