主构造函数参数名称是否需要加下划线?两种写法哪种正确?
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
相关产品推荐
相关产品推荐

