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

探究构造函数public Point(double x, double y) => (X,Y)=(x,y)生效的规则组合

拆解C#表达式体构造函数(X, Y) = (x, y)的运行机制

一、涉及的核心C#特性

  • 表达式体构造函数:C# 6起支持用=>简化构造函数实现,当构造函数逻辑仅单条语句时,可替代传统的大括号包裹写法。
  • 成员解构赋值语法:C# 7新增的语法糖,允许将元组元素直接批量赋值给类的可写成员(属性/字段),无需手动逐个赋值。

二、逐步骤拆解运行逻辑

  1. 当Point构造函数被调用时,接收传入的两个double类型参数x和y。
  2. 执行表达式右侧的(x, y):编译器会创建一个ValueTuple<double, double>类型的匿名值元组,将参数x和y的值分别存入元组的两个元素中。
  3. 识别表达式左侧的(X, Y):这是C#的解构赋值目标标记,编译器会将X和Y识别为当前Point实例的可写成员(比如自动属性public double X { get; set; }或字段public double X;),需要分别接收元组的两个元素。
  4. 执行赋值操作=:编译器自动将元组的第一个元素值赋值给X,第二个元素值赋值给Y,等价于手动执行两条语句:X = x; Y = y;。
  5. 表达式体构造函数执行完成,对象初始化流程结束。

三、澄清常见疑惑

  • (X, Y)并非元组或Lambda特性:它是解构赋值的目标语法,和Lambda无关——Lambda只是表达式体构造函数的写法载体,核心逻辑是成员解构赋值。
  • 无需实现解构方法:这个语法不需要Point类实现任何解构接口或自定义解构方法,是编译器直接处理的语法糖,专门用于将元组元素批量赋值给类的成员。

内容的提问来源于stack exchange,提问作者J. Mini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:46:07