2010-04-15 7 views
0

J'ai une classe MustInherit Parent avec deux classes enfant qui héritent du parent.Me en tant que type d'enfant en fonction générale

Comment puis-je utiliser (ou diffuser) Me dans une fonction Parent en tant que type enfant de cette instance?

EDIT: Mon objectif réel est de pouvoir sérialiser (BinaryFormatter.Serialize(Stream, Object)) l'une ou l'autre de mes classes enfants. Cependant, "répéter le code" dans chaque enfant "semble" faux.

EDIT2: Ceci est ma fonction de sérialisation. Où devrais-je implémenter cette fonction? Copier et coller à chaque enfant ne semble pas correct, mais jeter le parent à un enfant ne semble pas correct non plus.

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

Votre classe/fonction parente ne devrait avoir connaissance d'aucune classe enfant. Pourquoi en avez-vous besoin pour participer à une classe pour enfants? – lxalln

Répondre

0

Pour répondre à votre question: Comme vous le feriez jeter un objet normal:

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

encore, faire un casting dans le code de Parent est considérée comme très mauvaise pratique. S'il vous plaît jeter un oeil à la Template pattern, il pourrait être plus approprié à ce dont vous avez besoin, et c'est beaucoup plus propre que de faire une telle distribution.

+0

Où devrait être ma fonction de sérialisation? – Steven

+0

@Steven: Dans le parent - * seulement * dans le parent. Oui, il sérialisera également les champs de l'enfant si le type * effective * de la variable est "ChildClass1". 'BinaryFormatter.Serialize' utilise le type * dynamic * de l'objet qui lui est passé, pas le type statique de la variable. – Heinzi

Questions connexes