2024年6月11日发(作者:)

刚毕业1年2年3年工作经验都可用的C#面试题及答案(设计模

式在后

C#面试题(设计模式在后面)

2. const和readonly有什么区别?

答:const可以用于类的成员常量和局部常量,必须在声明时赋值,之后不可以对常

量进行赋值。而readonly只能用于类的成员变量不能用于局部变量,在声明时可以不赋

值,除了在构造函数中可以再次赋值外,其它的地方和const一样也不能赋值。 5. 接口

和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?答 答:区别如下

(1) 抽象类可以有抽象成员(无具体实现),也可以有非抽象成员(有具体实现);

接口只有抽象成员。

(2) 一个类不能同时继承多个抽象类,一个类可以同时实现多个接口。

如果多个子类中有很多代码是重复的,这时采用抽象类,因为可以将这些代码放到抽

象类的非抽象方法中,这样可以达到代码复用。当实现多个接口时因为抽象类不支持,只

能使用接口。

6. struct和class有什么区别

答:两者都可以有成员变量、属性、索引器、事件、函数、构造函数,主要区别如下:

区别点 结构 类 类型 值类型 引用类型

成员变量 在声明时不能赋值 可以赋值也可以不赋值

构造函数 可以不写,系统提供默认构造函数,默认构造函数中会将所有成员值设为0,

如果写了构造函数则构造函数必须有参数,且在构造函数中必须为每一个成员赋值。 可

以不写,系统提供默认构造函数,写了也没有结构中的限制。 析构函数 不能有析构函数

可以有析构函数

继承性 自定义的结构不能从类继承,但可以实现接口,结构都是密封(sealed),不

能从结构继承 类没有限制

7. try后面一个finally,try中有一个return,那么finally中的代码会不会运行?

如果运行,是在return后还是return前。 答:会运行,并且在return 后运行。

8. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。 答:

该题解题思路有很多,主要是看运行效率如何,下面提供一种方法。 int[] array = new

int[100]; int temp[] = new int[100]; for (int i = 0; i < 100; i++) {

temp[i]=i+1; }

Random rand = new Random(); for (int i = 0; i < 100; i++) {

int index = (100-i-1); array[i] = temp[index];

temp[index]=temp[100-i-1]; }

9. C#中要使一个类支持foreach遍历,实现过程怎样? 答:必须实现

IEnumerable,IEnumerator这两个接口,如下: public class MyList :

IEnumerable,IEnumerator {

private int position = -1; string[] array = new string[4]; public MyList()

{

array[0] = array[1] = array[2] = array[3] = }

#region IEnumerable 成员

//每次使用foreach时都会调用它得到一个枚举器 public IEnumerator

GetEnumerator() { Reset();

return (this as IEnumerator); }

#endregion

#region IEnumerator 成员 //遍历时通过这个属性得到值 public object Current

{

get { return array[position]; } }

//访问下一个元素时使用MoveNext移动位置

public bool MoveNext() {

if (position < -1) {

position++; return true; } else return false; }

//遍历前要使位置归位 public void Reset() {

position = -1; }

#endregion }

以下不用foreach遍历集合 MyList list=new MyList(); While(xt())

{

Object o=t; }