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

主构造函数参数名称是否需要加下划线?两种写法哪种正确?

Dart两种主构造函数写法的正确性说明

两种写法都是正确的,核心区别在于是否生成类的私有/公共实例字段,具体如下:

  • 带下划线的写法:class MyClass(IInjectable _injectable) {}
    这是Dart的简洁构造语法,会自动在类中生成一个私有实例字段_injectable(Dart中下划线开头的标识符为类私有),该字段仅能在类内部使用,外部无法访问。
    等价于手动实现的代码:

    class MyClass {
      final IInjectable _injectable;
      MyClass(this._injectable);
    }
    
  • 不带下划线的写法:class MyClass(IInjectable injectable) {}
    同样是简洁构造语法,会自动生成公共实例字段injectable,外部代码可以直接访问这个字段。
    等价于手动实现的代码:

    class MyClass {
      final IInjectable injectable;
      MyClass(this.injectable);
    }
    

额外补充:如果不需要将构造函数参数转为类的实例字段,只是在构造函数内部临时使用,可以给参数加上final修饰(推荐),这样不会生成类字段:

class MyClass(final IInjectable injectable) {
  // 仅构造函数内可使用injectable,类中无对应实例字段
}

选择哪种写法完全取决于你的需求:需要私有内部字段选带下划线的,需要公共字段选不带下划线的。

内容的提问来源于stack exchange,提问作者Ryunten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:22:08