构造函数
构造函数
构造函数的特殊写法,在构造函数后:this()调用其他重载构造函数,目的是实现代码的复用。
析构函数
语法:
~类名
{
}
作用:
当引用类型的堆内存被回收时,会调用析构函数
垃圾回收机制GC
GC回收原理:
C#在分配堆内存时会将堆内存划分为0代内存,1代内存,2代内存,除过83kb以上的对象直接存在2代内存中,其他对象都会优先存储在0代内存中。
当代内存满后就会调用垃圾回收,执行逻辑为:查找可以回溯到调用处的所有对象并标记,清空未标记对象并将标记的对象移向下一代内存中。
注意:如果1代内存满了,会连同0代内存一起垃圾回收,2代内存垃圾回收是同理。
GC手动调用:
使用GC类的静态方法Collect来手动调用。
内部类和分部类
内部类(鸡肋,基本不用):
概念:
在类中在声明一个类。
特点:
使用时要用包裹者点出自己。
作用:
可以体现两个类之间的紧密联系。
注意:
访问修饰符作用很大。
内部类的使用目的现在常用类与类之间的关联关系实现。
分部类:
概念:
把一个类分成几个部分声明。
关键字:
partial
作用:
分部描述一个类,常用在大型项目多个人写同一个类的情况。
注意:
分部类可以写在多个脚本文件中。
分部类的访问修饰符要一致。
分部类中不能有重复成员。
分部方法(基本不用):
概念:
将方法的声明和实现分离。
特点:
不能加访问修饰符,默认是私有。
只有在分部类中声明。
返回值只能时void。
可以有参数但不用out关键字。
局限性大,现在常用抽象类和接口来代替使用。
索引器
主要作用:
可以让我们以访问数组的方式来访问对象中的数组。索引器可以看作类中数组的属性
适用性:
适用于在类中有数组变量时使用,可以方便的访问和进行逻辑处理
写法:
private Person[] friends;
public Person this[int index]
{
get
{
return friends;
}
set
{
friends[index] = value;
}
}
注意:
可以重载。重载时可以将this看成名称处理。
结构体中也支持索引器。
拓展方法
概念:
为现有的非静态的变量类型添加额外的方法。
作用:
提升程序拓展性
不需要再在对象中重新写方法
不需要继承来添加方法
可以为别人封装的类型写额外的方法
特点:
静态类中的静态方法
第一个参数代表拓展的类型
第一个参数前面一定要加this
注意:
可以有返回值和n个参数
运算符重载
概念:
让自定义类和结构体能够使用运算符。
关键字:
operator,此关键字的位置位于类名的位置,可以看作operator和运算符在一起充当了类名。
特点:
运算符重载一定是一个公共的静态方法。
逻辑处理自定义。
参数列表一定有一个本类或者本构造体的参数
作用:
让自定义类和结构体对象可以进行运算,可以通过运算符的重载来使得一些运算符在特殊的类中获得全新的运算含义。
注意:
条件运算符需要成对实现。
一个符号可以多个重载。
不能使用ref和out。
例子:
一般都会在内部new一个结果对象来储存结果并返回。
不可重载的运算符:
逻辑与(&&)逻辑或(||)
索引符[]
强转运算符()
点.
三目运算符?:
赋值符号=