2011-01-05 2 views
6

Я не много работал с удалением, поэтому извините этот довольно элементарный вопрос: если я получу класс из абстрактного класса, помеченного как [Serializable] (для передачи данных через appdomain), делает ли другая сторона реальную переопределенную реализацию ? т.е. работает ли полиморфизм над удаленным/сериализуемым?Работает ли [Serializable] для унаследованных классов?

мне нужно создать клон на другой стороне, а не работать на оригинале так MarshalByRef не вариант ...

ответ

2

Да, когда вы десериализации типа, тот же тип разводится в удаленном домене.

Вы можете управлять десериализованное типа с помощью шаблона IObjectReference:

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

+0

Как это работает? Я имею в виду, что я бы понял, как работает Serializable, если он просто создает один и тот же тип с другой стороны и копирует все данные вместе с ним, но если у меня есть какой-то абстрактный класс, то BirdBase и другая сторона наследуют и пропускают Bird: BirdBase. для отправки фактического кода .. разве это не проблема безопасности? – Homde

+0

Обе стороны должны иметь доступ к сериализованному типу и всему содержащемуся. Deserializer попытается загрузить конечный тип объекта, который был сериализован. Если это не удается, генерируется исключение. –

+0

Ну, это не работает:/одна сторона знает только базовый класс, а другой переопределяет его – Homde

3

Самый простой способ увидеть, что [Serializable] не передается по наследству, это нажать F12 и увидеть «Наследуется = ложь» в AttributeUsage. Более сложным вариантом является RTFM на http://msdn.microsoft.com/en-us/library/bcfsa90a.aspx.

По существу вам необходимо отметить все классы как сериализуемые, и они будут десериализованы должным образом.

Смежные вопросы