1、abstract class和interface的区别是什么?
1)接口用于规范,抽象类用于共性。
2)抽象类是类,只能被单继承,接口可以一次实现多个。
3)抽象类可以提供某些方法部分实行,接口不可以。
4)抽象类的实例是它的子类给出的,接口的实例是实现它的类给出的。
5)抽象类中可以有方法实现,也可以定义非静态的类变量,接口只能声明方法、属性、事件、索引器
6)在抽象类中加入一个方法,那么它的子类就同时有了这个方法,而在接口加入新的方法,那么实现它的类就要重新编写(这就是说为什么说接口是一个类的规范了。)
7)接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内容成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问。)
2、接口的特征是什么?使用接口的好处有哪些?
1)接口类似于抽象基类,不能直接实例接口,接口中的方法是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员。
2)接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型,不能包含静态成员。
3)接口成员是自动公开的,且不能包含任何访问修饰符。
4)接口自身可以从多个接口继承,类和结构可继承多个接口,但接口不能继承类。
接口首先是一种规范,其次接口有利于代码的复用,扩展性好,易于维护
3、Overload和Override的区别是什么?
1)OverLoad是重载,是有相同的方法名,但参数类型或个数彼此不同。返回值类型可以不同。
2)Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,在子类中覆盖掉了父类的该方法。返回值类型必须相同。
4、 静态成员和非静态成员的区别?
静态变量使用static修饰符进行声明,在类被实例化时创建,通过类进行访问不带有static修饰符声明的变量称作非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值,静态函数的实现里不能使用非静态成员,如:非静态变量、非静态函数等。
5、描述数据库连接过程?
开始 --> 引入命名空间 --> 创建一个SqlConnection --> 打开连接 --> 创建一个SqlCommand --> 获取SqlDataReader对象 --> 关闭SqlDataReader对象 --> 关闭连接 --> 结束
6、什么是命名空间?怎样引用命名空间?命名空间的作用是什么?不用命名空间可以吗?
命名空间是类的逻辑的分组,它组成一个层次结构—逻辑树,这个树的根是System
用using引入命名空间
作用:防止命名冲突
不可以
7、类的命名规范是什么?方法的命名规范是什么?
类:
1)类名应该有意义。
2)类名应该是名词。
3)类名首字母应该大写。
4)若两个单词,每个单词的首字母都大写。
方法名:
1)动+名词并有意义
2)首字母小写,多个单词组合时,第二个单词首字母要大写。
3)不能为关键字
8、构造方法有什么特征?它的作用是什么?
特征:没有返回值,方法名和类名一样。
作用:初始化成员变量。
9、什么是封装?什么是索引器?它们有什么区别与联系?请举例说明
封装:将数据和操作组合到一起,并决定哪些数据和操作是对外可见的。
索引器:索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使过程看起来更为直观,更容易编写。
联系:都有Get和Set而且都能通过它们对类里面的私有进行访问。
区别:
1)封装名可自定义,索引器必须以this命名。
2)封装可以为实例或静态,索引器必须是实例。
3)索引器有索引参数列表,封装没有。
封装:
Private int id;
Public int Id{
Get{return id;}
Set{id=value;}
}
或者:
Private int id;
Public int GetId(){
Return id;
}
Public void SetId(){
This.id=id;
}
索引器:
Public int this[int index]{
Get{
If(index==0)return name;
Else if(index==1)return password
Else return null;
}
Set{
If(index==0)name=value;
Else if(index==1)password=value;
}
}