【修订版】C#/ASP.Net 面试题及答案(2)
这些题目都来源于网络,参考之前的答案,针对每道题做了简单的分析,恳请大家批评指正。
1. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:本题考察 递归的用法。
递归计算
1 /// <summary>
2 /// 主函数
3 /// </summary>
4 /// <param name="args"></param>
5 static void Main(string[] args)
6 {
7 Console.WriteLine(Foo(30));
8 Console.ReadLine();
9 }
10
11 /// <summary>
12 /// 计算1、1、2、3、5、8、13、21、34......数列的结果
13 /// </summary>
14 /// <param name="i"></param>
15 /// <returns></returns>
16 static int Foo(int i)
17 {
18 int j = 0;
19
20 if (i <= 0)
21 {
22 j = 0;
23 }
24 else if (i > 0 && i <= 2)
25 {
26 j = 1;
27 }
28 else
29 {
30 j = Foo(i - 1) + Foo(i - 2);
31 }
32 return j;
33 }
2 /// 主函数
3 /// </summary>
4 /// <param name="args"></param>
5 static void Main(string[] args)
6 {
7 Console.WriteLine(Foo(30));
8 Console.ReadLine();
9 }
10
11 /// <summary>
12 /// 计算1、1、2、3、5、8、13、21、34......数列的结果
13 /// </summary>
14 /// <param name="i"></param>
15 /// <returns></returns>
16 static int Foo(int i)
17 {
18 int j = 0;
19
20 if (i <= 0)
21 {
22 j = 0;
23 }
24 else if (i > 0 && i <= 2)
25 {
26 j = 1;
27 }
28 else
29 {
30 j = Foo(i - 1) + Foo(i - 2);
31 }
32 return j;
33 }
2. C#中的委托是什么?
答:委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他任何方法一样,具有参数和返回值。
委托是函数的封装,代表一"类"函数,它们都符合一定的签名:拥有相同的参数列表、返回值类型。同时,委托也可以看成是对函数的抽象,是函数的"类"。此时委托的实例代表一个具体的函数。
委托实例
1 public delegate void DoHit(string skill); // 定义委托
2
3 class Program
4 {
5 /// <summary>
6 /// 山岭巨人的攻击方法
7 /// </summary>
8 /// <param name="skill"></param>
9 private static void TinyHit(string skill)
10 {
11 Console.WriteLine("使用了技能:" + skill);
12 }
13 /// <summary>
14 /// 巫妖的攻击方法
15 /// </summary>
16 /// <param name="skill"></param>
17 private static void LichHit(string skill)
18 {
19 Console.WriteLine("使用了技能:" + skill);
20 }
21 /// <summary>
22 /// 接收DoHit类型的方法作为参数
23 /// </summary>
24 /// <param name="skill"></param>
25 /// <param name="MakeHiting"></param>
26 private static void Hit(string skill, DoHit MakeHiting)
27 {
28 MakeHiting(skill);
29 }
30 /// <summary>
31 /// 主函数
32 /// </summary>
33 /// <param name="args"></param>
34 static void Main()
35 {
36 Hit("山崩", TinyHit);
37 Hit("霜冻之星", LichHit);
38 Console.ReadLine();
39 }
40 }
2
3 class Program
4 {
5 /// <summary>
6 /// 山岭巨人的攻击方法
7 /// </summary>
8 /// <param name="skill"></param>
9 private static void TinyHit(string skill)
10 {
11 Console.WriteLine("使用了技能:" + skill);
12 }
13 /// <summary>
14 /// 巫妖的攻击方法
15 /// </summary>
16 /// <param name="skill"></param>
17 private static void LichHit(string skill)
18 {
19 Console.WriteLine("使用了技能:" + skill);
20 }
21 /// <summary>
22 /// 接收DoHit类型的方法作为参数
23 /// </summary>
24 /// <param name="skill"></param>
25 /// <param name="MakeHiting"></param>
26 private static void Hit(string skill, DoHit MakeHiting)
27 {
28 MakeHiting(skill);
29 }
30 /// <summary>
31 /// 主函数
32 /// </summary>
33 /// <param name="args"></param>
34 static void Main()
35 {
36 Hit("山崩", TinyHit);
37 Hit("霜冻之星", LichHit);
38 Console.ReadLine();
39 }
40 }
这里也可以将方法绑定到委托上,主函数可以改写为如下形式
方法绑定至委托
1 /// <summary>
2 /// 主函数
3 /// </summary>
4 /// <param name="args"></param>
5 static void Main()
6 {
7 DoHit myDelegate;
8 myDelegate = TinyHit;
9 myDelegate("山崩");
10 myDelegate += LichHit;
11 myDelegate -= TinyHit;
12 myDelegate("霜冻之星");
13
14 Console.ReadLine();
15 }
2 /// 主函数
3 /// </summary>
4 /// <param name="args"></param>
5 static void Main()
6 {
7 DoHit myDelegate;
8 myDelegate = TinyHit;
9 myDelegate("山崩");
10 myDelegate += LichHit;
11 myDelegate -= TinyHit;
12 myDelegate("霜冻之星");
13
14 Console.ReadLine();
15 }