1.值类型的引用类型
a) 值类型:它的间接父类或者直接父类是ValueType
b) 引用类型:它的间接或者直接父类没有ValueType
c) 值和引用类型在内存中的地址分配
d) 值和引用类型做为参数传递时的特点
e) 注意事项:
i. 值类型的顶级父类是object,但是中间某一个类型是ValueType.但是引用类型的直接或者父类中没有ValueType.
ii. 值类型为什么没有派生类:是因为值类型在内存中直接存储 值
iii. 参数传递的本质
1.都是传递栈空间中存储的内容做副本传递
2.值类型在栈空间里面存储存储 值
3.引用类型存储是堆的引用地址
4.值类型做为参数传递不会影响原始的实参值
5.引用类型的形参值的修改会影响原始的实参值
6.添加ref/out,传递就是栈空间所分配的地址
7.ref并没有重新开辟空间。
8.如果参数仅仅是ref和out不一样,就不能构成重载
9.ref做为参数传递需要传递一个已经存在的已经赋值的实参值,而out不需要。但是在out参数传递的时候,在方法体中必须重新赋值。
10.如果单纯的需要方法返回一个用户预先不知道的值,那么可以使用out,如果是需要将用户的原始值做修改之后再提供给用户使用,那么就使用ref
2.面向对象的概念
a) 什么是面向对象:一种思考方式,采用最合理的方式实现需求
b) 什么是类。类是用来描述现实对象的,是抽象的概念,是模型
c) 如何从现实对象中抽象出类,如何确定类所需要描述的特征和行为
i. 任何一个现实对象都可以从特征和行为两个方面进行描述
ii. 根据具体的业务需求描述出现实对象中特征和行为
d) 什么是对象:具体的存在
e) 类和对象的区别:
f) 使用代码创建类
g) 如何理解类是一种数据类型,如何使用
i. 创建一个类的对象需要开辟存储空间
ii. 得到一个对象就可以得到这个对象的所有成员,可以使用其中的公共成员。
h) 类的实例化:new
i) 类的访问修饰符:
j) 使用过程中的注意事项:
i. 创建类的对象的时候为什么可以开辟内存空间:因为类的成员的默认值
ii. 如果类的成员的字符串类型那么空间如何开辟:字符串类型的成员只需要存储一个指向字符串拘留池中的引用,这个空间大小是固定的。
iii. 类的成员的默认访问修饰符是private,说明只有在当前类中可以使用,在类的外部不能使用
iv. 类的默认访问修饰符是internal,说明当前程序集中可以使用。
2. 封装:什么是封装,封装的概念:
a) 我们学习过那些封装
i. 属性封装
ii. 方法封装
iii. 类的封装
iv. 程序集的封装:
4.属性
a) 类的成员字段使用public修饰的问题:造成类的外部可以自由使用这个字段,有可能造成值不合理,也起不到保护字段的作用。
b) 如何创建方法实现赋值的合理性
a) 创建get方法获取数据
b) 创建set方法进行字段的赋值
c) 使用属性简化赋值合理化的过程
d) 什么是属性:
a) 属性封装是一个结构,一个包含了两个方法的结构
b) 属性是用来保护字段的,外部的操作最终操作的是字段而不是属性
e) 属性封装中的get和set访问器的作用
a) Get:获取数据
b) Set:赋值
f) 如何设置属性的只读和只写属性:创建对应的get或者set访问器
g) 允许外部访问的变量需要声明为属性
h) 使用时注意事项:
a) 在set的时候,Value是系统自动传递的参数,就相当于用户赋的值。
b) 在做逻辑验证的时候是判断Value的值,而不是字段或者属性的值
c) 在属性是操作的是字段,而不再是属性,否则就会造成递归抛出异常。
d) 属性的类型的作用是:1.确定返回值的类型 2.确定value的类型
e) 给属性赋值本质就是 调用方法,传递参数
5.构造函数
a) 使用对象.属性赋值的缺点及使用对象初始化器赋值的缺点
b) 什么是构造函数:在创建对象的同时进行对象的成员的赋值
c) 构造函数的作用:为对象的属性赋值
d) 构造函数是一个特殊的方法
i. 构造函数的名称与类名一样
ii. 构造函数没有返回值
iii. 构造函数也是一个方法,可以拥有参数,也可以实现重载
e) 构造函数不能显式的调用,只能在类的实例化及当前类其它构造函数this调用及子类调用父类base的构造函数
f) 每一个类都会有一个无参的构造函数,如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。
g) 构造函数调用时类似于方法,满足一一对应的原则
h) 同一个类中的构造函数相互调用
i) 使用注意事项:
i. 每一个类都会默认提供一个无参的构造函数(隐藏),但是如果手动添加了构造函数,那么无参的构造函数就会消失。所以一般情况下建议创建好类之后手动添加无参构造函数
ii. 构造函数不能显式的调用,只有在创建对象的时候和构造函数相互调用的时候才可以使用。
iii. 类的其它成员的名称不能与类名一致,除了构造函数和析构函数