2011-01-05 2 views
6

Je n'ai pas beaucoup travaillé avec le remoting donc excusez cette question plutôt rudimentaire, Si je dérive une classe d'une classe abstraite marquée comme [Serializable] (pour passer les données à travers un domaine), l'autre partie obtient-elle l'implémentation réelle? ? c'est-à-dire que le polymorphisme fonctionne sur le remoting/Serializable?Est-ce que [Serializable] fonctionne pour les classes héritées?

Je dois créer un clone de l'autre côté plutôt que d'opérer sur l'original si MarshalByRef est pas une option ...

Répondre

2

Oui lorsque vous désérialiser un type, le même type est reconstitué dans le domaine distant.

Vous pouvez contrôler le type désérialisé en utilisant le modèle IObjectReference:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iobjectreference.aspx

+0

Comment cela fonctionne-t-il? Je veux dire que je comprendrais comment Serializable fonctionne s'il instancie simplement le même type de l'autre côté et copie toutes les données avec lui, mais si j'ai une classe abstraite, disons BirdBase et l'autre côté hérite et passe un Bird: BirdBase pour envoyer le code actuel .. n'est-ce pas aussi un problème de sécurité? – Homde

+0

Les deux côtés doivent pouvoir accéder au type sérialisé et tout ce qu'il contient. Le désérialiseur tentera de charger le type final de l'objet qui a été sérialisé. En cas d'échec, une exception est levée. –

+0

Eh bien ça ne marche pas alors:/un côté ne connaît que la classe de base et l'autre l'ignore – Homde

3

La façon de voir plus facile que [Serializable] n'est pas hérité d'appuyer sur F12 et voir « Hérité = false » dans AttributeUsage. L'option la plus difficile est à RTFM au http://msdn.microsoft.com/en-us/library/bcfsa90a.aspx. Essentiellement, vous devez marquer toutes vos classes comme sérialisables et elles seront désérialisées correctement.

Questions connexes