基础试题3
1. 值类型和引用类型有什么区别?
解答
值类型变量赋值时复制数据副本,引用类型赋值时复制对象引用。值类型在堆栈上分配内存,引用类型在堆上分配内存。值类型有共同基类System.ValueType
,引用类型默认进行引用比较,除非重写Equals()
方法。
2. 堆和栈的区别是什么?
解答
堆由程序员分配和释放,可能由GC回收;栈由操作系统自动分配和释放,用于存放函数参数和局部变量。堆使用二级缓存,生命周期由垃圾回收算法决定;栈使用一级缓存,在调用时分配空间,调用完毕立即释放。
3. 结构和类的主要区别有哪些?
解答
结构是值类型,类是引用类型。结构的成员都是public,类可以有其他访问限定符。结构不能继承,类可以。结构不能定义无参数构造函数,类可以。
4. 类的访问限定符有哪些?
解答
Partial
: 类分成两个文件。Public
: 访问不受限制。Internal
: 同一程序集内可访问。
5. 面向对象的三个基本特征是什么?
解答
封装:将事物封装成类,隐藏数据,提供方法。继承:允许新类继承现有类的特性。多态:允许方法重载和覆盖,实现不同的行为。
6. .NET托管资源与非托管资源的区别是什么?
解答
托管资源由CLR分配和释放,包括普通托管资源和实现了IDisposable
接口的非普通托管资源。非托管资源不受CLR管理,如文件、数据库连接等,需要显式释放。
7. 抽象类和接口的相同点和不同点是什么?
解答
相同点:都不能被实例化,都包含未实现的方法,派生类必须实现这些方法。不同点:抽象类可以有实现,接口不能有实现;一个类可以实现多个接口,但只能继承一个类;接口定义行为规范,抽象类抽象不可变行为。
8. 类的设计原则有哪些?
解答
开闭原则:对扩展开放,对修改封闭。替换原则:子类应能替换父类。依赖原则:依赖抽象而非细节。接口分离原则:使用多个专门的接口优于单一接口涵盖多个功能。单一职责原则:一个类只完成一种职责。
9. 静态类和静态构造函数的特点是什么?
解答
静态类包含的属性和方法都是静态的,不能创建实例。静态构造函数用于初始化静态字段和属性,在类首次使用前执行,不能有任何参数。
10. 扩展方法的定义和使用场景是什么?
解答
扩展方法是静态方法,定义在静态类中,第一个参数用this
关键字修饰。用于为没有源代码的类添加方法。
11. 委托的主要应用场景有哪些?
解答
实现同步方法的异步调用,实现对控件的异步或并发访问。
12. 泛型类型的默认值如何设置?
解答
使用default(T)
来设置泛型类型的默认值。
13. 匿名方法和lambda表达式的区别是什么?
解答
匿名方法不单独定义仅有委托引用的方法。lambda表达式用=>
运算符,左边为参数列表,右边为实现代码。
14. 闭包是什么?
解答
通过lambda表达式可以访问表达式块外部的变量。