//封装就是将数据或函数等集合在一个个的单元中,我们称之为类,被封装的对象通常被称为抽象数据类型,
//封装的意义在于保护或防止代码被我们无意中破坏,
//封装既可以封装成员变量,又可以封装成员方法,
//封装成员变量步骤:
//新建类,面向对象最基本单元就是类,即.cs文件,像一个文本文档里面放置C#代码,创建的类默认访问修饰符为internal,隐藏显示,
//写构造函数,类的基本结构是构造函数,每一个类都有一个构造函数,默认隐藏,访问修饰符必须是public,并且不需要写任何返回值,方法名与类名一致,
//向类中填写信息,将成员变量访问修饰符声明为private后外界无法访问,声明访问修饰符为public的属性,Ctrl+R+E,
原文链接:https://www.cnblogs.com/qq450867541/p/6108019.html
//继承是类之间建立一种相交的关系,使得新定义的派生类的实例可以继承已有基类的特征并且还可以添加新的功能,
//继承特点:
//派生类是对基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义,
//继承是可以传递的,如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中声明的成员,
//构造函数和析构函数不能被继承,除此之外其他成员能被继承,基类中成员的访问方式只能决定派生类能否访问它们,
//派生类如果定义了与继承而来的成员同名的新成员,那么就可以覆盖已继承的成员,但这并不是删除了这些成员,只是不能再访问这些成员,
//类可以定义虚方法、虚属性及虚索引指示器,它的派生类能够重载这些成员,从而使类可以展示出多态性,
//派生类只能从一个类中继承,可以通过接口来实现多重继承,
//继承时先执行父类构造函数,接着再执行子类构造函数,最后再执行方法,
//在派生类中访问基类中的成员一般有2种方式,一是调用base.<成员> 调用基类的方法,二是显示类型转换为父类,
//当派生类需要覆盖基类的方法时,C#使用new修饰符来实现隐藏基类成员,
//密封类,如果对类不作任何约束,也就是说所有类都可以被继承,这种继承的滥用会导致类的层次结构十分庞大,类与类之间的关系会变得很乱导致无法理解,因此C#提供了密封类,只需在父类前加上sealed修饰符,这个类就不能被继承了,密封方法也是在方法前加上sealed修饰符,
//抽象类和密封类刚好相反,它是为继承而生的,抽象类不能实例化,抽象方法没有具体执行代码,必须在非抽象的派生类中重写,也就是基类并不实现任何执行代码,只是进行定义,这一点和接口有相同的地方,
//如果类中有抽象方法,则类必须声明为抽象类,
//有时候不想把类声明为抽象类,但又想实现方法在基类里不具体实现,而是想实现方法由派生类重写,遇到这种情况时可使用virtual关键字将方法声明为虚方法,
//注意虚方法必须声明方法主体,抽象方法则不需要,
//在继承时,如果基类构造函数是有参数的,子类构造函数也必须有一个有参数的构造函数,否则会报错,
原文链接:https://www.cnblogs.com/fangyz/p/5271780.html
//多态
原文链接:
https://www.cnblogs.com/longteng1991/archive/2013/06/13/3131739.html
https://www.cnblogs.com/zhangkai2237/archive/2012/12/20/2826734.html
https://www.cnblogs.com/binyao/p/4891306.html
https://www.cnblogs.com/loveyue/archive/2009/04/19/1439025.html