> 文档中心 > C#面试易错题

C#面试易错题

文章目录

    • 1.在C#中,int[][]是定义一个int型的二维数组
    • 2. 请问, o.MethodA 调用的是?
    • 3.以下关于 ref 和 out 描述哪些项是正确的?()
    • 4.异常类对象均为System.Exception类或其子类的对象?
    • 5.接口是一种引用类型,在接口中可以声明( ),但不可以声明公有的域或私有的成员变量。
    • 6.说法正确的是
    • 7.在C#中,索引器是专门用来访问对象中的数组信息的
    • 8.接口中的成员不可以有访问域修饰符,但可以有其它修饰符?
    • 9.在C#中,装箱操作是将值类型转化成引用类型?
    • 10.在C#中利用Socket进行网络通信编程的一般步骤是:建立Socket侦听、( )、利用Socket接收和发送数据。
    • 11.ASP中Session对象默认有效期为多少分钟?
    • 12.下列代码的运行结果是()?
    • 13.下面的代码发生了多少次装箱操作()
    • 14.TextureBrush类包含在()命名空间中
    • 15.有关结构体和类的说法不正确的是( )?

1.在C#中,int[][]是定义一个int型的二维数组?

C#里面只有矩形数组才能称作二维数组

所以数组类型有:一维数组、二维数组( 矩形数组 )和数组的数组(交错数组)

一维数组:

int[] numbers;

二维数组( 矩形数组 ):

string[,] names;

数组的数组(交错的):

byte[][] scores;

2. 请问, o.MethodA 调用的是?

using System;namespace Application{abstract class BaseClass{    public virtual void MethodA()    {    }    public virtual void MethodB()    {    }}class Class1: BaseClass{    public void MethodA(string arg)    {    }    public override void MethodB()    {    }}class Class2: Class1{    new public void MethodB()    {    }}class MainClass{    public static void Main(string[] args)    { Class2 o = new Class2(); o.MethodA();    }}}

答案:
BaseClass.MethodA

virtual关键字用于指定属性搜索或方法在派生类中重写.
在基类(父类)中用virtual修饰符声明一个虚方法,然后在在派生类(子类)中用override修饰符覆盖基类虚方法。表明是对基类的虚方法重载。
这种优势在于它可以在程序运行时再决定调用哪一个方法,这就是所谓的“运行时多态”
或者称动态绑定。

3.以下关于 ref 和 out 描述哪些项是正确的?()

正确答案: A C D
A.使用ref参数,传递到ref参数的参数必须是最先初始化
B.使用out参数,传递到out参数的参数必须最先初始化
C.使用ref参数,必须将参数作为ref参数显式传递到方法
D.使用out参数,必须将参数作为out参数显示传递到方法

out、ref都是引用传递,传递后使用都会改变原有的值,引用传递都需要显示传递到方法。

ref是有进有出,即能将参数传进去,函数里对变量的改变在函数结束时会改变值,因此需要在传递进去前初始化。
out是只出不进,即将参数传进去时值是无效的,out会把参数清空,所以无法将一个值从 out 传递进去。

简单滴说

out在方法内部做了分配地址的操作,然后把地址赋给外部的变量,所以原来的值用不上,一定被盖掉,所以可以传没初始化的。
ref直接传递外部地址进方法,也就是上面有人说的有进有出了,因为原来的值一定会用上,所以需要传初始化了的。

4.异常类对象均为System.Exception类或其子类的对象?

5.接口是一种引用类型,在接口中可以声明( ),但不可以声明公有的域或私有的成员变量。

正确答案: A
A.方法、属性、索引器和事件
B.方法、属性信息、属性
C.索引器和字段
D.事件和字段

准确的说,接口只能包括方法;
但是属性、索引器和事件的实质都是方法,所以可以包括他们三个;
1.属性实质是由{get;set;}两个方法组成;
2.索引器其实就是一个属性,常规情况下索引器都是一个名字叫item的属性,下面来看一个索引器的实现:

private string _names={"张",“王”,"李""赵"};public  string this(int index){get{   if(index<0||index>=_names.Length)  {      throw new ArgumentExcoption();     //报异常  }    return _names[indexs];}set{  _names[indexs]=values;}}   //这样使用的时候就可以直接使用索引来访问,尤其可见索引器实质是属性,属性实质是方法;

3.事件本身即为方法

6.说法正确的是

Public struct Person{ String Name; Int Age;}Public  static void Main(){ Hashtable A; Person B; // 其他处理代码}

以下说法正确的是()
正确答案: A
A. A为引用类型的变量,B为值类型的变量
B. A为值类型的变量 ,B为引用类型的变量
C. A和B都是值类型的变量
D. A和B都是引用类型的变量

在 C# 中,结构是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。 struct 关键字用于创建结构。
为了定义一个结构,必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型

7.在C#中,索引器是专门用来访问对象中的数组信息的

正确答案: 错

索引器为c#程序语言中类的一种成员,它使得对象可以像数组一样被索引,使程序看起来更直观,更容易编写。它可以使得像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。
要声明类或结构上的索引器,请使用this关键字,例如:
public int this[int index]
//声明索引器 { //
get and set 访问 }

8.接口中的成员不可以有访问域修饰符,但可以有其它修饰符?

正确答案: 错

类定义中可以使用的访问修饰符组合

none or internal 类只能在当前工程中访问public 类可以在任何地方访问abstract or internal abstract 类只能在当前工程中访问,不能实例化,只能继承public abstract 类可以在任何地方访问,不能实例化,只能继承sealed or internal sealed 类只能在当前工程中访问,不能派生,只能实例化public sealed 类可以在任何地方访问,不能派生,只能实例化

下面介绍一下C#中方法、类等的默认访问修饰符

接口(interface)接口成员访问修饰符默认为public,且不能显示使用访问修饰符。类(class)构造函数默认为public访问修饰符。析构函数不能显示使用访问修饰符且默认为private访问修饰符。类的成员默认访问修饰符为private;枚举(enum)枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。结构(struct)结构成员默认为private修饰符。结构成员无法声明为protected成员,因为结构不支持继承。嵌套类型嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致

9.在C#中,装箱操作是将值类型转化成引用类型?

正确答案: A
A.对
B.错

装箱----值转引 ,只有装了才能更好引用 拆箱----引转值 ,把引用的拆会原型 简单好记

10.在C#中利用Socket进行网络通信编程的一般步骤是:建立Socket侦听、( )、利用Socket接收和发送数据。

正确答案: A
A.建立Socket连接
B.获得端口号
C.获得IP地址
D.获得主机名

11.ASP中Session对象默认有效期为多少分钟?

正确答案: B
A.10
B.20
C.30
D.60

如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改。 对于一个登录到 ASP 应用程序的用户,如果用户在系统默认的时间内未进行其它任何操作,当设置的时间一到便自动撤销这个用户的 Session,这样就可以防止系统的资源被浪费。Session 对象的 TimeOut 属性可以用来设置“过期时间”,已分钟为单位,其设置格式为: Session.TimeOut=MaxTime

12.下列代码的运行结果是()?

在这里插入图片描述
正确答案: B
A. Base.Func Sub.Func
B. Sub.Func Sub.Func Sub.Func
C. Sub.Func Sub.Func
D. Base.Func Sub.Func Sub.Func

解析:
不是构造函数覆盖的,是运行子类构造函数时,子类构造函数的第一行默认隐藏了super(),所以先调用父类构造函数,父类构造函数中有func()函数,而此时真正运行的是子类的构造函数,子类中中有覆盖父类的func()函数,所以会找子类的func函数,而不会使用父类的func函数

13.下面的代码发生了多少次装箱操作()

String.Format("{0}:{1} , {2} , {3}" , 2012 , 1.ToString() , "2" , DateTime.Now);

正确答案: B
A.1
B.2
C.3
D.4

什么是装箱?什么是拆箱?

装箱:基本类型转变为包装器类型的过程。
拆箱:包装器类型转变为基本类型的过程。

14.TextureBrush类包含在()命名空间中

正确答案: C
A. system.drawing.drawing2D
B. system.text
C. system.drawing
D. system.data

15.有关结构体和类的说法不正确的是( )?

正确答案: B
A. 结构体直接继承于System.ValueType
B. 结构体不可以声明构造函数
C. 结构是值类型的,而类是引用类型的
D. 结构体可以继承接口

结构可带有方法、字段、索引、属性、运算符方法和事件。

结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义默认的构造函数。默认的构造函数是自动定义的,且不能被改变。

与类不同,结构不能继承其他的结构或类。
结构不能作为其他结构或类的基础结构。
结构可实现一个或多个接口。
结构成员不能指定为 abstract、virtual 或 protected。
当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
类是引用类型,结构是值类型。
结构不支持继承。
结构不能声明默认的构造函数。

神片云