C#
序列化和反序列化
序列化:将Object缓存为数据,参考游戏存档
反序列化:序列化的逆过程,参考游戏读档
-
把对象保存到本地,下次运行程序时恢复这个对象。
-
把对象传送到网络的另一台终端上,然后在此终端还原这个对象。
-
复制系统的粘帖板中,然后用快捷键Ctrl+V恢复这个对象。
[XmlIgnore] 可以指明某公开成员不参与序列化及反序列化过程。
执行序列化需要满足以下要求:
— 类必须有一个公共的无参构造函数;public MyClass()
— 要反序列化的字段和属性必须公开;public
— 不含有循环引用;
— 不含有不可序列化的成员变量;
委托和事件
委托可以增加程序的扩展性,减少if…else的逻辑判断;
通过+=将方法绑定到委托,-=取消绑定。
- 委托是一种类型
- 委托是一种类型与返回值相同函数的链表
- 委托使用+=,=,-=三个符号操作链表里的函数
- 调用委托就会依次调用委托链表里的所有函数
- 委托返回值默认是最后一个添加的函数返回值
1、委托的本质就是一个密封类,这个类继承了MulticastDelegate(多播委托)
2、委托的构造函数,有两个参数,一个类型是IntPtr,用来接收方法的,如下图:
3、可以同步调用(Invoke),也可以异步调用 (BeginInvoke、EndInvoke)
注:
1、多播委托:一个委托可以代表多个相同签名的方法,当委托被调用时,这些方法会依次执行
2、IntPtr表示窗口的时候,叫它“句柄”,表示方法时,叫它“指针”
3、异步调用:会产生一个线程,异步执行
事件是一种特殊的委托
首先明确关键字event在实例化委托时使用而非定义委托时使用。
委托的定义和使用
delegate void func();
static func l;
事件的定义和使用
delegate void func();
static event func l;
事件需要和类结合起来,定义事件的类才可以调用事件,委托将函数链接与取消或者触发,可以自由使用。事件限定了只能由声明时间的类来触发。
c#值类型和引用类型
两者存储方式不同,所以有copy的区别(深拷贝和浅拷贝)
常见的深拷贝的方式:
。事件限定了只能由声明时间的类来触发。
c#值类型和引用类型
两者存储方式不同,所以有copy的区别(深拷贝和浅拷贝)
常见的深拷贝的方式:
反射、序列化和反序列化(二进制\XML)