您的位置:首页 > 编程语言 > C#

我做技术主管的时候出的一份C#笔试题

2008-11-09 08:22 411 查看
C# [/b]笔试题[/b]

1、 [/b]基础知识[/b]

1) 值类型与引用类型
下面类型哪些是值类型?哪些是引用类型?
i. class enum struct delegate interface
ii. object int string float DateTime

2) 非静态成员与静态成员
写出下面代码的输出结果:
class MyClass
{
public MyClass() { v1++; v2++; }
public static int v1;
public int v2;
}

// 注意:为了书写方便,没有将下面的代码放在函数中,下同
MyClass mc1 = new MyClass(), mc2 = new MyClass();
Console.WriteLine(“{0} {1} {2}”, MyClass.v1, mc1.v2, mc2.v2);

3) 接口
写出下面代码的输出结果
interface IMyInterface
{
void Write();
}

class MyClass1 : IMyInterface
{
public void Write() { Console.WriteLine(“Hello World 1”); }
}

class MyClass2 : MyClass1
{
public new void Write() { Console.WriteLine(“Hello World 2”); }
}

class MyClass3 : MyClass2, IMyInterface
{
public new void Write() { Console.WriteLine(“Hello World 3”); }
}

class MyClass4 : MyClass3, IMyInterface
{
void IMyInterface.Write() { Console.WriteLine(“Hello World 4”); }
public new void Write() { Console.WriteLine(“Hello World 5”); }
}

IMyInterface myIn1 = new MyClass1();
IMyInterface myIn2 = new MyClass2();
IMyInterface myIn3 = new MyClass3();
IMyInterface myIn4 = new MyClass4();

myIn1.Write();
myIn2.Write();
myIn3.Write();
myIn4.Write();

4) 传参方式
写出下面程序的输出结果:(如果代码有语法错误请指明)
void MyMethod1(int v) { v ++; }
int v1 = 0;
MyMethod(v1);
Console.WriteLine(v1);

void MyMethod2(ref int v) { v ++; }
int v2 = 0;
MyMethod(ref v2);
Console.WriteLine(v2);

void MyMethod3(out int v) { v ++; }
int v3 = 0;
MyMethod(out v3);
Console.WriteLine(v3);

5) 继承、隐藏与重写
写出下面程序的输出结果:
class MyClass1
{
public void Write() { Console.WriteLine(“Hello World 1”) }
}

class MyClass2 : MyClass1
{
public new virtual void Write() { Console.WriteLine(“Hello World 2”); }
}

class MyClass3 : MyClass2
{
public override void Write() { Console.WriteLine(“Hello World 3”); }
}

MyClass1 mc1 = new MyClass2();
MyClass2 mc2 = new MyClass3();

mc1.Write();
mc2.Write();

6) 委托
有如下的代码:
string MyMethod(object obj){ return obj.ToString(); }

则下面语法正确的有:
a) delegate string MyDelegate(object obj); MyDelegate func = MyMethod;
b) delegate object MyDelegate(object obj); MyDelegate func = MyMethod;
c) delegate string MyDelegate(string obj); MyDelegate func = MyMethod;
d) delegate object MyDelegate(string obj); MyDelegate func = MyMethod;

7) 反射
i. 简单说明一下您对反射的理解,及什么情况下使用反射
ii. 简述C#关键字is与as的用法

8) 装箱与拆箱
请指出下面代码中,哪些地方会发生装箱或拆箱
int a = 10;
object obj = a;
obj = 100;
int b = (int)obj;
Type type = b.GetType();
string str = b.ToString();
Console.Write(obj);
Console.Write(b);

9)泛型
i. 如果要限制泛型中的类型参数T为引用类型,可以用什么样的语法?
ii. 如果泛型类中,某方法要返回类型参数T的默认值,可以用什么样的语法?

10)运算符重载
i. C#中的运算符重载,哪些运算符要求成对重载?
ii. 实现C#运算符重载的方法,需要有哪些固有的特征?(例如访问修饰符等特征)

11)集合类
i. 简述object类中的两个虚函数GetHashCode()与Equals()的作用
ii. 简述接口IEnumerable与IEnumerator的作用
iii. 请列举一下您所熟悉的.NET集合类,越多越好

12)异常
以下对异常的解释正确的有:
a) 异常类必须要派生于System.Exception(或其派生类)
b) 在一个方法中出现的异常,如果该方法没有对其进行处理(catch),则会沿着调用堆栈寻找可以处理该异常的代码
c) 如果一个方法有返回值,那么即使出现了异常,也应该返回一个明确的值;
d) 只要进入了try块,那么它会最终执行finally块;(不考虑突然断电等导致程序突然中止的情况)
e) 在finally中也可以使用return语句
f) 如果在finally块中出现了异常,那么原先在try或catch块中抛出的异常会丢失

13)多线程
i. 简述Monitor、Semaphore、Mutex的作用
ii. 简述C#关键字lock的作用

14).NET类库知识
i. 简述StringBuilder的用途
ii. 简述IDisposable接口的用途

15)您是否了解C#3.0,如果了解,简单说一下它的新特性。(选答)

2、 [/b]设计模式[/b]

1) 请列举一下您所知道的模式,越多越好:

2)请从您所熟悉的模式中,任选两个模式,并用简单的代码描述一下:

3[/b]、编程[/b]

1) 请任选一种算法,用C#语法实现对一个整型数组的逆序排序

2) 假如一个整型数组中有重复的元素,请用C#写一个算法,将其中重复的元素去除,只保留一个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: