学习笔记
-
ref: 方法的参数,对于变量,可以加上ref进行修饰,这样就相当于这个变量就具有了引用类型的特性,但是,不管是方法的调用还是声明,都需要加上ref的修饰符,而且,实参在传参的时候,是已经被赋值了的,可以是null。
-
out: 调用和声明方法的时候,都需要这个修饰符去修饰,而且一定是一个变量。在方法内部,在使用形参的时候,一定要在方法中被初始化了,才能使用,所以,无所谓实参是否有值。在方法的返回之前,一定要给这个形参赋值。
-
Params: 参数数组,Params int[] parms , 这样的参数,只能放在方法的最后一个参数上,意思是只接受int型的参数。
-
~classNmae(){}: 我们可以定义一个析构函数,但是,我们不能去显示调用,只有GC才能去调用析构函数。
-
IDisposable: 这个interface专门用于处理资源清理。我们在这个实现类中,需要写一个void Dispos方法,为了更好的处理这个资源清理的问题,我们可以定义一个flag来标记是否已经清理,清理成功以后,我们就调用GC.SuppressFinalize(this),这个方法就是告诉GC不要调用这个类的析构函数。若是,我们在调用Dispos的过程中发生了异常,我们就可以使用析构函数进行资源释放。
-
ReadOnly: 功能和const一样,只是const要在编译的时候确定值,而readOnly在运行的时候,才去确定值。
-
索引: 作用和属性一样,都是个类的字段赋值,但是,我们可以使用一个索引,达到了给所有字段getset。public string this[int index]{set{},get{}},index 对应这个字段的顺序,第一个字段对应索引0,以此类推。可以在set和get中根据不同的index,我们给不同的字段赋值。 索引也可以重载,必须有不同的参数列表。
-
访问器的访问修饰符: 1.要都存在get和set的时候,才能使用修饰符,修饰get和set方法。 2.只是修饰get和set中的一个。 3.访问器的权限要比成员的权限小。
-
Partial: 分布修饰符,可以修饰在类,方法, struct, interface;Function:在一个类中定义好这个方法,使用Partial修饰,不能使用权限修饰符,默认就是私有的,方法的返回值必须是void的: Partial void fun1(int x, int y);在别的类中进行这个方法的实现的时候,也要加上Partial这个修饰符。我们在调用这个方法的时候,还是调用的实现方法。
-
子类要覆盖父类的字段和方法: 都只要在同名的东西前面加上一个new就好,new string name;这样我们就可以覆盖父类的string name;
-
子类使用父类的字段和方法: 在子类的方法中使用父类: base.父类的东西。
-
Virtual: 父类可以调用子类的方法: 默认情况下,父类不能访问子类的方法,为达到父类可以访问子类的方法--虚方法,1. 保证父子类方法的返回值和方法名和参数列表的一致,2. 我们在父类使用virtual修饰方法,在子类使用override修饰方法,3. 相同的访问性, 4. 不能覆写static和非虚方法, 5. 方法,属性,索引,事件都能被virtual 这样父类的引用就可以访问子类的方法了;
-
最派生类:在BaseClass中使用了virtual,在它的子类,和子类的子类中都override这个方法,我们使用父类去调用的时候,调用的是最小的子类方法的实现。 若是,我们使用的是new(作用在子类的子类身上),则只会去找子类的子类的父类。
-
对父类构造函数的调用:public ziClass(int x, string name): Base(x, name){},若是调用的是父类的无参构造器,可省略。 还有就是调用自己类的其它构造器,然后那个构造器再去调用父类的构造器;public ziClass(int x) : this(x, "using default value"),可以给default value。
-
密封类:Sealed修饰class,作为独立的类,不能作为基类。
-
命名空间: using 导入;我们可以定义命名空间的别名和类的别名; using syst = System; using sc = Sytsem.Console;
-
结构体:也可以和类一样包含属性和方法,但是,结构体是值类型的。结构也可以使用new,但是new出来的还是把属性存放在栈里面。 结构体还是有构造函数,我们声明了显式构造函数,但是,默认的构造函数依然存在。 若是不适用new,无法直接使用属性,除非赋初值了。知道所有的数据成员赋值了,才能使用函数成员。 对属性也不能进行初始化操作。
-
枚举也是值类型。值的类型都是整形,可以在定义枚举的时候,声明值的类型是哪种值类型, enum enumName : ulong{}; 属性默认和枚举有着一样的访问性。
-
数组推断: var array = new [,] {{1,2,3}, {4,5,6}}; 只能指定第一维的值。
-
Sort对于自己定义类型是无法进行排序,需要类去实现IComparable接口。接口名称惯例以大写的I开头。权限修饰符默认就是public,不允许修改。
-
一个类如何去实现多个接口中含有相同的成员: 可以在类中,使用接口名.成员名的方式去给不同的接口,去实现不同的功能。这样实现功能以后,它就属于哪个接口的了,只能通过接口对象去使用。