请问在一个class前加 [Serializable] 是什么意思?

thankuu 2003-07-19 03:36:11
就好象以下,在WBMsgDrawEllipse前面有 [Serializable],表示什么意思? 先谢谢了.

[Serializable]
public class WBMsgDrawEllipse : WBMessage
{
//Implement the abstract property
private const WHITEBOARD_MESSAGE_TYPE m_enMsgType = WHITEBOARD_MESSAGE_TYPE.enWBEllipse;
public override WHITEBOARD_MESSAGE_TYPE MessageType
{
get
{
return m_enMsgType;
}
}
public Point m_Pt;
}
...全文
294 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhixuan 2003-07-19
  • 打赏
  • 举报
回复
设置一个属性(Attribute)对紧接着的定义的东西一个描述在编译的时候对其起一定的作用
[Serializable]是SerializableAttribute类的一个用法表示对下面的类可以序列化,只有这样你自己定义的一个类或属性等信息才可以用相应的方法进行序列化,保存到相应的文件中,后面还可以进行反序列化从而把文件中的数据进行对象化(即把文件中的数据生成一个类对象或属性等信息
fourfire29 2003-07-19
  • 打赏
  • 举报
回复
设置类的属性
jcaomao 2003-07-19
  • 打赏
  • 举报
回复
在应用域或网络 之间传递数据的时候,如果想让对方明白这个类的数据类型就的序列化这个类,然后对方反序列化就可以用这个类了。

通常 websevice 或 remoting 经常用到。

不过要注意,这个类中不能包含 对本地信息的引用,比方说操作文件之类的。
qiujinwen 2003-07-19
  • 打赏
  • 举报
回复
看看下面的文章你就懂了....
http://www.csdn.net/develop/Read_Article.asp?Id=19546
http://www.csdn.net/develop/Read_Article.asp?Id=19564
http://www.csdn.net/develop/Read_Article.asp?Id=19590
http://www.csdn.net/develop/Read_Article.asp?Id=19591
http://www.csdn.net/develop/Read_Article.asp?Id=19675
http://www.csdn.net/develop/Read_Article.asp?Id=19721
Kain 2003-07-19
  • 打赏
  • 举报
回复
gz
thankuu 2003-07-19
  • 打赏
  • 举报
回复
两位,谢谢你们的回答.

其实我是不明白为什么要在一个class前加[...],加这个 [...]是什么意思? 起什么作用的? 就好象我举的例子,这个 [Serializable] 对它下面的class 起什么作用?
雪狼1234567 2003-07-19
  • 打赏
  • 举报
回复
Serialization的概念


Serialization是.NET中一种实现对象持久性(Persistent)的机制。它是一个将对象中的数据转换成一个单一元素(通常是Stream)的过程。它的逆过程是Deserialization。Serialization的核心概念是将一个对象的所有数据看作一个独立的单元。

一般说来,在两种情况下非常需要Serialization:1)当我们希望能够将对象当前的状态完整地保存到存储介质中,以便我们以后能够精确地还原对象时;2)当我们希望将对象从一个应用程序空间(Application domain)传递到另一个应用程序空间时。例如,Windows Form程序就是利用Serialization机制来实现剪贴板的copy & paste的。

.NET Framework支持两种类型的Serialization:Shallow Serialization和Deep Serialization。

所谓Shallow Serialization是将对象的可读写(read-write)属性的值转换成字节流,而对象内部的数据(没有通过read-write属性暴露出来的数据)则不被转换。XmlSerializer以及Web Services就使用这种技术。

Deep Serialization比Shallow Serialization更加彻底,因为它是将存储在对象私有变量里的实际值拷贝到字节流里。而且Deep Serialization还将serialize整个object graph。也就是说,如果你的对象持有其他对象的引用,或者其他对象引用的集合,那么所有这些对象都将被Serialize。BinaryFormatter和SoapFormatter以及.NET Remoting都使用Deep Serialization技术,它甚至被有限地用于LosFormatter来产生存储在Web Form页中的状态数据。

本文将着重于Deep Serialization。


Serialization的过程


.NET Framework通过Reflection提供自动Serialization的机制。当一个对象被序列化(Serialized)的时候,它的类名,Assembly,以及类实例的所有数据成员都将被写入存储介质中。Serialization引擎保持对所有已经被序列化的对象引用的追踪,以确保相同的对象引用最多只被序列化一次。

通常,一个Serialization过程会由formatter(例如BinaryFormatter)的Serialize方法引发。对象的Serialization过程按照以下规则进行:

1、 检测以确保formatter是否拥有一个代理选择器(surrogate selector)。如果有,检查代理选择器是否持有给定的对象类型。如果有,ISerializable.GetObjectData被调用。

2、 如果formatter没有代理选择器,或者代理选择器没有对象类型,检查对象是否被用Serializable属性标记。如果没有,则抛出SerializationException异常。

3、 如果对象被标记为Serializable,检查对象是否实现了ISerializable接口。如果实现了此接口,则GetObjectData被调用。

4、 如果对象没有实现ISerializable接口,则使用默认的序列化策略,来序列化没有用NonSerialized属性标记的域。
qiujinwen 2003-07-19
  • 打赏
  • 举报
回复
序列化
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2003-07-19 03:36
社区公告

让您成为最强悍的C#开发者