You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅含基础字段的LoginViewModel、RegisterViewModel用struct还是class更合适?

关于Login/RegisterViewModel用struct还是class的问题

结论先行:对于仅包含string UserName和string Password的这类ViewModel,用struct不是良好实践,优先选择class更稳妥,具体原因如下:

  • 引用类型字段的struct无轻量化优势
    你的ViewModel里的字段都是string(引用类型),struct复制时只会拷贝引用地址(64位系统下每个引用占8字节,整个struct才16字节),和class的对象头+引用的内存开销相比,差距可以忽略不计,完全体现不出struct所谓的"轻量"价值。

  • ViewModel的使用场景不匹配struct特性
    ViewModel通常会在MVVM架构中被用于数据绑定、跨层传递,甚至可能需要修改属性值。struct是值类型,传递时默认会生成副本:

    • 如果在方法里修改副本的字段,原对象不会有任何变化,除非用ref/out关键字传递,这会增加代码复杂度,还容易引发意想不到的bug;
    • 多数MVVM框架的绑定系统是为class设计的,struct作为值类型在属性变更通知(比如实现INotifyPropertyChanged)时会有额外麻烦,修改属性需要重新赋值整个struct,不符合常规开发习惯。
  • 复制性能的顾虑完全没必要
    这种小体积的struct复制操作,现代CPU处理起来极快,性能开销远低于业务逻辑、IO操作等环节的消耗。反而struct带来的代码维护成本、潜在bug风险,远比这点性能收益影响大。

RegisterViewModel的情况完全相同,同样不适合定义为struct。

总结:直接用class定义这类ViewModel才是符合MVVM常规实践的选择,既能避免不必要的坑,性能上也不会有任何问题。

内容的提问来源于stack exchange,提问作者amir.wpf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:16:11