使用struct关键字来定义1个结构. 级别与类保持一致 写在命名空间下面.结构中可以定义 字段 属性 方法 构造函数 也可以通过new关键字来创建对象.
1. 结构中的字段不能赋初始值.
2. 无参数的构造函数无论如何C#编译器都会自动生成,所以我们不能为结构定义1个无参数的构造函数.
3. 在构造函数中必须要为结构体的所有的字段赋值.
4. 在构造函数中为属性赋值 不认为是对字段赋值 因为属性不一定是去操作字段.
5. 结构是1个值类型的.在传递结构变量的时候 会将结构对象里的每1个字段复制1份然后拷贝到新的结构变量的字段中.
6. 不能定义自动属性 因为自动属性会生成1个字段 而这个字段必须要求在构造函数中 但是我们又不知道这个字段叫声明名字.
7. 声明结构体对象可以不使用new关键字.但是这个时候结构体对象的字段没有初始值.因为没有调用构造函数.而构造函数中必须为字段赋值
所以通过new关键字创建结构体对象 这个对象的字段就有默认值了.
8. 当我们要表示1个轻量级的对象的时候 就可以定位结构 以提高速度. 根据传值的影响来选择 希望传引用就定义为类 希望传拷贝就定位为结构.
托管代码.被CLR管理的代码
非托管代码.不被CLR管理的代码
应用程序域:
分配在栈空间的变量 一旦执行完其所在的作用域 这个变量就会被CLR立即回收.
分配在堆里面的对象 当没有任何变量引用它的时候,这个对象就被标记为"垃圾对象",等待垃圾回收器回收.
GC会定时的清理堆空间中的垃圾对象.
GC清理垃圾对象的频率 程序员无法决定 CLR会自动控制.
当1个对象被标记为"垃圾"的时候,这个对象不一定会被立即回收.
GC.GetGeneration(p); 得到指定的对象所在的代
GC.MaxGeneration;返回代数.
GC.Collect(); 立即让垃圾回收器对所有的代进行回收.
GC.Collect(int gen); 对指定的代立即进行垃圾回收.
析构函数
不能有访问修饰符 不能有参数
在对象被垃圾回收器回收的时候 析构函数被GC自动调用.
执行一些清理善后的操作的时候,
~Person()
{
Console.WriteLine("我是析构函数.");
}