A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 如远行客 中级黑马   /  2013-12-31 11:44  /  1918 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 如远行客 于 2013-12-31 20:50 编辑

请问可序列化的类是不是不能被继承??

4 个回复

倒序浏览
C#通过关键字sealed可以申明一个类型不可被继承,设计中应该为所有不被作为基类的类型添加sealed关键字,以避免各种来自继承的易产生的错误 .

继承是面向对象思想中非常重要的一个部分,在各种面向对象的语言中都有实现,继承能够带给程序灵活性和可扩展性。但同时继承也存在一些问题,在设计一个会被继承的类型时,往往需要反复斟酌考虑再三,下面是常见的一些类型被继承时容易产生的问题:
· 为了让派生类型可以顺利地序列化,非叶子类需要实现恰当的序列化方法。
· 当非叶子类实现了ICloneable等接口时,意味着所有派生类被迫需要实现接口中的相同方法。
· 非叶子类的构造方法不能调用虚方法,也不应该把this指针传递给其他对象和方法。
设计一个可以被继承的类型相对复杂得多,而且更容易产生不能预计的问题。所以C#提供了一个关键字用以申明类型不可被继承:sealed。任何被sealed修饰的类将不能被继承,C#编译器将在编译阶段保证这一机制。
设计时任何没有派生需要的类型都应该被显式地添加sealed关键字,这是避免由继承带来不可预计问题的最有效办法。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
序列化主要目的是保存对象的状态,以便可以在需要时重新创建对象。相反的过程称为反序列化。 保证被继承类也能序列化就可以了

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
序列化后就是单纯的数据呈现形式了,是运行时的一个概念。而继承的是另一个概念,是在编译过程中的体现。
回复 使用道具 举报
其主要目的是保存对象的状态,以便可以在需要时重新创建对象。相反的过程称为反序列化。 保证被继承类也能序列化就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马