1.在实体模型类前加上 [Serializable]
这个标签是类可以被序列化的特性,表示这个类可以被序列化。
2.什么叫序列化?
序列化是指将对象实例的状态存储到存储媒体的过程。
我们都知道对象是暂时保存在内存中的,不能用U盘考走了,有时为了使用介质转移对象,并且把对象的状态保持下来,就需要把对象保存下来,这个过程就叫做序列化,
3.什么叫反序列化?
就是再把介质中的东西还原成对象,把石子还原成人的过程。当反序列化已序列化的类时,将重新创建该类,并自动还原所有数据成员的值。在进行这些操作的时候都需要这个可以被序列化,要能被序列化,就得给类头[Serializable]特性。通常网络程序为了传输安全才这么做。
由正在进行序列化的对象所引用的所有对象都必须标记为 Serializable(请参阅基本序列化)。否则,当序列化程序试图序列化未标记的对象时将会出现异常。
4.序列化的按值封送
对象仅在创建对象的应用程序域中有效。
除非对象是从MarshalByRefObject 派生得到或标记为 Serializable,否则,任何将对象作为参数传递或将其作为结果返回的尝试都将失败。如果对象标记为 Serializable,则该对象将被自动序列化,并从一个应用程序域传输至另一个应用程序域,然后进行反序列化,从而在第二个应用程序域中产生出该对象的一个精确副本。此过程通常称为按值封送。
5.在设计新类时应考虑序列化。需要考虑的问题有:是否必须跨应用程序域来发送此类?是否要远程使用此类?用户将如何使用此类?也许他们会从我的类中派生出一个需要序列化的新类。只要有这种可能性,就应将类标记为可序列化。除下列情况以外,最好将所有类都标记为可序列化:所有的类都永远也不会跨越应用程序域。如果某个类不要求序列化但需要跨越应用程序域,请从 MarshalByRefObject 派生此类。
6.PartialClass,部分类或者分布类。允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中,在类声明前添加partial关键字即可。public partial class ClassName{}
7.Partial class 的应用情景
(1) 类型特别大,不宜放在一个文件中实现。
(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
(3) 需要多人合作编写一个类。
8.Partial 应用注意事项:
1>.使用partial关键字表明可在命名空间内定义该类、结构或接口的其他部分
2>.所有部分都必须使用partial关键字
3>.各个部分必须具有相同的可访问性,如public、private 等
4>.如果将任意部分声明为抽象的,则整个类型都被视为抽象的
5>.如果将任意部分声明为密封的,则整个类型都被视为密封的
6>.如果任意部分声明继承基类时,则整个类型都将继承该类
7>.各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口
8>.在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用
9>.partial修饰符只能出现在紧靠关键字class、struct 或interface前面的位置(枚举或其它类型都不能使用partial)。
10>.要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe 或.dll 文件)中进行定义。分部定义不能跨越多个模块;
9.模型绑定属性 [CurrentUser] ,当前用户。
10. public DateTime? InsertTime,在实体模型中的属性 在类型后面跟着一个 ? 表示该属性值可为 null .
11. 继承基类
public class PDService : CommonService
{
public PDService() :base("GameProfession", "ID") { }//给 CommonService 基类传参数,构造对象
public PDService(string t, string f) : base(t, f) { }
}
分析: base() 用来基类的传参,构造基类对象。
在上面的 CommonService 类中,有一个与类名一样的 公共构造函数,可以通过继承CommonService 的类,实例化 CommonService 对象。
12. List<T> 相当于键值对数组, foreach( var item in List<T>) 取值。