dart中一个名为._()函数的类方法?

ix0qys7i  于 2023-05-20  发布在  其他
关注(0)|答案(3)|浏览(355)

我看过这段代码,有人能给我解释一下AppTheme._()是什么意思吗?因为我在dart中读到过它的单例类,但我真的不明白它是如何工作的。

class AppTheme {
  AppTheme._();

  static const Color notWhite = Color(0xFFEDF0F2);
  static const Color nearlyWhite = Color(0xFFFEFEFE);
  static const Color white = Color(0xFFFFFFFF);
  static const Color nearlyBlack = Color(0xFF213333);

  ...
}
zd287kbt

zd287kbt1#

AppTheme._();是一个命名构造函数(另一个例子可能是Flutter框架中某些对象的复制构造函数:ThemeData.copy(...);)。
在dart中,如果前导字符是下划线,则函数/构造函数是库私有的。这里的情况也是如此,下划线也是唯一的字符,所以我想写这个构造函数的人根本没有计划调用这个构造函数。
AppTheme._();不是必需的,除非您不希望AppTheme意外地使用隐式默认构造函数示例化。

50few1ms

50few1ms2#

这是为了使类不可示例化。
更多信息请参见https://www.woolha.com/tutorials/dart-prevent-instantiation-of-class#:~:text=Creating%20Private%20Constructor%20to%20Prevent,(下划线)%20which%20means%20private.
此外,我认为这总结了为什么我们首先需要它“如果一个类有一个或多个私有构造函数,而没有公共构造函数,其他类(除了嵌套类)不能创建这个类的示例。“来自https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/private-constructors

pxy2qtax

pxy2qtax3#

要在Dart中创建不可示例化的类,可以使用工厂构造函数沿着私有命名构造函数。示例如下:

class NonInstantiableClass {
  NonInstantiableClass._(); // Private named constructor

  factory NonInstantiableClass() {
    throw UnsupportedError('Cannot instantiate this class.');
  }
}

**在本例中,**private named constructor _()防止类从类本身外部示例化。工厂构造函数用于在尝试示例化类时抛出UnsupportedError,指示它不能被示例化。
现在,每次尝试创建NonInstantiableClass的示例时,都会抛出错误

NonInstantiableClass instance = NonInstantiableClass(); // Throws an UnsupportedError

这种方法确保类不能被示例化,并有效地使其不可示例化。

相关问题