初学C#,对很多概念都弄不清楚,特地写此总结:
面向对象:
- 找个对象帮你做事;
- 把出现在每个过程中事物,对象一般是被动的那个;
- 屏蔽所有人的差异,写出通用的代码;
对象:一定是经过实例化之后的具体事物,看得见,摸得着。
面向对象的基础为抽象类,类的基本组成有:字段、属性、方法。
字段(Field):用于保存类中的数据,字段命名应该以下划线开头;
属性(Properties):保护、限定字段,对字段的赋值和取值进行限定;
方法(Method):类的作用、方法,执行的操作;
属性的本质就是两个方法:对象具有的各种特征,只是一个中间变量,本身并不保存任何数据,在对外输出时,应该使用属性;
- set():用于控制赋值
- get():用于控制取值
类:把多个对象共同具有的属性和方法抽象出来,进行封装,类就是模子,确定了对象应该具有的属性和方法。
静态类与非静态类
- 在非静态类中,既可以有静态方法/字段/属性,也可以有非静态方法/字段/属性;
- 非静态方法,需要先实例化类;
- 静态方法,都需要类名.方法名进行调用,而不能采用其他修饰字符;
- 静态类/方法/函数中,只允许出现静态字段/属性等,而不允许出现实例字段/属性等;
使用
- 如果你想要你的类当做一个工具类,这个时候可以考虑写成静态类;
- 静态类在整个资源项目中资源共享(堆,栈,静态存储区域),只有在程序结束之后,静态类才会释放资源,会非常消耗资源,尽量少用;
方法中才有小括号,创建完对象,先执行构造函数;
类的初始化:创建类,并对类的各个属性进行赋值的过程;
类中的构造函数,用来创建对象,并且可以在构造函数中对对象进行初始化(给对象的每个属性依次进行赋值)
- 构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用;
- 构造函数可以有参数,new对象的时候传递参数即可;
- 如果不指定构造函数,则类中有一个默认的无参构造函数;
- 如果制定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写;
- 构造函数可以重载,也就是多个参数不同的构造函数(一样的函数名字,但是参数的个数不一样);
- 认识类图
关键字:new
- 在内存中开辟一块空间;
- 在开辟的空间中创建对象;
- 调用对象的构造函数进行初始化对象(要求构造函数的修饰符必须为public);
关键字:this
- 代表当前的类
- 在类当中显示的调用本类的构造函数 :this
关键字:base
- 父类的构造函数要优先于子类的构造函数;
- 调用基类上已经被其他方法重写的方法;
- 指定创建派生类实例时应调用的基类构造函数;
- 基类访问只能在构造函数、实例方法或实例属性访问器中进行;
- 静态方法中使用base关键字是错误的
析构函数
- 析构函数(destructor)与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后”的工作(例如在建立对象时用new开辟了一片空间,应该退出前在析构函数中用delete释放)。
- 析构函数名也应该与类名相同,只是在函数名前面加一个波浪符~,例如~stu(),以区别构造函数。它不能带任何参数,也没有返回值(包括void类型)。一个类只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以许多简单的类中没有用显示的析构函数。
- 在C#中使用解构器需要记住如下几点:
- 一个类只能有一个解构器;
- 解构器不能被继承或重载;
- 解构器不能被调用,他们是自动被(编译器)调用的;
- 解构器不能带修饰或参数
对一个类的字段进行限制可以从set/get/构造函数进行;
在类的方法中输出属性时,应该加上this,因为可能会受到局部变量的影响;
快速引用命名空间:ALT+SHIFT+F10
疑问:
- 如果存在构造函数,在Main函数中,我仍然采用属性进行赋值,会怎么样呢?
- 重新赋值的一个过程吧?
- 属性设置为只读,是否还可以使用构造函数进行赋值?