在dart中有私有构造函数吗?

disho6za  于 2023-03-05  发布在  其他
关注(0)|答案(5)|浏览(163)

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

class Foo {
  private constructor () {}
}

因此只能从类本身内部访问constructor
如何在Dart中实现相同的功能?

c3frrgcw

c3frrgcw1#

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

class Foo {
  Foo._() {}
}

则构造器Foo._()将只能从其类(和库)访问。

sgtfey8w

sgtfey8w2#

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

class Foo {
  Foo._();
}
fkaflof6

fkaflof63#

是的,有可能,想添加更多相关信息。
constructor可以通过使用下划线操作符(_)(在dart中表示private)来设置为private。
所以类可以声明为

class Foo {
  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. 
  }
r9f1avp5

r9f1avp54#

你可以创建下面的类来获得一个单例示例

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

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

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

}

f1tvaqid

f1tvaqid5#

我只用抽象类。因为你不能示例化抽象类

相关问题