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; }
发布评论