二十道经典C#面试题

时间:2021-02-26 14:19:40

1、在下面的代码中,如何引用命名空间fabulous中的great? 
namespace fabulous{// code in fabulous namespace}
namespace super{ namespace smashing{// great name defined }}

   答:super.smashing.great

2、字符串“supercalifragilisticexpialidocious”对于string变量是否太长?为什么?
   答:否,在C#中,对于字符串的长度没有限制。

3、概述反射和序列化?
   答:反射:反射提供了封装程序集,模块和类型对象,可以用反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象类型里获取类型,然后调用类型的方法或访问字段和属性。
   序列化:将对象转换为另一种媒介传输的格式过程。如,序列化一个对象,用Http通过internet在客户端和服务器之间传递该对象,在另一端用反序列化从该流中重新得到对象。 

4、C#中的委托是什么?事件是不是一种委托呢?
   答:委托是一种安全的类似与函数指针,但是它比指针要安全的多,它可以把方法作为一个参数传递给另一个方法,可以理解为指向函数的引用。事件是一种消息机制,它是一种委托,委托不带方法体。

5、C#中索引器实现过程,是否只能根据数字索引? 
   答:不是的,可以是任意类型。
6、请你说说.NET中类和结构的区别?
   答:结构和类具有相似的语法,但结构受到的限制比类要多。结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数。结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是应用类型,改变其变量的值会改变其原值。申明结构用Struck关键字,申明类用class关键字,向方法传递结构是时是通过值传递的,而不是通过引用。与类不同,结构的实例化可以不使用New关键字。类可以实现接口。

7、如果有两个整数存储在变量var1和var2中,什么样的布尔测试可以查看它们其中一个是否大于10?
   答:(var1 > 10)^(var2 > 10)。

8、在c#中,using和new这两个关键字有什么意义?
   答:using 引入名称空间或者使用非托管资源。
   new 新建实例或者隐藏父类方法。

9、const和readonly有什么区别?
   答:const关键字用来声明编译时常量。
   readonly用来声明运行时常量。

10、System.String 和System.StringBuilder有什么区别?
   答:System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。
11、请在C#中举例说明new关键字可用于那些方面?
   答:在C#中,new关键字可用作运算符或修饰符。作为运算符用于在堆上创建对象和调用构造函数。作为修饰符用于隐藏基类成员的继承成员。

12、sealed关键字的作用是什么?什么情况需要使用sealed关键字?
   答:sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

13、在C#中,哪些关键字可以用于版本控制?
   答:override关键字和new关键字均可用于版本控制。
   在C#中,默认情况下方法不是虚拟的。若要使方法成为虚拟方法,必须在基类的方法声明中使用virtual修饰符。然后,派生类可以使用override关键字重写基类中的虚拟方法,或使用new关键字隐藏基类中的虚拟方法。如果override关键字和new关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法。 

14、分别写出下列语句执行的结果。
  (1)Console.WriteLine("{0}--{0:p}good",12.34F); 
  (2)Console.WriteLine("{0}--{0:####}good",0); 
  (3)Console.WriteLine("{0}--{0:00000}good",456); 
  答:执行结果分别为: 
  (1)12.34--1,234.00%good 
  (2)0--good 
  (3)456--00456good 

15、C#中的数组类型有何特点?
   答:C#中的数组类型的特点包括:
 (1) 数组一般用于存储同一种类型的数据,包括Object类型。
 (2) 数组是一种引用类型,而不是值类型。
 (3) C#中除了可以有一维数组、多维数组外,还有交错型数组。

16、错误和异常有什么区别,为什么要进行异常处理,用于异常处理的语句有哪些?
   答:错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象。当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程。换句话说,错误是一个事件,而异常是该事件创建的对象。
  当使用短语“产生异常”时,表示存在问题的方法发生错误,并创建异常对象(包含该错误的信息及发生的时间和位置)来响应该错误。导致出现错误和随后异常的因素包括用户错误、资源失败和编程逻辑失败。这些错误与代码实现特定任务的方法有关,而与该任务的目的无关。
  如果不进行异常处理,即不对错误做出响应,程序的健壮性就会大打折扣,甚至无法保证正常运行,所以必须要进行异常处理。
  用于异常处理的语句有:try-catch语句、try-catch-finally语句、throw语句。

17、C#中不同整型之间进行转换的原则是什么?
   答:在整型之间进行转换时,小范围类型可以隐式转换为大范围类型,但大范围类型转换为小范围类型时需要使用显式转换。 
18、简述装箱和拆箱的过程。   
   答:装箱是将值类型隐式地转换为object类型或者转换为由该值类型实现了的接口类型。装箱一个数值会为其分配一个对象实例,并把该数值拷贝到新对象中。拆箱是显式地把object类型转换成值类型,或者把值类型实现了的接口类型转换成该值类型。 

19、什么是命名空间?命名空间和类库的关系是什么?  
   答:名称空间是对类的一种逻辑上的分组,即将类按照某种关系或联系划分到不同的名称空间下。
  名称空间又可以包含其它的名称空间,例如System.Windows.Forms,是指System名称空间下有Windows名称空间,Windows名称空间下有Forms名称空间。 

20、可以用C#编写哪些类型的应用程序?
   答:控制台应用程序,Windows应用程序,水晶报表应用程序,ASP.NET Web应用程序,ASP.NET Web服务应用程序,ASP.NET 水晶报表Web应用程序和智能设备应用程序等。