有没有可能在 dart 中有一个私有构造函数?

我可以在 TypeScript 中执行以下操作

class Foo {
private constructor () {}
}

所以这个 constructor只能从类本身内部访问。

如何在 Dart 中实现相同的功能?

30531 次浏览

只需创建一个以 _开头的命名构造函数

class Foo {
Foo._() {}
}

那么构造函数 Foo._()将只能从它的类(和库)访问。

没有任何代码的方法必须是这样的

class Foo {
Foo._();
}

是的,这是可能的,要增加更多的信息围绕它。

constructor可以通过使用(_)下划线操作符来实现私有,这意味着省道中的私有。

因此类可以声明为

class Foo {
Foo._() {}
}

所以现在福班没有缺省构造函数了

Foo foo = Foo(); // It will give compile time error

同样的理论也适用于类的扩展,如果私有构造函数在 单独的文件。中声明,也不可能调用这个私有构造函数

class FooBar extends Foo {
FooBar() : super._(); // This will give compile time error.
}

但是如果我们分别在同一个类或文件中使用它们,那么上述两种功能都可以工作。

  Foo foo = Foo._(); // It will work as calling from the same class

还有

 class FooBar extends Foo {
FooBar() : super._(); // This will work as both Foo and FooBar are declared in same file.
}

使用抽象类。 因为不能实例化抽象类

您可以创建以下类以获取单例实例

class Sample{
factory Sample() => _this ??= Sample._();
Sample._(); // you can add your custom code here
static Sample _this;
}

现在在 main 函数中,您可以调用示例构造函数

void main(){
/// this will return the _this instace from sample class
Sample sample = Sample();

}