《C#与.NET程序员面试宝典》学习札记

第2章 .NET概述

2.1-6~ .Net Framework / CLR / IL / Assembly 

  • IL:中间语言代码,不同语言(如C#,VB)的基于CLR的编译器编译生成的中间语言字节码,不是计算机直接运行的机器码
  • CLR:公共/通用语言运行库,运行中间语言代码,为不同语言提供统一运行的平台,集成服务(如内存管理,程序集加载,安全性,异常处理,线程同步等等)
  • 程序集(Assembly):由中间语言代码封装而成的元数据集合,由CLR加载
  • .Net Framework:支持多种语言的开发平台,包含CLR(支持多语言的核心运行环境)和.Net Framework类库
  • 托管代码:即IL,Managed Code
  • 非托管代码:该代码无法使用CLR提供的服务(如内存管理),只能直接编译成计算机直接运行的机器码;需要显式使用Windows SDK来完成内存管理等;C#可以创建托管或非托管程序
  • JIT:实时编译,在第一次运行时才将程序集编译转换为本地机器码,具有跨平台特性

第3章 程序设计基础

22. 通过泛型可以解决装箱和拆箱的性能问题

  • 装箱:将值类型转换为 object 类型或由此值类型实现的任何接口类型的过程
  • 拆箱:装箱的逆过程

23. 值类型与引用类型的区别

  • 赋值区别:值类型赋值是创建一个新的同值对象,引用赋值是创建新的引用变量指向同一个值
  • 内存分配:值类型在栈中创建,而引用类型在托管堆中创建
  • 继承结构:值类型不能被继承,同时都继承于System.ValueType;引用类型则可以被继承,不继承于System.ValueType

28. C#的指针类型

  • CLR支持三种指针类型:托管指针,非托管指针,非托管函数指针
  • C#中需要放在unsafe代码块中使用指针

 31. StringBuilder和String的差别

  • String创建的对象实例是不可更改的,因此每次调用String方法的时候都会创建新的字符串(哪怕该字符串的值一直没有变过);但String是引用类型,不是值类型
  • StringBuilder创建的对象则可以被更改,初始化的时候会创建初始大小以容纳字符串需要的内存,每次更新对象时会在相同的内存空间中修改或扩充,不会反复创建新的字符串对象

36. C#中String和string的区别:String是CLR中的类型关键字,而string是C#的类型关键字,在C#编译时会增加代码:using string = System.String

39. Array和ArrayList的区别:前者相当于数组,后者相当于链表

42. C#中is和as运算符的区别:is用于检查给定对象是否为与某个类型兼容,兼容则返回true;as则用于兼容引用类型之间的强制转换,如果无法转换则返回null

第4章 面向对象设计

46. C#中类和结构的区别:

  • 类为引用类型,结构和值类型
  • 类可以被其他类继承,结构不能被其他类或结构继承(但结构可以继承接口)
  • 类有构造和析构函数,可以用protected修饰符;结构则没有,也不能用protected

49. 静态构造方法的特点:

  • 每个类只能有一个静态构造方法,类构造函数前用static修饰(注意没有public)
  • 静态构造方法不能有入参
  • 静态构造方法不会被继承
  • 静态构造方法是最先被执行的构造方法,且在静态成员初始化前执行

53. 委托与事件???

4.3-54~ 委托

待续。。。

posted @ 2018-03-06 22:21  小小木王  阅读(314)  评论(0编辑  收藏  举报