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. CTS,CLS,CLR分别作何解释?
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. ref与out有什么区别?
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也很方便。