一、值类型与引用类型。
值类型包括int,char,double,bool等等,引用类型包括类,string,数据,接口等。值类型变量存储对象的值,赋值会创建值的副本,修改任何一个副本,不会影响其他的副本。引用类型变量存储对象为内存地址,赋值不会创建值的副本,只会创建地址的副本,修改任何一个副本也同时修改其他的副本。
二、面向对象的三大特性:封装、继承、多态。封装就是隐藏对象的信息,留出访问的接口。在程序中我们通常使用属性对字段进行封装。继承:Object类是所有类的共同基类,它是唯一的非派生类,是继承层级结构的基础,对于其他类,父类和子类的概念都是相对的。继承只有单继承,也就是只能继承一个父类,当然该父类还可以继承自一个祖父类,直到Object类。多态:通过指向派生类的基类引用,调用虚函数,会根据引用所指向派生类的实际类型,调用派生类中的同名重写函数,便是多态。
三、结构与类的区别。结构是值类型,类是引用类型。结构中的字段不能有初始值,类可以给字段赋初值。结构不能定义无参构造方法,而且有参构造方法里面的每一个字段都必须赋值。结构不需要实例化。
四、枚举是值类型;枚举值不能定义字段属性和方法;枚举是从0递增的整数。
五、虚方法:声明为virtual的方法就是虚方法,基类的虚方法可以在派生类中使用override进行重写。重写虚方法必须具有相同的可访问性,且基类方法不能是private,虚方法不能重写static方法或者非虚方法,方法、属性、索引器、事件都可以声明为virtual或者override。
六、虚方法与抽象方法的区别:1.虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。2.抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。3.抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。