.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修饰,则这个类是密封类,不能被继承,但可以继承于其它类。