使用构造函数“ className()和className ._()之间的区别

时间:2019-09-05 19:42:18

标签: flutter dart

我有两种编写构造器的方法。

它们之间有什么区别,何时应该使用它们?

Converters

2 个答案:

答案 0 :(得分:2)

例如:

class MyClass {
  MyClass();

  MyClass.named();

  MyClass._private();

  MyClass._();
}

上面的类有四个构造函数:

  • MyClass():这是默认的未命名构造函数。在设计类时,您希望它表示人们应该最多使用 的构造函数。使用它更方便,因为它涉及较少的键入。
  • MyClass.named():这是一个以命名的构造函数。也许您希望您的类具有多个构造函数,以便可以用不同的方式构造您的类的实例。 Dart不支持重载函数,因此,如果需要多个构造函数,则它们需要不同的名称。因此,如果您想要多个构造函数,则需要命名其中一些以区分它们。即使您没有多个构造函数,您仍可能想要一个显式名称以避免歧义。
  • MyClass._private():在Dart中,以下划线开头的名称是 private (通常是文件名)。 MyClass._private()只是一个命名的构造函数,不能在其定义的源文件之外使用。通常,当类希望强制调用者使用公共工厂构造函数(或静态方法)来获取调用时,会看到私有构造函数实例,尤其是在类要具有一个实例的情况下。
  • MyClass._():这等效于MyClass._private()。它不是默认的构造函数,还是私有的命名构造函数(即,调用者必须使用MyClass._()来调用它)。在这种情况下,类作者想要一个私有构造函数,但又不想选择一个名称。 (命名很难。)

答案 1 :(得分:-1)

您知道在Java中没有像命名构造函数这样的功能。但是dart提供了命名构造函数。 每当您要创建更多2个构造函数选择时,都应在类中创建命名构造函数。 就像您在代码中所做的一样