c#面试2(选择题)

31、针对下面的C#代码:

               using System;

               delegate void D(int i);

               class P{

                 public static void Main(){

                    V(new D(R)); new D(P.R)

                  }

                 public static void R(int t) {

                      V(21);

                   }

                 public static void V(int i){

                    Console.WriteLine(i.ToString());

                    Console.ReadLine();

                 }

              }

         以下说法正确的是(        )

A.代码中存在错误,delegate voidD(int i);不能定义在名称空间或者类之外

B.代码中存在错误,代码行V(new D(R));使用委托错误

C.程序正常运行,输出为0

D.程序正常运行,输出为21


2   C#中的委托是什么?事件是不是一种委托?


委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
for example:

//声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
delegate void  NewDelegate();
//下面定义的a,b两种方法,你可以理解为NewDelegate这个类型的两个实例。
public void a(){};
public void b(){};
public void main()
{
       NewDelegate dgt1=new NewDelegate(a);
       NewDelegate dgt2=new NewDelegate(b);
  //dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
 //相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托
}

事件是一种特殊的委托,
事件模型建立在委托机制之上,它实现了对委托的封装。
/*

猫 叫  老鼠跑,主人醒
*/

using System;
namespace CatCry
{
    class MainClass
    {
        static void Main()
        {
            Cat cat = new Cat();
            cat.Miao();
        }
    }
}


public class Cat
{
    public delegate void EventMiao();
    public event EventMiao OnMiao;

    public void Miao()
    {
        Console.WriteLine("miao..........");
        //OnMiao 
        OnMiao += People.Wake;
        OnMiao += Mouse.Run;
        OnMiao();
    }
}

public class People
{
    public static void Wake()
    {
        Console.WriteLine("人醒!");
    }
}

public class Mouse
{
    public static void Run()
    {
        Console.WriteLine("老鼠跑!");
    }
}

1、下列有关基本类的大小不正确的是D

A、int类型是4个字节

B、bool类型是1个字节

C、long类型是8个字节

D、char类型是一个字节  (char类型占两个字节)

2、关于定义数组定义不正确的是C

A、int[] numbers={1,2,3,4,5,6};

B、int[] numbers=new int[6];

C、int[][] numbers=new int[2][3]; (定义二维数组的正确方法:int[ , ] a = new int[3,5];)

D、var a=new[]{1,2,3,4,5,6};

3、有关数组说法不正确的是A

A、数组的内存是分配在栈(堆)中

B、数组的索引从零开始的

C、数组是一种数据结构,它包含若干相同的类型的变量

D、数组可以是一维、多维、交错的

4、有关结构体说法不正确的是D

A、在结构体声明中,除非字段被声明为const或static,否则无法初始化

B、结构体不能声明默认的构造函数(没有参数的构造函数)或析构函数

C、结构体不能从类或其他结构体继承

D、结构体是引用类型的(结构体是值类型,类是应用类型)

5、有关结构体和类的说法不正确的是B

A、结构是值类型的,而类是引用类型的

B、结构体不可以声明构造函数

C、结构体直接继承System.ValueType类型

D、结构体可以继承接口

6、有关类和结构体的区别说法不正确的是C

A、结构体是值类型的,而类是引用类型的

B、类的实例化需要new,而结构体可以不用

C、结构体内存一定分配在栈()中,而类的内存分配在堆中

D、结构可用作可为null的类型,因而可向其赋值null

7、关于静态类说法不正确的是C

A、声明静态类,该类不能使用new关键字创建实例

B、静态仅包含静态成员

C、静态类不能包含常量成员

D、静态类是密封的

8、有关静态成员说法不正确的是A

A、可以使用类的实例,访问本身类的静态的成员

B、静态方法可以被重载,但不能被重写

C、静态成员在第一次被访问之前并且在任何静态构造函数之前初始化

D、可以在类中声明静态成员

9、有关委托的说法不正确的是D

A、一旦为委托分配了方法,委托与该方法具有完全相同的行为

B、委托是一种引用方法的类型

C、委托可以链接在一起,方法不必与委托签名完全匹配

D、委托就是事件一种表示形式(委托与事件是两码事)

10delegate void Del(int x);

      voidDoWork(int k);

下列关于委托订阅不正确的是C

ADeld=DoWork;

BDeld=new Del(DoWork);

CDel d+=DoWork

DDel d=delegate(int x){DoWork(x);};

11、有关静态构造函数说法不正确的是C

A、静态构造函数既没有访问修饰符,也没有参数

B、在创建第一个实例前或引用任何静态成员之前,将自动调用静态构造函数来初始化。

C、在程序中,用户可以控制何时执行静态构造函数

D、无法直接调用静态构造函数

12、有关absract关键字说法不正确的是D

A、absract用于创建仅用于继承用途的类和类的成员

B、absract用于方法,则该方法隐含是虚函数

C、absract用于类,则此类无法被实例化

D、absract用于方法,则该方法有方法体

13、有关继承需要用的关键字说法不正确的是B

A、virtual用于修饰方法、属性、索引器或事件,并使它们可以在派生类中被重写。

B、virtual(不)可以和static、abstract、private、override修饰符一起使用。

C、override关键字提供从基类继承的成员的新的实现,重写的基类方法必须是virtual、abstract、或override关键字修饰的。

D、Sealed用于修饰类时,将会阻止其他类从该类派生

14、有关索引器说法不正确的是C

A、索引器允许类或结构体的实例就像数组一样进行索引

B、索引器类似于属性,不同之处在于他们的访问器采用参数

C、索引器不可被重载

D、索引器不必根据整数值进行索引,由你决定如何定义特定的查找机制

15、在C#中,下列常量定义正确的是(B)

A、Const double PI 3.1415926;

B、Const double e=2.7

C、define double PI 3.1415926

D、define double e=2.7

16、以下c#代码:

usingSystem.Threading;

class App{

            public static void Main(){

              Timertimer = new Timer(new TimerCallback(CheckStatus),null,0,2000);

              Console.Read();

}

static void CheckSatus(Object state){

       Console.WriteLine("正在进行检查...")

     }

}

在使用代码创建定时器对象的时候,同时指定了定时器的事件,运行时将每隔两秒打印一行“正在运行检查...”,因此,TimerCallback是一个(A)

A.委托

B.结构

C.函数

D.类名

18、阅读以下的C#代码:

public classTEApp{

             public static void ThrowException(){

                          throw new Exception();

          }

              public static void Main(){

                          try{

                                 Console.WriteLine("try");

                                 ThrowException();

                                 }

                          catch(Exception e){

                                 Console.WriteLine("catch");

                                 }

                          finally{

                                 Console.WriteLine("finally");

                                 }

                    }

}

请问代码运行结果是(A)。(选择一项)

A.try    catch      finally

B.try

C.try     catch

D.try    finally

19、在C#中,一个类(B).(选择一项)

A.可以继承多个类

B.可以实现多个接口

C.在一个程序中只能有一个子类

D.只能实现一个接口

20、针对下面的C#代码:

      using System;

      classTeststring {

public staticvoid Main(){

           String strOriginal;

           strOriginal = Console.ReadLine();

           bool A = strOriginal.Equals("A");

           Console.WriteLine(A.ToString());

           int B = strOriginal.Length;

           Console.WriteLine(B.ToString());

           Console.ReadLine();

       }

      }

    程序运行时.输入。“ AAAAA”(五个A的前面有三个空格)则程序输出为(B)

     (选择一项)

A.0 8

B.False 8

C.-1 8

D.False 5

21、以下的C#代码段:

         public struct Person{

             string Name;

             int Age;

         }

         public static void Main(){

             Hasbtable A;

             Person B;

            //其他处理代码

         }

         以下说法正确的是(A)。(选择一项)

A.A为引用类型的变量,B为值类型的变量

B.A为值类型的变量,B为引用类型的变量

C.A和B都是值类型的变量

D.A和 B都是引用类型的变量

22、以下的C#代码:

         static void Main(string[] args){

                    Console.WriteLine("运行结果: {0}",Console.ReadLine());

                    Console.ReadLine();

            }       

代码运行结果为(D)。(选择一项)

A.在控制台窗口显示“运行结果:”

B.在控制台窗口显示“运行结果:{0}”

C.在控制台窗口显示“运行结果:,Console.ReadLine”

D.如果用户在控制台输入“ A”,那么程序将在控制台显示“运行结果:A”


23、在C#中定义一个数组,正确的代码为(B)。(选择一项)

A.int arraya =new int[5];

B.int[] arraya =new int[5];

C.int arraya =new int[];

D.int[5] arraya= new int;

24、在C#语言中,下列关于属性的描述正确的是(B).(选择一项)

A.属性系是以public关键字修饰的字段,以public关键字修饰的字段也可称为属性

B.属性是访问字段值的一种灵活机制,属性更好地实现了数据的封装和隐藏

C.要定义只读属性只需在属性名前加上readonly关键字

D.在C#的类中不能自定义属性

26、在.NET框架类库中,所有与多线程机制应用相关的类都放在(C)命名空间中。(选择一项)

A.System.SysThread

B.System.Thread

C.System.Threading

D.NetException

28、阅读以下的C#代码:

    class A{

         public A( ) {

               Console.WriteLine("A");

          }

      }

      class B:A{

          public B(){

             Console.WriteLine("B");

          }

      }

    class Program{

       public static void Main(){

           B b = new B();

           Console.ReadLine();

       }

    }

上述代码运行后,将在控制台窗口输出(C)。(选择一项)

A. A

B. B

C. A B

D.B A

29、在.NET中,以下关于命名空间的描述,正确的是(D)。(选择一项)

A.命名空间不可以进行嵌套

B.任一个.cs文件中,只能存在一个命名空间

C.便用private修饰的命名空间,其内部的类也不允许访问

D.命名空间使得代码更加有条理、结构更清晰

30、NET中,程序中的错误可以划分为以下三类,除了(D)。  (选择一项)

A.逻辑错误

B.运行时错误

C.语法错误

D.自定义错误


31、针对下面的C#代码:

               using System;

               delegate void D(int i);

               class P{

                 public static void Main(){

                    V(new D(R));

                  }

                 public static void R(int t) {

                      V(21);

                   }

                 public static void V(int i){

                    Console.WriteLine(i.ToString());

                    Console.ReadLine();

                 }

              }

         以下说法正确的是(B )(选择一项)

A.代码中存在错误,delegate voidD(int i);不能定义在名称空间或者类之外

B.代码中存在错误,代码行V(new D(R));使用委托错误

C.程序正常运行,输出为0

D.程序正常运行,输出为21

32、被volatile关键字修饰字段的作用是( B)

A、提供给子类使用,不提供给其他类使用

B、禁止对字段的访问施加优化

C、表示只读字段,只能赋值一次

D、只能在本程序集中使用

33、以下关于C#中方法重载的说法正确的是(CD)。(选择二项)

A.如两个方法名字不同,而参数的数量不同,那么它们可以构成方法重载

B.如两个方法名字相同,而返回值的数据类型不同,那么它们可以构成方法重载

C.如两个方法名字相同,而参数的数据类型不同,那么它们可以构成方法重载

D.如两个方法名字相同,而参数的数量不同,那么它们可以构成方法重载

34、在C#语法中,在派生类中对基类的虚函数进行重写,要求在声明中使用(A)关键字。(选择一项)

A.override

B.new

C.static

D.virtual

35、在.NET中,Hashtable类所在的命名空间是(C)(选择一项)

A.System.Threadint

B.System.IO

C.System.Collections

D.System

36、在C#中,可以通过装箱和拆箱实现值类型与引用类型之间相互转换,在下列代码中,

有(B)处实现了拆箱。(选择一项)

int age = 5;

object o= age;

o=10;

age=(int)o;

object oAge=age;

A.0

B.1

C.2

D.3

37、在C#中,下列代码的运行结果是(B) . (选择一项)

Int[]num =new int[]{1,3,5};

ArrayList arr=new ArrayList();

For(int i=0;i<num.Length;i++){

      arr.Add(num[i]);

}

arr.Insert(1,4);

console.Write(arr[2]);

A.1

B.3

C.4

D.5

38、C#中关于委托,下面说法正确的是(AD(CD))。(选择两项)

A.委托是一种类的成员

B.委托必须定义在类中

C.定义委托需要使用delegate关键字

D.委托是一种数据类型

39、下列关于C#的异常处理的说发法,错误的是(BC)。(选择二项)

A.Try块必须跟catch块组合使用,不能单独使用

B.一个try块可以跟随多个catch块

C.使用throw语句既可引发系统异常,也可以引发由开发人员创建的自定义异常

D.在try … catch …..finally块中,即便开发人员编写强制逻辑代码,也不能跳出finally块的执行

40、在.NET中,一些数据类型为引用类型,当引用类型的值为(B)时,表明没有引用任何对象。(选择一项)

A.Empty

B.null

C.Nothing

D.0

41、在C#中,接口与抽象基类的区别在于(D)。(选择一项)

A.抽象基类可以包含非抽象方法,而接口只能包含抽象方法

B.抽象基类可以被实例化,而接口不能被实例化

C.抽象基类不能被实例化,而接口可以被实例化

D.抽象基类能够被继承,而接口不能被继承

42、异常是在什么时候发生的C

A、编写程序时

B、编译时

C、运行时

D、最终用户发出的请求时

44、以下的C#代码,试图用来定义一个接口:

public interfaceIFile{

     int A;

     int delFile(){

         A = 3;

     }

     void disFile();

}

关于以上的代码,以下描述错误的是  B

(A)以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误;

(B)以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数;

(C)代码void disFile();声明无错误,接口可以没有返回值;

(D)代码void disFile();应该编写为void disFile(){};

45、有关抽象方法说法正确的是B

A、可以有方法体

B、是没有方法体的方法

C、可以出现在非抽象类中

D、抽象类中的方法都是抽象方法








  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值