【修订版】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. 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 }

这里也可以将方法绑定到委托上,主函数可以改写为如下形式

方法绑定至委托
 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 }

 

posted @ 2011-08-04 22:42  temptation  阅读(499)  评论(0编辑  收藏  举报