前天我去一家公司笔试,走了很长一段路才找到了那间公司,到达时已经是满头大汗了,迟了几十分钟。可是见到公司所在的楼的破旧,还有上楼时见到的了无生气的状况,我不由得有点心凉,再加上那位应该算是大妈前台,使我更是失望。最终还是没能应聘到那间公司,说是什么对软件工程的认识还没有达到他们所需要的标准。
还是不发牢骚了,这里说一下笔试时碰到的题目,题目很简单,还是直接贴代码吧。
以下的题目没有特别说明都是求其输出
题目1:try-catch的用法
public static void Test(object parm1,int i)
{
if (parm1 == null)
throw new ArgumentNullException();
if(i <0)
throw new ArgumentOutOfRangeException();
}
static void Main(string[] args)
{
try
{
Test(null,-1);
}
catch (ArgumentNullException)
{
Console.WriteLine("1");//只有本行生效
}
catch(ArgumentOutOfRangeException)
{
Console.WriteLine("2");
}
catch(Exception)
{
Console.WriteLine("0");
}
try
{
Test("123", -1);
}
catch (ArgumentNullException)
{
Console.WriteLine("1");
}
catch (ArgumentOutOfRangeException)
{
Console.WriteLine("2");//只有本行生效
}
catch (Exception)
{
Console.WriteLine("0");
}
try
{
Test(null, 10);
}
catch (ArgumentNullException)
{
Console.WriteLine("1");//只有本行生效
}
catch (ArgumentOutOfRangeException)
{
Console.WriteLine("2");
}
catch (Exception)
{
Console.WriteLine("0");
}
Console.ReadLine();
}题目2:多态的调用
首先来看一个类的代码
interface I
{
void Foo();
}
public abstract class C:I
{
public abstract void Foo();
}
public class C1:C, I
{
void I.Foo()
{
Console.WriteLine("I.Foo");
}
public override void Foo()
{
Console.WriteLine("C.Foo");
}
}
public class C2:C1,I
{
void I.Foo()
{
Console.WriteLine("I.Foo");
}
public override void Foo()
{
Console.WriteLine("C.Foo");
}
}
public class C3 : C2, I
{
void I.Foo()
{
Console.WriteLine("I.Foo");
}
public override void Foo()
{
Console.WriteLine("C.Foo");
}
}再来看看调用的代码
static void Main(string[] args)
{
I i = null;
i = new C1();
i.Foo();
i = new C2();
i.Foo();
i = new C3();
i.Foo();
//以上都是输出I.Foo
((C3)i).Foo();

C c = null;
c = new C1();
c.Foo();
c = new C2();
c.Foo();
c = new C3();
c.Foo();
//以上都是输出C.Foo
((I)c).Foo();//输出I.Foo
Console.ReadLine();
}有人说要解释一下,但是我觉得贴出来的这些内容,可能看之前还不知道,可是看了之后一般都会明白
不过我还是尽量打些注释吧
-------------------------------------------------------------------------------
以下为2009-03-12加入的新内容
题目3:多态的构造函数的调用顺序
题目4:static的用法
题目5:判断相等
-------------------------------------------------------------------------------
以下为2009-03-25加入的新内容
题目6:static的执行顺序
从结果我们可以知道:
1、一个类的执行首先是从字段开始,然后再到构造函数。
2、拥有static的标识符的字段拥有很高的权限,它首先编译父类的static字段,再到子类的static字段,
然后其他字段则是按顺序执行:按先出现先编译,先父类再子类
3、构造函数的执行
题目7:两个不同类型相加的结果
UInt32 a = 6;
Int32 b = -20;
int c ;
int i = (a+b>6)? c=1:c=0;
Console.WriteLine(c);//结果为0在C#中UInt32和Int32 的运算会先将各数转为Int32,所以a+b结果为-14,小于6,所以c为0
但是在c++中,a+b的运算时将b换算为unsigned型,相加后结果大于6,c为1

浙公网安备 33010602011771号