2011-01-05 15 views
6

Ich habe nicht viel mit Remoting gearbeitet, also entschuldige diese eher rudimentäre Frage. Wenn ich eine Klasse von einer abstrakten Klasse abstamme, die als [Serializable] gekennzeichnet ist (um die Daten über eine appdomain zu übergeben), erhält die andere Seite die tatsächliche überschriebene Implementierung ? dh funktioniert Polymorphismus über Remoting/Serialisierbar?Funktioniert [Serializable] für vererbte Klassen?

Ich brauche einen Klon auf der anderen Seite zu erstellen, anstatt auf der Original-Betrieb so MarshalByRef ist keine Option ...

Antwort

2

Ja, wenn Sie einen Typen deserialisiert wird die gleiche Art in der Remotedomäne gestellt.

Sie die entserialisierten Typ unter Verwendung des IObjectReference Muster steuern:

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

+0

Wie funktioniert das? Ich meine, ich würde verstehen, wie Serializable funktioniert, wenn es einfach den gleichen Typ auf der anderen Seite instanziiert und alle Daten mit ihm kopiert, aber wenn ich eine abstrakte Klasse habe, sagen BirdBase und die andere Seite erbt und übergibt eine Bird: BirdBase den eigentlichen Code zu senden ... ist das nicht auch ein Sicherheitsrisiko? – Homde

+0

Beide Seiten müssen auf den serialisierten Typ und alle enthaltenen Daten zugreifen können. Der Deserializer wird versuchen, den endgültigen Typ des serialisierten Objekts zu laden. Wenn dies fehlschlägt, wird eine Ausnahme ausgelöst. –

+0

Nun, das funktioniert dann nicht:/Eine Seite kennt nur die Basisklasse und die andere überschreibt sie – Homde

3

Der einfachste Weg, um zu sehen, dass [Serializable] nicht geerbt Presse F12 ist und sehen „geerbt = false“ in Attributeusage. Die härtere Option ist RTFM unter http://msdn.microsoft.com/en-us/library/bcfsa90a.aspx.

Im Wesentlichen müssen Sie alle Ihre Klassen als serialisierbar markieren und sie werden ordnungsgemäß deserialisiert.

Verwandte Themen