1.C#中堆和栈的区别?
栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。堆:一般由程序员分配释放。用 new、malloc等分配内存函数分配得到的就是在堆上。
存放在栈中时要管存储顺序,保持着先进后出的原则,他是一片连续的内存域,有系统自动分配和维 护;.
堆:是无序的,他是一片不连续的内存域,有用户自己来控制和释放,如果用户自己不释放的话,当内 存达到一定的特定值时,通过垃圾回收器(GC)来回收。
栈内存无需我们管理,也不受GC管理。当栈顶元素使用完毕,立马释放。而堆则需要GC清理。
使用引用类型的时候,一般是对指针进行的操作而非引用类型对象本身。但是值类型则操作其本身
2.C#中的委托是什么?事件是不是一种委托?
委托的本质是一个类,委托是将一种方法作为参数代入到另一种方法。事件是委托的实例,事件是一种 特殊的委托。//比如:onclick事件中的参数就是一种方法。
3.C#静态构造函数特点是什么?
最先被执行的构造函数,且在一个类里只允许有一个无参的静态构造函数
执行顺序:静态变量>静态构造函数>实例变量>实例构造函数
4.CTS、CLS、CLR分别作何解释
CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
CTS:Common Type System 通用类型系统。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了自己的类型,.NET通过CTS提供了公共的类型,然后翻译生成对应的.NET类型。
CLS:Common Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语 法,.NET通过CLS提供了公共的语法,然后不同语言翻译生成对应的.NET语法。
CLR:Common Language Runtime 公共语言运行时,就是GC、JIT等这些。有不同的CLR,比如服务器
CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行IL。