C#面试题——附答案

     下午随便在几个网站上转了转,发现了些C#的面试题,以csdn的一篇帖子收集最全,但是,没有答案,就自己做了一下,发上来,后续一些关于概念机制的题目,我继续做,先发点程序的,都是通过了编译并运行的,但理解上难免还有不到位之处,欢迎指正。
 
1、以下代码能否通过编译?如果不能,请改成正确代码,并说明原因。

   <%
       int subtract(int num1, int num2) {
          return num1-num2;
       }
   %>
  
      <%
         int number = 100;
         while (number > 0) {
            Response.Write("value: " + number + "
");
            number = subtract(number, 1);
         }
      %>
  

未通过编译:CS1519: 类、结构或接口成员声明中的标记“while”无效——为什么是这个
                    错误呢?不清楚了。
改正:将subtract放在之间。

2、float f=-123.567F;
   int i=(int)f;   i的值现在是_____?
   答案:-123  (float f=123.567F时,是123)
3、下面的代码中有什么错误吗?_______
     using System;
     class A
     {
          public virtual void F(){
              Console.WriteLine("A.F");
           }
      }
      abstract class B:A
       {
           public abstract override void F();
       }
   ——编译通过
4、当类T只声明了私有实例构造函数时,则在T的程序文本外部,_不可以_____(可以 or 不可以)从T派生出新的类,____(可以 or 不可以)直接创建T的任何实例。(答案:均受保护级别限制,不可以)
5、下面这段代码有错误么?
    switch (i){
    case():
        CaseZero();
        break;
    case 1:
        CaseOne();
        break;
    case 2:
    default:
        CaseTwo();
        break;
   }
——原题目的default那行是:“dufault;”,我想应该是笔误吧,改为default:后无错,当i为2和其他值时,执行CaseTwo()。
6、在下面的例子里
     using System;
     class A
     {
          public A(){
                PrintFields();
           }
          public virtual void PrintFields(){}
      }
      class B:A
      {
           int x=1;
           int y;
           public B(){
               y=-1;
           }
           public override void PrintFields(){
               Console.WriteLine("x={0},y={1}",x,y);
           }
当使用new B()创建B的实例时,产生什么输出?
答案:输出为x=1,y=0(继承的子类在new时,先new父类对象,然后new自身私有成员,当调用b.PrintFields()时,则输出x=1,y=-1)
7、下面的例子中
     using System;
     class A
     {
          public static int X;
          static A(){
               X=B.Y+1;
          }
      }
      class B
      {
           public static int Y=A.X+1;
           static B(){}
           static void Main(){
                Console.WriteLine("X={0},Y={1}",A.X,B.Y);
           }
       }
产生的输出结果是什么? X=1,Y=2
8、下面这段代码输出什么?为什么?
     int i=5;
     int j=5;
     if (Object.ReferenceEquals(i,j))
          Console.WriteLine("Equal");
     else
          Console.WriteLine("Not Equal");
答案:Not Equal——进行了装箱操作。

你可能感兴趣的:(C#面试题——附答案)