当前位置: 首页 > article >正文

C#对象初始化语句:优雅创建对象的黑科技

📌 核心概念速览

对象初始化语句(Object Initializer)是C#中一种简洁高效的语法糖,允许在创建对象时直接初始化其公有字段或属性,无需依赖构造函数的重载。它的本质是对构造过程的扩展,尤其适合需要灵活设置对象状态的场景。

🛠️ 两种语法形式

无参构造+初始化

Point pt = new Point { X = 5, Y = 6 };

带参构造+初始化

Point pt = new Point(arg1, arg2) { X = 5, Y = 6 };

(先通过构造函数初始化,再覆盖或补充字段值)

⚠️ 关键注意事项

访问权限要求

  • 被初始化的字段或属性必须是公有(public),否则编译器会报错。
  • (示例中的X和Y均为public字段)

执行顺序问题

  • 初始化语句晚于构造函数执行。若构造函数已对字段赋值,对象初始化语句会覆盖原有值。
  • (示例中的Point类构造函数隐含设置X=1, Y=2,但pt2通过初始化语句将其覆盖为5,6)

📝 代码解析

public class Point 
{public int X = 1;  // 默认值 public int Y = 2;  // 默认值 
}// 使用示例 
Point pt1 = new Point();               // X=1, Y=2 
Point pt2 = new Point { X = 5, Y = 6 }; // X=5, Y=6 
  • pt1:仅调用默认构造函数,保留字段初始值。
  • pt2:构造后通过初始化语句重新赋值,覆盖默认值。

🌟 应用场景与优势

简化多属性初始化

var user = new User { Name = "Alice", Age = 25, Email = "alice@example.com"  
};

(避免编写多个构造函数重载)

匿名类型必备

var data = new { Id = 1, Value = "Test" };

与集合初始化器配合

var points = new List<Point> {new Point { X = 1, Y = 2 },new Point { X = 3, Y = 4 }
};

💡 设计原则与陷阱

  • 封装性权衡:过度暴露公有字段可能破坏封装性,建议优先使用**属性(Property)**而非公有字段。
  • 不可变对象限制:若字段/属性为readonly,则无法通过对象初始化语句赋值。

📣 总结

对象初始化语句是C#面向对象编程中的一把利器,它能:

  • 提升代码可读性
  • 减少冗余构造函数
  • 支持动态初始化组合
http://www.lryc.cn/news/2384418.html

相关文章:

  • 【计算机网络】TCP如何保障传输可靠性_笔记
  • Robust Kernel Estimation with Outliers Handling for Image Deblurring论文阅读
  • Android Studio 开发环境兼容性检索(AGP / Gradle / Kotlin / JDK)
  • html主题切换小demo
  • AI架构职责分配——支持AI模块的职责边界设计
  • git@gitee.com: Permission denied (publickey). fatal: 无法读取远程仓库
  • CARIS HIPS and SIPS 12.1是专业的多波束水深数据和声呐图像处理软件
  • Docker端口映射与容器互联
  • 在 Ubuntu 24.04 LTS 上 Docker 部署 DB-GPT
  • 使用 Docker 搭建 PyWPS 2.0 服务全流程详解
  • Axure高保真CRM客户关系管理系统原型
  • 自学嵌入式 day 23 - 数据结构 树状结构 哈希表
  • JavaScript进阶(十二)
  • Honeywell CV-DINA-DI1624-2A 数字输入模块
  • 中文域名25周年,取得哪些里程碑式的进展?
  • HTTP协议接口三种测试方法之-postman
  • 【Linux cmd】查看 CPU 使用率的几个命令
  • 架空线路监控系统是针对高压架空输电线路设计的一种安全监测解决方案
  • Kotlin Compose Button 实现长按监听并实现动画效果
  • 应对进行性核上性麻痹,健康护理铸就温暖防线
  • python邮件地址检验 2024年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • CAD球体功能梯度材料3D插件
  • 自制操作系统day9内存管理(cache、位图、列表管理、内存的释放)(ai辅助整理)
  • JavaWebsocket-demo
  • 特征学习:赋予机器学习 “慧眼” 的核心技术
  • 3D个人简历网站 7.联系我
  • 软考中级软件设计师——计算机系统篇
  • 甘特图(项目计划图)
  • Java流式处理-Steam详解
  • windows服务器部署jenkins工具(一)