C#面试题目答案 下载本文

1.声明名称空间的关键字?作用?(二点)

namespace声明名称空间。

a.名称空间是一种代码的组织形式,区别不同的代码功能 b.减少命名冲突

使用using给名称空间取别名。名称空间可以嵌套。

2.C#中有那些访问修饰符以及作用范围?其中类有哪些访问修饰符,默认是什么?类成员变量有哪些默认是什么?

private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在当前程序集中可以访问。 类:internal(默认) public 类成员变量:都可以使用

3.静态变量和非静态变量的区别?(四点)

静态变量: 静态变量使用 static 修饰符进行声明 在所属类被装载时创建 通过类进行访问 所属类的所有实例的同一静态变量都是同一个值 非静态变量: 不带有 static 修饰符声明的变量称做非静态变量 在类被实例化时创建 通过对象进行访问 同一个类的不同实例的同一非静态变量可以是不同的值

4.构造函数的特征,在继承的时候其调用顺序?

a.与类同名 b.无返回类型

c.只能由 new 关键字调用,实例化对象时自动调用。

d.如果未定义构造函数,编译器会自动添加一个默认构造函数。如果已经定义了自己的构造函数,就不会提供默认构造函数。

e.构造函数的作用是实例化对象并初始化成员变量 f.构造函数不能被继承

g.子类在创建对象时,先调用父类的构造方法,在调用自己的构造方法

5.什么是重写,什么是重载?尽量详细

重写:父类的方法在子类重写实现,以满足子类需求,父类方法用virtual修饰,子类方法用override修饰。是运行时多态。 重载:在一个类中,方法名相同,参数列表不同(同名不同参,与返回类型,访问修饰无关,由参数个数,顺序,类型有关。作用:实现编译时多态,方便调用) 不同:

a.重载在同一个类中,重写在父类和子类中

b.重载的方法的参数列表不同,重写时子类的方法和父类的方法具有相同的方法签名(访问

修饰符、返回类型、方法名、参数列表)

c.重载不要用关键字,重写:父类方法用virtual修饰,子类方法用override修饰要用关键字 d.重载靠参数来判断调用的方法,重写靠对象的类型来判断调用的方法

共同点:都是多个方法共用一个方法名,都是面向对象中多态的体现形式。

6.什么是枚举?以及枚举作用?

枚举:是一组已经命名的数值常量。 作用:

a.使代码便于维护,确保变量的合法性

b.使代码更加清晰,允许用描叙性的名称表示整数类型,而不是含糊的数来表示 c.枚举是代码便于键入,减少按键次数,便于我们回忆起可选值 好处:避免出错、便于使用、使常量的名称有意义

7.什么是常量?以及常量的作用?

常量:值不会发生变化的量。用const修饰,声明时必须赋值,作为全局变量时默认是静态形式。

作用:给一些不需要改变的值的变量赋值,以便减少出错。常被用来标识、测量和比较。

8.ADO.NET五大对象,以及其作用?

a).Connection连接对象,建立和数据库连接 b).Command执行命令和存储过程 c).DataReader向前只读的数据流

d).DataAdapter适配器,支持增删查询

e).DataSet数据集对象,相当与内存里的一张或多张表

9.什么是值类型和引用类型?C#中那些数据类型是值类型哪些是引用类型?什么是装箱和拆箱?

答:基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。所有的值类型均隐式派生自 System.ValueType。与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。 值类型主要由两类组成:结构、枚举、基本数据类型

结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。

引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class类、interface接口、delegate委托、内置引用类型: object对象、string字符串 装箱:从值类型转变为引用类型 拆箱:从引用类型转变为值类型

10.类和结构的区别?(四点)

1)、类是引用类型在堆上分配。结构是值类型在栈上分配。 2)、类可以继承和被继承。结构不能被继承,但可以实现接口 3)、类可以有默认的无参构造函数和有参的构造函数。结构不能有无参的构造函数,但可以提供带参的构造函数,必须在构造函数里给所有的成员变量给初始值。 4)、类创建对象时必须使用new。结构创建对象可以不用new。 5)、类可以在声明字段时给其赋值。结构不能在声明字段时给其赋值,必须在构造函数中给所有成员赋值。

11,什么是属性?什么是特性?

属性表示对象的一种状态,是对类成员变量的一种封装,保护其成员变量,并限制其读写权限。

特性是被指定给某一声明的一则附加声明性信息。

12.面向对象包含哪些特征?继承有哪些特征(至少四点)?为什么要使用继承? 面向对象的特征:封装、继承和多态 1)、继承是可传递的。 2)、派生类应当是对基类的扩展。 3)、构造函数和析构函数不能被继承。除此以外的其它成员都能被继承。 4)、派生类如果定义了与继承而来的成员同名的新成员,继承来的成员会被隐藏 5)、派生类能够重载父类成员,从而实现类可以展示出多态性。 6)、继承具有具有单根性

继承的作用:代码的重用,减少代码冗余,结构清晰,可以对现实世界进行模拟 继承是在现有类的基础上添加一些新的东西,从而形成一个新的类的过程

13.抽象类和接口的区别?

不同: 1)、抽象类可用于引用类型。接口可用于值类型和引用类型。 2)、抽象类单继承,接口多继承 3)、抽象类关键字abstract class。接口关键字interface 4)、抽象类能声明字段、属性、方法、索引器、事件。接口能声明属性、方法、索引器、事件。 5)、抽象类方法签名有访问修饰符。接口方法签名无访问修饰符 6)、抽象类子类实现用override关键字。接口子类实现用不要关键字。 7)、抽象类描叙类似事物的共有的属性和方法,接口是描叙不相干对象共有的属性和方法 共同:都是类的模板、都不能被实例化、都能被继承

14.三层结构,包括那三层?每层作用是什么?为什么要使用三层(4点以上)以及弊端

三层包括:数据访问层、业务逻辑层、表示层。 数据访问层:实现对数据的保存和读取操作。

业务逻辑层:是表示层与数据访问层之间的桥梁,负责数据处理、传递。 表示层:为用户提供一种交互操作界面。

关系:表示层---依赖---业务逻辑层---依赖---数据访问层。

使用三层可以提高程序的扩展性,高内聚低耦合,便于开发分工,架构清晰。