1、面向对象编程的目的
用人类思维的方式编写代码,并交给计算机执行
2、面向对象三大特征
封装、继承、多态
3、什么是类?什么是对象?类和对象的区别?
a)类是模具,创建对象的模具,抽象的。
类是一种数据类型,用户自定义的数据类型(定义了要开辟多大内存)
类组成:字段(类中的变量,如,int num、string name等)、属性、方法、构造函数等
b)对象是具体的,是类的具体实例。对象具有属性(特征)和方法(行为)
注:类的成员变量存在于堆空间,方法中的局部变量存在于栈空间
成员变量不必须赋值,局部变量必须赋值
4、C#中的4个访问修饰符
public: 可以在任何地方被访问
private: 只能在本类中被访问
protected: 与private类似,子类可以访问父类的protected成员,但不能访问private成员
internal: 只能在本项目中被访问
定义一个类时,不允许使用private、protected修饰符,它的默认访问修饰符是internal。类的成员变量默认修饰符是private
5、属性 (属性的本质-就是两个方法)
a)属性:一个具有get/set方法的变量,这个变量用于保护类中的一个私有变量不会受到非法的修改,限制了该成员变量的访问规则。
在属性中,使用value来存储用户赋的值
b)属性存在的意义:是为了保护与之相对应的字段.保证对字段的读取和赋值符合要求。
c)属性可分为:读写、只读、只写(get和set访问器)
d)将类中的某个私有变量设置为属性:
6、类的实例化
语法: 类 实例名 = new 类();
在初始化类对象的时候,类的成员会被赋予的值: 数字类型初始化为 0 / 0.0;string类型初始化成 null;char类型初始化为 \0
7、构造函数
它的名字必须与类名完全相同,在创建对象时用来初始化对象,为对象成员赋初值,是一种特殊的方法。
(1)构造函数的特点:
a)没有返回值
b)函数名与类名完全相同
c)类里若无声明构造函数,默认会创建一个无参的构造函数
d)构造函数可以重载,也就是有多个参数不同的构造函数
(2)构造函数的调用顺序:
当我们实例化子类的对象时,会先创建子类对象,然后准备调用子类的构造函数。执行子类构造函数之前,会先创建父类对象,并执行父类构造函数,最后再执行子类构造函数。
注意:一旦我们写了一个构造方法后,系统原先默认给我们添加的那个无参数得构造方法就不会再为我们添加了。
在工作中拿到一个类后,首先要关心的是这个类有哪些构造方法,这些方法的参数是什么,怎么用的。
8、析构函数
与构造函数相对应的是析构函数,但在C#中几乎不使用析构函数,因为C#中有了一种垃圾回收机制。
8、this关键字 用来区别局部变量和成员变量重名问题
a)表示当前类,作为当前类的对象,可以调用类中的成员。this.成员(调用成员,自己)
b)调用本类的其他构造函数。:this()(调用构造函数,自己)
注:this代表的是保存当前对象的堆地址
c)this代表其所在函数所属对象的引用,即哪个对象调用this所在的函数,this就代表哪个对象本身
注意:不能将关键字this用在静态构造函数和静态函数成员中,也不能在其它地方使用
9、base关键字 专门用来在子类访问父类成员
base.标识符:“.”调用父类同名属性、同名函数、构造函数
a)base
调用父类中非私有的成员(调用成员,父类)base点不出子类独有成员。
调用父类中的构造函数(调用构造函数,父类)
当调用从父类中继承过来的成员的时候,如果子类没有重写则this.成员;与base.成员,没有区别。
b)如果子类重写了父类成员,则this.成员;调用的是子类重写以后的。base.成员;调用的依然是父类的成员。
c)子类构造函数默认调用父类的无参构造函数;
d)如果父类没有无参构造函数,则必须指明调用父类哪个构造函数
注:this和base的访问
10、命名空间就相当于一套虚拟的文件夹
命名空间里面的类,就相当于是文件夹里的文件
11、封装
(1)概念:隐藏对象的字段和功能的实现细节,只对外提供公共的访问方式
(2)类和对象本身就是封装的体现。
(3)属性封装了字段、方法和字段封装成了一个对象、将一堆业务单一的代码封装到了一个方法中、将一个功能封装到了几个类中、将一些具有相同功能的代码封装到了一个程序集中(dll、exe),并且对外提供统一的访问接口。(属性名、方法名等。)