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

     

  • 相关阅读:
    资产 = 负债 + 所有者权益
    并发编程四(3) 线程同步
    并发编程四(2) 线程同步
    并发编程四(1) 线程同步
    并发编程(三) 线程互斥
    并发编程(二)multiprocessing.dummy.Pool
    并发编程(一)

    mysql 存储过程演示造数据
    vue系列 箭头函数和this
  • 原文地址:https://www.cnblogs.com/temptation/p/2128007.html
Copyright © 2020-2023  润新知