.net 100题(1)

来源:互联网 发布:淘宝网官网首页 编辑:程序博客网 时间:2024/04/30 02:00

1. 什么是中间语言(IL)?它的作用?

    .net所有语言编译而成的都是IL IL运行于CLR  运行时通过JIT转换成及其语言  IL让多种语言同步开发编程可能

 

2. 什么是装箱和拆箱?

   把值类型变成引用类型称为装箱  装箱总共3步

   1. 在托管堆上分配空间

   2. 将值类型对象字段copy到刚才分配的内存上

   3. 返回引用类型的指针

 

   把引用类型变成值类型称为拆箱

   拆箱过程比较简单 直接指向引用类型字段   在拆箱过程后一般都会紧接着进行字段copy

 

3. C#中接口和类有什么异同?

   区别:

   1. 类可以实例化 接口不可以 接口中所有的方法都是抽象的  抽象类也不可以实例化

   2. 类中可以调用方法(抽象类也可以) 但是接口只是定义了一组公共的方法的声明 不能进行实现

   3. 类只能有1歌父类  但是可以继承自好几个接口

 

 

4. C#中,string str = null  string str = “” 请尽量说明其中的区别

   string 对应的 是引用类型

   string str = null; 表示str指向空

   string str = ""    表示str指向托管堆上的内存 这块内存内容为空

 

 

5. C#中常用的访问形式?它们各自的作用域?

   private              本class                 默认

   protected            本class和派生类

   internal             本程序集

   public               所有程序集

   protected internal   protected + internal

 

6. CTSCLSCLR分别作何解释?

   CTS common type system

   CLS common language specification

   CLR common language runtime

 

7. NET的错误处理机制是什么?

    try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }

    catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }

    finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }

 

    例子:

   

 

    1.try+catch
    程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句

    2.try+catch+finally 
    程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代  码。如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句

    3.try+finally
    程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。 这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常

 

8. .net类和结构的异同?

    class 是引用类型 实例分配在托管堆上

    struct是值类型    实例分配在线程堆栈上

    值类型到引用类型转换 有一个装箱的过程 有性能损耗

 

 

9. C#中与基类通信的关键字什么?作用是什么?

   base: 用于访问基类的公有和protected成员

   1 调用基类已经被override得方法

   2 调用基类构造函数

 

 

10. Override与重载有什么区别?

    override: 重写基类的虚函数 要求参数返回值和基类虚函数一致  多态的表现

    重载:位于同一个类中  要求函数名相同 但是参数不同

 

11. refout有什么区别?

    ref和out都是修饰引用参数

    ref得参数必须要初始化 否则编译错误     作为输入参数

    out用来得到返回值 定义时不需要初始化   作为输入和输出参数

    ref要调用之前分配内存,out在函数内部分配内存

    正确

    class   MyClass  
    {
         public   void   MyMethod(int   i)   {i   =   10;}
         public   void   MyMethod(ref   int   i)   {i   =   10;}
    }
    但以下重载声明是无效的:

    class   MyClass  
    {
         public   void   MyMethod(out   int   i)   {i   =   10;}
         public   void   MyMethod(ref   int   i)   {i   =   10;}
    }

 

12. 什么是强类型系统?

    每个变量和对象必须具有声明类型 C#是强类型语言

 

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

      委托相当于函数指针   事件是委托

 

14. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后

    会被执行 先执行finally 然后再return。

 

15. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

    1. int 转换成short出错

    2. 没错

 

16. using得用法

    1. using + 命名空间名字

    2. using + 别名 = 具体类名

   

    3. using语句 定义一个范围,在范围结束时处理对象

    当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
   

原创粉丝点击