2011-01-05 3 views
6

Nie pracowałem za dużo z Remotingiem, więc wybaczę to raczej podstawowe pytanie: Jeśli wyprowadzę klasę z abstrakcyjnej klasy oznaczonej jako [Serializable] (do przekazywania danych przez appdomain), czy druga strona uzyska rzeczywistą implementację overriden ? tj. czy polimorfizm działa nad zdalnym/Serializable?Czy [Serializable] działa dla dziedziczonych klas?

muszę stworzyć klona po drugiej stronie zamiast działających na oryginale tak MarshalByRef nie jest rozwiązaniem ...

Odpowiedz

2

Tak po deserializowania typ, ten sam typ jest odtworzony w domenie zdalnej.

Można kontrolować rozszeregować typ za pomocą wzoru IObjectReference:

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

+0

Jak to działa? Rozumiem, jak działa Serializable, jeśli po prostu tworzy ten sam typ po drugiej stronie i kopiuje z nim wszystkie dane, ale jeśli mam jakąś abstrakcyjną klasę, powiedzmy, że BirdBase i druga strona dziedziczą i przekazują Bird: BirdBase, wysłanie rzeczywistego kodu. Czy nie jest to również kwestia bezpieczeństwa? – Homde

+0

Obie strony muszą mieć dostęp do typu serializowanego i wszystkiego, co zawiera. Deserializator spróbuje załadować ostateczny typ obiektu, który był serializowany. Jeśli się nie powiedzie, zostanie zgłoszony wyjątek. –

+0

Cóż, to nie działa wtedy:/​​jedna strona zna tylko klasę podstawową, a druga nadpisuje – Homde

3

Najprostszym sposobem, aby zobaczyć, że [Serializable] nie jest dziedziczona, to nacisnąć F12 i zobaczyć „dziedziczone = false” w AttributeUsage. Trudniejszą opcją jest RTFM pod adresem http://msdn.microsoft.com/en-us/library/bcfsa90a.aspx.

Zasadniczo musisz zaznaczyć wszystkie klasy jako nadające się do serializacji i zostaną one poprawnie przekształcone.