【发布时间】:2021-07-20 21:07:21
【问题描述】:
我是 OOP 的新手,目前理解水平中等。我通过学习 Dart 和 C# 不断取得进展。我也在探索设计模式,以真正了解它们如何根据不同的场景一起点击。至于现在,我试图理解以下与类构造函数相关的 4 个场景。我了解下划线在构造函数级别和初始化程序级别的含义。但我正在寻找一些对于经验丰富的程序员来说似乎非常明显和清晰的东西。请分享您的宝贵见解,因为我不知道我在这里缺少什么。
场景 1:没有初始化器的私有构造函数
我知道这与 Singleton 不同。 Singleton 允许单个实例化,下面的这个甚至一次都没有。还有其他的吗?
现实世界的例子:
class Firebase {
// Ensures end-users cannot initialize the class.
Firebase._();
...
}
场景 2:具有可选公共或非私有初始化程序的私有构造函数
这种具有非私有初始化器(this.app)的私有构造函数有什么用?为什么在私有构造函数中有一个非私有初始化器(this.app)?这样做有什么收获?
现实世界的例子:
class FirebaseAuth extends FirebasePluginPlatform {
/// The [FirebaseApp] for this current Auth instance.
FirebaseApp app;
FirebaseAuth._({required this.app})
: super(app.name, 'plugins.flutter.io/firebase_auth');
/// Returns an instance using the default [FirebaseApp].
static FirebaseAuth get instance {
FirebaseApp defaultAppInstance = Firebase.app();
return FirebaseAuth.instanceFor(app: defaultAppInstance);
}
...
}
场景 3:带有私有初始化器的公共构造函数
为什么在非私有构造函数中有私有属性?这样做有什么收获?
虚构的例子:
class Constructify {
Map<String,dynamic> _property;
Constructify(this._property);
...
}
场景 4:带有私有初始化器的私有构造函数
当构造函数本身是私有的时,为什么还要有一个私有初始化器?这样做有什么收获?
现实世界的例子:
class FirebaseApp {
/// A [FirebaseApp] instance can only be accessed from a call to `app()` [FirebaseCore].
///
/// This constructor ensures that the delegate instance it is constructed with is one which extends [FirebaseAppPlatform].
FirebaseApp._(this._delegate) {
FirebaseAppPlatform.verifyExtends(_delegate);
}
final FirebaseAppPlatform _delegate;
...
}
【问题讨论】:
-
嗨 Asif,欢迎来到 Stack Overflow。就目前而言,您的问题有点太宽泛了;请一次专注于一个问题或问题。在这里,您要问 ~6 个不同的问题。
标签: oop dart constructor