1.继续面向对象程序员
面向对象的三大特征:ide
封装、继承、多态函数
封装:隐蔽代码实现,代码复用,修改方便。this
继承:指针
多态:对象
2.什么是类?什么是对象?类和对象的区别?继承
类是一种数据类型,用户自定义的数据类型。 是针对具体存在的一种描述。内存
类的组成:字段,属性,方法,构造函数。开发
对象是具体的。是类的具体实例。对象具备属性和方法。 按照类的描述来建立一个可供咱们使用的实例。get
类只占一块内存,每一个对象单独占用一块内存。 对象能够叫作类的实例(Instance)
3.构造函数的做用?
主要是为了方便程序员在实例化(new)对象的时候就为对象里的一些属性字段初始化赋值。
<--构造函数-->
(1)访问修饰符通常状况下是public
(2)没有返回值类型
(3)方法名和类名相同
(4)在该类被new的时候(实例化)调用
(5)用户自定义的类中,若是没有用户定义的任何一个构造函数。那么CLR将在程序运行的时候自动添加一个无参的构造函数给对象
也就是说:一旦用户自定义的类中包含了一个或多个构造函数(无论有没有参数的),那么CLR将不在自动添加。
4.属性
属性的本质就是两个方法,get和set。
属性就是为了设置访问和修改为员变量值的规则。
若是属性里只定义了get代码块,则该属性叫作只读属性。
若是属性里只定义了set代码块。则该属性叫作只写属性。
代码:
public class Person
{
private string _name;
public string Name
{
get{return _name;}
set{_name=value;}
}
private int _age;//属性存在的目的就是为了设置访问和修改为员变量值的规则。
public int Age
{
get{return _age;}
set
{
if(value>=0&& value<=120)
{
_age=value;
}
else
{
_age=18;
}
}
}
}
5.GC垃圾回收器
垃圾回收器定时检查堆内存,一旦发现没有被引用的对象,就当即销毁它。
6.静态成员
CLR加载程序集里的类信息,发现有静态成员,则直接添加到[静态成员表]中,整个程序集内均可以访问这个表里的静态成员。
7.里氏替换原则
当存在继承关系时,若是声明的是父类,则堆中对象保存的类型指针为父类,那么调用的时候就会执行父类的成员。
若是调用的成员,父类中没有,那么程序会报错。由于父类的类型指针只会去找父类的成员,找不到,没有,就会报错。
8.继承
(1)、由于子类继承了父类,因此子类对象可以调用父类对象里全部的非私有成员。
(2)、当存在继承关系的时候,子类的this同时能够指向父类的非私有成员。base就存在于子类对象里,用来指向父类的指针。
(3)、继承的单根性:一个类只能继承一个父类。
传递性:子类得到父类全部的非私有成员。
(4)、子类默认调用父类无参的构造函数
(5)、类的访问修饰符默认就是internal,(程序集内共享,也就是项目内部共享)
类的成员变量,访问修饰符默认是private
(6)、不能将父类对象强制转换成子类对象
(7)、当建立一个子类对象的时候,若是声明的是父类对象,那么只能调用父类中的方法。
当建立一个子类对象的时候,若是声明的是子类对象,那么先看子类中的方法,有则调用,没有则去父类中寻找,若是有则调用。
9.简单工厂方法
最关键的是应用了里氏替换原则,及子类重写父类的技术,它能让代码开发者不关心某个具体相关业务的实现,而只关心本身要实现的业务代码的编号。
10.多态
多态就是用某个子类来实例化父类,调用父类的抽象方法或者虚方法,但实际上执行的是子类实例重写的方法。