2011-01-05 21 views
6

No he trabajado demasiado con la comunicación remota, así que disculpe esta pregunta bastante rudimentaria: si obtengo una clase de una clase abstracta marcada como [Serializable] (para pasar los datos a través de un dominio de aplicación), ¿el otro lado obtiene la implementación real anulada? ? es decir, ¿el polimorfismo funciona a distancia/Serializable?¿Funciona [Serializable] para clases heredadas?

Necesito crear un clon en el otro lado en lugar de operar en el original de manera MarshalByRef no es una opción ...

Respuesta

2

Sí al deserializar un tipo, del mismo tipo se reconstituye en el dominio remoto.

Puede controlar el tipo deserializado utilizando el patrón IObjectReference:

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

+0

¿Cómo funciona eso? Quiero decir, entendería cómo funciona Serializable si simplemente ejemplifica el mismo tipo en el otro lado y copia todos los datos con él, pero si tengo alguna clase abstracta, BirdBase y el otro lado heredan y pasan un Bird: BirdBase tendría para enviar el código real ... ¿no es una preocupación de seguridad también? – Homde

+0

Ambos lados deben poder acceder al tipo serializado y todo lo que contiene. El deserializador intentará cargar el tipo final del objeto que se serializó. Si falla, se lanza una excepción. –

+0

Bueno, eso no funciona entonces:/un lado solo sabe de la clase base y el otro lo anula – Homde

3

La forma más fácil de ver que [Serializable] no se hereda es presionar F12 y ver "heredadas = false" en AttributeUsage. La opción más difícil es RTFM al http://msdn.microsoft.com/en-us/library/bcfsa90a.aspx.

Esencialmente necesita marcar todas las clases como serializables y se deserializarán correctamente.

Cuestiones relacionadas