C#与.NET面试必备:经典题目解析

需积分: 9 10 下载量 183 浏览量 更新于2024-09-20 收藏 18KB TXT 举报
"这篇文章主要汇总了C#和.NET框架中的一些经典面试问题,涵盖了.NET类与结构的区别、ASP.NET页面间传递值的方法等关键知识点,旨在帮助C#和.NET开发者准备面试,提升技能水平。" 1. **.NET中类和结构的区别** - 类(Class)是引用类型,实例化后在内存中分配在堆上,可以继承,支持多态,且默认是密封的(Sealed),可以通过new关键字实例化。 - 结构(Structure)是值类型,实例化后在内存中分配在栈上或与之相关的对象中(如数组或结构实例)。结构不支持继承,也不支持多态,且默认是非密封的。 2. **ASP.NET页面之间传递值的几种方式** - QueryString:通过URL参数传递,适用于少量、不敏感的数据。 - Session:基于服务器的存储,可以在多个页面间持久保持数据,但可能导致性能问题。 - Viewstate:将数据序列化并嵌入HTML页面中,数据在页面回发时保持,但会增加页面大小。 - Control State:仅用于控件内部状态的保持,不受Viewstate影响。 - Cookies:客户端存储,可以跨页面传递,但有大小限制且可被篡改。 - Application:全局应用程序变量,所有用户共享,适用于不需要用户特定的数据。 - Server.Transfer:服务器内部跳转,保留原始URL,但不发送HTTP响应到浏览器。 - TempData:适用于MVC框架,数据在一次请求到下一个请求之间有效。 3. **构造函数与析构函数** - 构造函数(Constructor)用于初始化对象,当对象创建时自动调用。可以重载(Overload),即一个类可以有多个构造函数,根据参数不同进行区分。 - 析构函数(Destructor)用于清理对象,.NET中的析构函数以`~`符号标识,主要用于托管代码的清理,但通常由垃圾回收器(GC)处理。析构函数不能被重载,也不能被显式调用。 4. **访问修饰符(Access Modifiers)** - public:任何地方都可以访问。 - private:只能在同一个类内部访问。 - protected:在类及其子类中可以访问。 - internal:在同一程序集内可以访问。 - protected internal:在同一程序集或子类中可以访问。 5. **重写与重载(Override vs Overload)** - 重写(Override)是子类重新定义父类的虚方法,实现多态,需要使用override关键字。 - 重载(Overload)是在同一类中定义多个同名方法,但方法签名(参数列表)不同。 6. **位运算** - 左移运算符(<<):将二进制数的所有位向左移动指定次数,右侧空出的位用0填充。 - 右移运算符(>>):将二进制数的所有位向右移动指定次数,对于正数,左侧空出的位用0填充;对于负数,使用符号扩展,即保留符号位。 7. **异常处理** - try-catch:用于捕获和处理异常,try块中的代码可能会抛出异常,catch块捕获并处理异常。 - finally:无论是否发生异常,finally块的代码总会执行,通常用于释放资源。 - throw:用于抛出自定义异常或重新抛出已捕获的异常。 - Exception类是所有.NET异常的基础类,可以自定义继承Exception的子类来表示特定类型的错误。 8. **集合与容器类** - Collection:基本的集合接口,提供了添加、删除、查找等操作。 - Collections:静态类,提供了一些操作集合的辅助方法,如排序、填充等。 - HashMap与Hashtable:HashMap是泛型类,更安全,效率更高,而Hashtable是旧的非泛型集合,兼容性更好,但效率略低。 - ArrayList与List<T>:ArrayList是非泛型集合,List<T>是泛型集合,推荐使用List<T>,它更安全且性能更好。 9. **接口与继承** - interface:接口定义一组方法,不包含实现,实现接口的类必须实现接口中所有方法。 - class:类可以实现多个接口,但只能继承一个基类。 10. **BS架构通信方式** - Session:存储用户特定数据,数据存储在服务器端,跨页面有效。 - Cookie:客户端存储,跨页面有效,但数据量有限且易被篡改。 - Application:全局应用程序变量,所有用户共享。 - this.Server.Transfer:服务器内部转移,不返回HTTP响应到客户端。 - QueryString:URL参数传递,可见且数量有限。 - Postback:ASP.NET中通过表单提交进行页面间通信。 11. **.NET垃圾回收(GC)** - GC自动管理内存,回收不再使用的对象占用的内存。 - 无需手动释放内存,但可通过 Dispose 和 Finalize 实现资源的及时释放。 - 使用using语句块可以确保资源在使用完毕后及时释放。 12. **字符串操作** - 字符串在C#中是不可变的,每次修改都会创建新的字符串对象。 - StringBuilder类用于大量字符串拼接,减少内存创建,提高性能。 13. **foreach与for循环** - foreach用于遍历集合,如数组、列表等,简化代码,无需关心索引。 - for循环更适合需要精确控制循环次数的情况。 14. **New关键字** - new操作符用于实例化对象,分配内存并调用构造函数。 - new modifier用于隐藏继承自基类的成员,防止名称冲突。 15. **委托与事件** - 委托是类型安全的函数指针,可以将方法作为参数传递。 - 事件是基于委托的发布/订阅模式,用于对象间的通信。 以上知识点涵盖了C#和.NET开发中的基础和核心概念,是面试中常见的考察点。理解并掌握这些内容,有助于提升开发者在实际项目中的应用能力。