.Net学习 第2季08 C#面向对象 访问修饰符 序列化/反序列化 部分类 密封类

.Net 视频学习第2季 C#面向对象

 

面向对象 访问修饰符  序列化/反序列化 部分类 密封类

C#五种访问修饰符

1)可以修饰类的访问修饰符只有两个:public,internal(默认)

internal:只可以在当前程序集(先理解为项目)中访问

public:公共的

项目A访问项目B中的public类,首先要在项目A的引用中添加项目B,然后再项目A的文件中添加using 项目B该类的命名空间。

在同一个程序集当中,public和internal的访问权限一样。

2)修饰类的成员的访问修饰符:public,private,protected,internal,internal protected

同一个项目中,internal的访问权限比protected高,不同项目中,protected比internal高。

例如项目A中有internal类a,里边有protected成员data_a,有public类aa继承于a。在项目A中,可以通过aa的对象访问到成员data_a,因为aa继承于a并且data_a为protected;在项目B中可以访问到aa,因为aa是public类,但不能访问到a,因为a是internal类——但在项目B中却可以通过aa访问到data_a。实际上这是不允许的,因为这样的话子类暴露了父类的成员,因此子类的访问权限不可以高于父类的访问权限

internal protected即是只能在当前程序集中该类内部和该类子类内部访问。

 

序列化:将对象转换为二进制

反序列化:将二进制转换为对象

作用:传输数据

类:BinaryFormatter;(alt+shift+F10添加命名空间)

常用方法:Serialize(stream, object); Deserialize(stream);

serialize将指定对象XX(类A)转换为二进制流stream,无返回值;deserialize将二进制流stream转为对象,返回object类对象,注意要进行强制类型转换获得自己想要的类型对象

Person p = new Person();
p.Name = "Cyrus";
p.Age = 18;
BinaryFormatter bf = new BinaryFormatter();

using(FileStream fsWrite = new FileStream(@"路径", FileMode.OpenOrCreate,FileAccess.Write));
{
    bf.Serialize(fsWrite, p);
}

上述代码将Person类的对象p转为二进制流并写入到文件中。Serialize()包含了类似于fsWrite的fsWrite.Write()方法。

Person p;

using(FileStream fsRead = new FileStream(@"路径", FileMode.OpenOrCreate,FileAccess.Read));
{
    BinaryFormatter bf = new BinaryFormatter();
    p = (Person)bf.Deserialize(fsRead);
}

类似地上述代码将数据流中的二进制流转为为对象,注意deserialize()返回之后要进行强制类型转换。

 

关键字 partial 同一个命名空间中多个同名类在关键字class前用partial修饰,则这几个部分类共同构成一个完整的类。(多人开发)

 

关键字 sealed 关键字class前用sealed修饰,则这个类是密封类,不能被继承,但可以继承于其它类。

posted @ 2014-12-23 14:45  Cyrus Ho  阅读(204)  评论(0编辑  收藏  举报