gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:43:50 26 4
gpt4 key购买 nike

我有这两种方法来编写构造函数。 className()className._()
它们之间有什么区别,我什么时候应该使用哪个?

 class GlobalState{

final Map<dynamic,dynamic> _data=<dynamic,dynamic>{};
static GlobalState instance = new GlobalState._();

GlobalState._();
}
//In Main Class
GlobalState _store=GlobalState.instance;

and

class GlobalState{

final Map<dynamic,dynamic> _data=<dynamic,dynamic>{};
static GlobalState instance = new GlobalState();
}
//In Main Class
GlobalState _store=GlobalState();

最佳答案

例如,考虑:

class MyClass {
MyClass();

MyClass.named();

MyClass._private();

MyClass._();
}
上面的类有四个构造函数:
  • MyClass() :这是默认的、未命名的构造函数。当你设计这个类时,你会希望它表明它是人们大部分时间应该使用的构造函数。使用它更方便,因为它涉及的打字更少。
  • MyClass.named() : 这是一个命名的构造函数。也许您希望您的类具有多个构造函数,以便可以以不同的方式构造您的类的实例。 Dart 不支持重载函数,所以如果你想要多个构造函数,它们需要不同的名称。因此,如果您需要多个构造函数,则需要命名其中一些以区分它们。即使您没有多个构造函数,在某些情况下,您可能仍需要一个显式名称以避免它所采用的位置参数的歧义(例如 Rectangle.fromLTRB )。
  • MyClass._private() :在 Dart 中,以下划线开头的非本地名称是 Dart 库的私有(private)名称(通常表示 .dart 文件)。 MyClass._private()只是一个命名构造函数,不能在库之外使用。常见用途是当类:
  • 想要强制来电者使用 redirecting constructors重定向到一个不太符合人体工程学的私有(private)构造函数。
  • 并不意味着直接实例化,例如如果类想要强制调用者使用公共(public) factory构造函数(或 static 方法)来获取实例,特别是如果类想要拥有单个实例或者如果它想要禁止子类化。
  • 根本不打算实例化。

  • MyClass._() : 这没什么特别的;与 MyClass._private() 相同但名称不同。它不是默认构造函数,它仍然是一个私有(private)的命名构造函数(即,调用者必须使用 MyClass._() 来调用它)。这是类作者想要一个私有(private)构造函数但不想选择名称的情况。 (命名很难。)
  • 关于flutter - 使用构造函数“className() 和 className._() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812052/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com