1.面向对象
面向对象的三大特征:
封装、继承、多态
2.什么是类?什么是对象?类和对象的区别?
类是一种数据类型,用户自定义的数据类型。 是针对具体存在的一种描述。
类的组成:字段,属性,方法,构造函数。
对象是具体的。是类的具体实例。对象具有属性和方法。 按照类的描述来创建一个可供我们使用的实例。
类只占一块内存,每个对象单独占用一块内存。 对象可以叫做类的实例(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.多态
多态就是用某个子类来实例化父类,调用父类的抽象方法或者虚方法,但实际上执行的是子类实例重写的方法。 |