我可以在TypeScript中执行以下操作
class Foo { private constructor () {} }
因此只能从类本身内部访问constructor。如何在Dart中实现相同的功能?
constructor
c3frrgcw1#
只需创建一个以_开头的命名构造函数
_
class Foo { Foo._() {} }
则构造器Foo._()将只能从其类(和库)访问。
Foo._()
sgtfey8w2#
一个没有任何代码的方法必须是这样的
class Foo { Foo._(); }
fkaflof63#
是的,有可能,想添加更多相关信息。constructor可以通过使用下划线操作符(_)(在dart中表示private)来设置为private。所以类可以声明为
现在,类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. }
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();
}
f1tvaqid5#
我只用抽象类。因为你不能示例化抽象类
5条答案
按热度按时间c3frrgcw1#
只需创建一个以
_
开头的命名构造函数则构造器
Foo._()
将只能从其类(和库)访问。sgtfey8w2#
一个没有任何代码的方法必须是这样的
fkaflof63#
是的,有可能,想添加更多相关信息。
constructor
可以通过使用下划线操作符(_)(在dart中表示private)来设置为private。所以类可以声明为
现在,类Foo没有默认构造函数
同样的理论也适用于扩展类,如果私有构造函数在一个单独的文件中声明,也不可能调用它。
但是如果我们分别在同一个类或文件中使用以上两个功能,它们就都可以工作。
以及
r9f1avp54#
你可以创建下面的类来获得一个单例示例
现在可以在main函数中调用示例构造函数
}
f1tvaqid5#
我只用抽象类。因为你不能示例化抽象类