WEB开发网
开发学院软件开发C语言 Effective C# 原则25: 让你的类型支持序列化 阅读

Effective C# 原则25: 让你的类型支持序列化

 2009-02-19 08:16:24 来源:WEB开发网   
核心提示:对象的持久是类型的一个核心功能,这是一个在你忽略对它的支持以前,Effective C# 原则25: 让你的类型支持序列化,没有人会注意到的基本元素之一, 如果你的类型不能恰当的支持序列化,你会得到一个运行时错误,这只是因为对OtherClass的内部结构不清楚,那么对于把你类的做为基类或者成员的开发人员来说,你会给他

对象的持久是类型的一个核心功能。这是一个在你忽略对它的支持以前,没有人会注意到的基本元素之一。 如果你的类型不能恰当的支持序列化,那么对于把你类的做为基类或者成员的开发人员来说,你会给他们增加很多的工作量。当你的类型不支持序列化时,他们不得不围绕这工作,自己添加实现这个标准的功能。而对于不能访问类的私有成员的开发人来说,恰当的实现你的类型的序列化是不太可能的。如果你的类型不支持序列化,那么对于你的用户来说,想再要实现实它是很困难或者根本就不可能的事。

取而代之的是,为你的实际类型添加序列化。对于那些不用承载UI元素,窗口,或者表单的类型来说这是有实际意义的。感觉有额外的工作是没有理由的,.Net的序列化是很简单的,以至于你没有任意的借口说不支持它。在多数情况下,添加Serializable特性就足够了:

[Serializable]
public class MyType
{
 private string _label;
 private int _value;
}

只添加一个Serializable特性就足以让它可以序列化,是因为这它的成员都是可序列化的:string和int都是.Net序列化支持的。无论是否可能,都要给类型添加序列化支持是很重要的,原因在你添加另一个类做为新类的成员时就很明显了:

[Serializable]
public class MyType
{
 private string   _label;
 private int     _value;
 private OtherClass _object;
}

这里的Serializable特性只有在OtherClass也支持序列化时才有效。如果OtherClass不支持序列化,那么你在序列化MyType时,因为OtherClass对象也在里面,你会得到一个运行时错误。这只是因为对OtherClass的内部结构不清楚,而使序列化成为不可能。

1 2 3 4 5 6  下一页

Tags:Effective 原则 类型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接