C# - WPF 面试高频题及详细答案(完整版)_第1页
C# - WPF 面试高频题及详细答案(完整版)_第2页
C# - WPF 面试高频题及详细答案(完整版)_第3页
C# - WPF 面试高频题及详细答案(完整版)_第4页
C# - WPF 面试高频题及详细答案(完整版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#/WPF面试高频题及详细答案(完整版)适用岗位:.NET桌面开发、WPF开发工程师题型:基础问答、原理剖析、区别对比、实操问题、性能优化一、C#基础面试题(桌面开发高频)1、简述C#中值类型和引用类型的区别?标准答案:1、存储位置不同:值类型数据存储在栈中,分配速度快;引用类型的对象实例存放在堆中,栈中只存放对象的地址引用。2、赋值方式不同:值类型赋值是值拷贝,两个变量互不影响;引用类型赋值是地址拷贝,多个变量指向同一个堆对象,一个修改会影响其他。3、生命周期不同:值类型随方法执行结束立即释放;引用类型由垃圾回收机制统一回收。4、常见类型:值类型:int、double、bool、struct、枚举引用类型:string、class、数组、集合、自定义类2、string和StringBuilder的区别?为什么字符串拼接多用StringBuilder?标准答案:string是不可变字符串,一旦创建就无法修改。每次拼接、修改字符串,都会生成一个新的字符串对象,频繁操作会产生大量内存垃圾,性能很差。StringBuilder是可变字符串,内部维护字符缓冲区,修改、拼接时不会频繁创建新对象,内存开销小、速度快。使用场景:少量字符串拼接直接用string;循环、大量拼接必须用StringBuilder。3、ref和out关键字的区别?标准答案:1、ref是传入参数,调用方必须先初始化变量,方法内外双向传值;2、out是传出参数,调用方无需初始化,方法内部必须给参数赋值,主要用于方法返回多个结果。简单总结:ref带值进去、可带回新值;out只负责把值带出来。4、说说你对C#泛型的理解,有什么好处?标准答案:泛型可以定义通用的类、方法、集合,不用指定具体类型,使用时再确定类型。好处主要有三点:1、类型安全:编译时校验类型,避免装箱拆箱和运行时类型报错;2、提升性能:避免值类型装箱拆箱损耗;3、代码复用:一套代码适配多种数据类型,不用重复写重载方法。5、装箱和拆箱是什么?有什么性能问题?标准答案:装箱:值类型转换为object引用类型,会在堆中开辟新内存,拷贝数据。拆箱:object转回值类型,需要类型校验、读取堆数据。频繁装箱拆箱会产生大量临时对象,增加垃圾回收压力,造成程序卡顿,日常开发尽量用泛型集合规避这个问题。6、简述override和new的区别标准答案:override:重写父类虚方法,实现多态,父类指针调用会执行子类逻辑。new:隐藏父类方法,不属于重写,只是新建一个同名方法,父类指针调用依然执行父类逻辑,不会触发多态。二、WPF核心基础面试题1、WPF和WinForm最大的区别是什么?标准答案:1、渲染机制不同:WinForm基于GDI+,系统原生控件,界面样式固定;WPF基于DirectX硬件加速渲染,所有控件都是自绘的,支持复杂动画、特效、自定义样式。2、架构思想不同:WinForm是传统事件驱动;WPF是MVVM数据驱动,界面和逻辑可以解耦。3、样式灵活性:WPF支持模板、样式、资源字典,界面高度可定制;WinForm自定义界面成本极高。4、分辨率适配:WPF矢量绘图,高清屏适配更好,无锯齿模糊。2、什么是WPF依赖属性?和普通属性有什么区别?标准答案:依赖属性是WPF独有的属性体系,不直接存字段,依赖属性系统统一管理值。和普通属性对比优势:1、支持数据绑定,普通属性无法直接绑定;2、支持样式、触发器、动画、资源继承;3、值优先级机制:动画值>本地值>样式值>默认值;4、节省内存,多个控件可共享默认值。日常开发中,只有依赖属性才能做绑定、动画、样式控制。3、WPF路由事件有哪三种?区别是什么?标准答案:1、冒泡事件(Bubble):事件从触发控件向上传递到父容器,最常用,如Click、MouseDown;2、隧道事件(Tunnel):事件从顶层父容器向下传递到触发控件,命名一般带Preview,如PreviewMouseDown;3、直接事件(Direct):只在当前控件触发,不传递,类似普通WinForm事件。隧道事件优先执行,然后再执行冒泡事件,可以在Preview阶段拦截事件。4、WPF布局容器常用的有哪些?各自适用场景?标准答案:1、Grid:网格布局,支持行和列,自适应布局首选,页面整体布局多用Grid;2、StackPanel:堆叠布局,横向或纵向自动排列,适合列表、按钮组;3、DockPanel:停靠布局,适合顶部菜单、底部状态栏、侧边栏布局;4、WrapPanel:自动换行布局,控件排满自动换行,适合标签、图片列表;5、Canvas:绝对坐标布局,固定坐标定位,适合绘图、动画、精准定位场景。5、WPF资源字典的作用是什么?如何全局共用样式?标准答案:资源字典用来统一存放样式、模板、颜色、画笔、转换器等资源。作用:统一界面风格、减少重复代码、方便整体换肤、后期维护简单。全局共用方式:在App.xaml中引入资源字典,整个项目所有窗口、页面都可以直接调用资源,无需重复引用。三、MVVM架构面试重点(必考)1、详细说说MVVM模式,以及各层职责标准答案:MVVM是WPF主流架构,目的是界面与业务逻辑完全解耦,方便维护、单元测试。1、V(View视图):只负责展示界面,XAML页面,不写任何业务逻辑、判断逻辑;2、VM(ViewModel视图模型):连接界面和数据,存放属性、命令、业务逻辑,不依赖界面;3、M(Model模型):数据实体、数据接口、数据库操作、网络请求,只负责数据处理。核心特点:数据驱动界面,界面变化由数据变化自动刷新。2、INotifyPropertyChanged接口的作用?标准答案:实现该接口后,属性修改时可以触发属性变更通知,让WPF绑定的界面自动刷新数据。如果不实现这个接口,后台属性修改了,前台界面不会同步更新。日常开发中所有需要绑定展示的属性,都需要在set方法中触发PropertyChanged事件。3、WPF命令ICommand的作用,为什么不用点击事件直接写逻辑?标准答案:ICommand是MVVM专用命令机制,用来替代后台Click事件。优势:1、逻辑写在ViewModel中,界面无代码后置,彻底解耦;2、自带CanExecute方法,可以自动控制按钮是否可用;3、命令可复用、可单元测试,原生事件无法做到。项目中一般自定义RelayCommand实现命令封装。4、Binding的五种绑定模式你了解吗?标准答案:1、OneWay单向绑定:数据变界面变,界面修改不会更新数据(最常用);2、TwoWay双向绑定:数据和界面互相更新,输入框、编辑控件常用;3、OneTime一次性绑定:初始化赋值后不再更新,节省性能;4、OneWayToSource反向绑定:界面修改更新数据源,数据修改不刷新界面;5、Default默认模式:根据控件属性自动适配。5、DataContext是什么?绑定找不到数据一般是什么问题?标准答案:DataContext是绑定的数据源上下文,所有绑定默认都会去找当前控件DataContext中的属性。前台绑定不生效、报错,90%原因是:1、未给页面/控件赋值DataContext;2、属性未定义、属性非public;3、没有实现INotifyPropertyChanged;4、绑定路径名称拼写错误。四、WPF进阶与性能优化面试题1、WPF界面卡顿、刷新慢,常见原因和优化方案?标准答案:常见问题:1、UI线程做大量循环、数据计算、网络请求、文件读写;2、列表数据量大,未虚拟化,一次性加载所有UI元素;3、重复创建大量控件、频繁刷新绑定;4、复杂动画、阴影、特效过多加重渲染压力。优化方案:1、耗时操作全部放到子线程,UI更新通过Dispatcher切回UI线程;2、列表开启虚拟化VirtualizingStackPanel,只渲染可视区域控件;3、避免频繁修改绑定属性,批量更新数据;4、减少不必要的阴影、模糊、动画,静态资源缓存复用;5、使用ObservableCollection做集合更新,不要频繁重新赋值集合。2、Dispatcher的作用是什么?标准答案:WPF规定:只有UI主线程可以操作UI控件,子线程禁止直接修改界面。Dispatcher是UI线程调度器,子线程需要刷新界面时,通过Dispatcher.Invoke或BeginInvoke将操作抛回UI线程执行,避免跨线程报错。3、ObservableCollection和List的区别?标准答案:List增删改数据后,界面不会自动刷新,无通知机制。ObservableCollection自带集合变更通知,增删数据会自动触发界面刷新,是WPF列表绑定专用集合。注意:修改集合内部对象属性,依然需要属性通知,集合本身不会监听对象内部变化。4、WPF样式Style和模板Template的区别?标准答案:Style:只修改控件原有属性,比如颜色、字体、大小、边距,不改变控件结构。Template(控件模板):彻底重构控件结构,可以删掉原有布局,自定义全新外观、结构、动画,是WPF自定义控件的核心。五、实战常见问题面试题1、子线程能不能直接修改WPF界面?为什么?怎么解决?标准答案:不能。WPF控件属于UI线程专属资源,为了保证线程安全,禁止跨线程直接访问、修改控件,直接操作会直接抛异常。解决方式:通过Dispatcher调度,将UI更新操作投递到主线程执行。2、MVVM模式下,窗口关闭、弹窗怎么实现?标准答案:ViewModel不能直接操作窗口(禁止持有Window对象引用,违反解耦原则)。标准做法:通过事件聚合器/委托事件/接口服

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论