2011-01-05 30 views
6

Tôi đã không làm việc nhiều với remoting vì vậy xin lỗi câu hỏi này khá thô sơ, Nếu tôi lấy được một lớp từ một lớp trừu tượng được đánh dấu là [Serializable] (để truyền dữ liệu trên một appdomain), phía bên kia có thực hiện overriden thực tế ? tức là không đa hình làm việc trên remoting/Serializable?Có [Serializable] hoạt động cho các lớp được kế thừa không?

tôi cần phải tạo ra một bản sao ở phía bên kia chứ không phải là hoạt động trên ban đầu để MarshalByRef không phải là một lựa chọn ...

Trả lời

2

Có khi bạn deserialize một loại, cùng loại được tái trong lĩnh vực hẻo lánh.

Bạn có thể kiểm soát loại deserialized bằng cách sử dụng mô hình IObjectReference:

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

+0

Cách thức hoạt động? Ý tôi là tôi sẽ hiểu cách Serializable hoạt động như thế nào nếu nó đơn giản khởi tạo cùng kiểu ở phía bên kia và sao chép tất cả dữ liệu với nó, nhưng nếu tôi có một số lớp trừu tượng nói BirdBase và phía bên kia kế thừa và vượt qua một Bird: BirdBase nó sẽ có để gửi mã thực tế .. không phải là một mối quan tâm an ninh không? – Homde

+0

Cả hai bên phải có khả năng truy cập loại được tuần tự hóa và tất cả các bên chứa. Trình khử giải sẽ cố gắng tải loại cuối cùng của đối tượng đã được tuần tự hóa. Nếu nó không thành công, một ngoại lệ được ném ra. –

+0

Vâng, điều đó không hoạt động sau đó:/một bên chỉ biết về lớp cơ sở và một bên ghi đè lên nó – Homde

3

Cách đơn giản nhất để thấy rằng [Serializable] là không được thừa kế là nhấn F12 và xem "Kế thừa = false" trong AttributeUsage. Tùy chọn khó hơn là RTFM tại http://msdn.microsoft.com/en-us/library/bcfsa90a.aspx.

Về cơ bản, bạn cần phải đánh dấu tất cả các lớp của bạn là có thể tuần tự hóa và chúng sẽ được deserialized đúng cách.

Các vấn đề liên quan