- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
C#面试题及答案(实战版)
一、基础语法类(初级工程师)
问:string和StringBuilder的区别?实际项目中什么时候用后者?
答:string是不可变字符串,每次拼接、修改都会创建新对象,频繁操作时内存开销大;StringBuilder是可变字符串,内部维护字符数组,修改时不会频繁创建新对象,效率更高。实际项目中,当需要循环拼接字符串(比如拼接100次以上日志、拼接大量数据行)、或字符串长度不确定且修改频繁时,优先用StringBuilder。比如批量生成SQL语句、组装导出文件的内容时。
问:值类型和引用类型的存储区别?举3个常见的值类型和引用类型。
答:值类型直接存储数据本身,存在栈上(局部变量)或结构体/类的字段中(随对象存在堆上);引用类型存储的是数据的内存地址(引用),对象本身存在堆上,栈上只存地址。常见值类型:int、DateTime、bool;常见引用类型:string、List、自定义类(如Person)。注意:string虽为引用类型,但具有不可变性,行为类似值类型。
问:try-catch-finally中,finally一定会执行吗?举个不会执行的场景。
答:大部分情况会执行(即使try/catch里有return、break),但有例外:①程序被强制终止(比如调用Environment.Exit(0)、进程被杀死);②线程意外终止(比如主线程退出导致子线程中断);③发生无限循环或死锁,finally代码块无法被执行到。
二、面向对象类(中级工程师)
问:C#中抽象类(abstractclass)和接口(interface)的核心区别?分别用在什么场景?
答:核心区别有3点:①抽象类可以有实现方法、字段、构造函数,接口只能有抽象方法(C#8.0+支持默认实现,但不推荐过度使用)、属性、事件,无字段;②类只能单继承抽象类,但可以实现多个接口;③抽象类体现“is-a”关系(比如Dog是Animal),接口体现“has-a”能力(比如Dog实现IRunnable接口)。场景:抽象类用于定义同一类事物的共性基础(比如Animal类定义Eat()方法,Dog、Cat继承后重写);接口用于定义不同类的共同能力(比如IRunnable定义Run()方法,Dog、Car都可实现)。
问:什么是委托和事件?事件和委托的关系是什么?
答:委托是“方法的类型安全指针”,本质是封装了一个或多个方法的引用,能实现方法的间接调用(解耦调用者和被调用者);事件是基于委托的“发布-订阅模式”封装,限制了委托的访问权限(外部只能订阅/取消订阅,不能直接调用委托、赋值覆盖),更安全。关系:事件依赖委托作为“事件处理方法的签名模板”,比如定义事件publiceventActionOnCompleted;中,Action就是委托类型,订阅者只能通过OnCompleted+=方法名注册,不能直接写OnCompleted()调用(除非在类内部)。实际用途:比如按钮点击事件、消息通知(如订单支付成功后通知库存、物流系统)。
问:override和new关键字的区别?分别用于什么场景?
答:override用于“重写”父类的虚方法(virtual)、抽象方法(abstract),要求方法签名(返回值、参数、名称)完全一致,子类重写后,通过父类引用调用子类对象时,执行的是子类的重写方法(多态);new用于“隐藏”父类的方法(无论父类方法是否虚方法),子类用new定义的方法与父类方法签名一致时,会屏蔽父类方法,通过父类引用调用子类对象时,执行的是父类的方法,通过子类引用调用时执行子类的new方法。场景:override用于多态场景(比如Animal的Eat()是virtual,Dog重写为吃骨头,Cat重写为吃鱼);new用于子类需要定义与父类同名但逻辑无关的方法(慎用,容易造成混淆,一般只在无法修改父类代码时临时使用)。
三、进阶特性类(中级/高级工程师)
问:async/await是什么?它的底层原理是什么?使用时需要注意什么?
答:async/await是C#5.0引入的异步编程语法糖,简化了基于Task的异步代码编写(无需手动处理Task的ContinueWith链式调用),让异步代码看起来像同步代码,可读性更高。底层原理:async标记的方法会被编译器编译为状态机(IAsyncStateMachine接口实现),await关键字是状态机的“暂停点”——当await的Task未完成时,方法会
您可能关注的文档
最近下载
- 中国石化工程建设标准建设项目hse管理手册、管理程序、作业指导书_.docx VIP
- 统编版2025年专题07 修辞与仿写 五升六语文暑假专项提升试卷.pdf
- 烟气热值计算.xls VIP
- 最新ISO9001-2015质量管理体系及FCCA质量技术验厂全套文件.docx
- 升罐乙烯发生器说明书.docx
- 辽宁城市道路挖掘修复费收费标准.doc VIP
- 【中小学】上下册第二章第三节第3课时 黄河的治理和开发课件公开课教案教学设计课件.pptx VIP
- SK水环真空泵说明书.docx VIP
- 2025至2030中国动力电池回收利用产业链价值与政策环境研究报告.docx
- 人工智能有效赋能高中历史教学实践.pdf VIP
原创力文档


文档评论(0)