带你读《深入浅出Dart》十、更多特性(1)

简介: 带你读《深入浅出Dart》十、更多特性(1)

十、更多特性

引言

除了前面介绍的类、对象、继承、多态、抽象类和接口之外,Dart语言还提供了一些其他的面向对象的特性。这些特性可以帮助开发者更好地组织和设计他们的代码,增加代码的灵活性和可复用性。本文将深入探讨Dart中的工厂构造函数、静态成员和Mixins这些特性。

1.工厂构造函数

Dart中的工厂构造函数(Factory Constructor)是一种特殊类型的构造函数,它可以返回对象的实例,而不一定是类的实例。工厂构造函数通常用于创建复杂对象或在创建对象时执行额外的逻辑。

 

在类中定义工厂构造函数需要使用factory关键字,并且必须返回一个对象。以下是一个使用工厂构造函数的示例:

 

class Logger {
  final String name;
  static final Map _cache = {};
  factory Logger(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name]!;
    } else {
      final logger = Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }
  Logger._internal(this.name);
  void log(String message) {
    print('name:name: message');
  }}
void main() {
  final logger1 = Logger('Logger');
  final logger2 = Logger('Logger');
  print(identical(logger1, logger2));  // 输出 true,表示logger1和logger2是同一个对象}

 

在上面的示例中,Logger类中定义了一个工厂构造函数factory Logger(String name),用于创建Logger对象。通过使用工厂构造函数和静态成员变量_cache,我们可以确保相同名称的Logger对象只被创建一次。

2.静态成员

静态成员是属于类本身而不是类的实例的成员。可以通过在成员前面加上static关键字来定义静态成员。静态成员在类的所有实例之间共享,并且可以通过类名直接访问,无需创建类的实例。

 

静态成员包括静态变量和静态方法。以下是一个示例:

 

class MathUtils {
  static const double pi = 3.14159;
  static double calculateArea(double radius) {
    return pi * radius * radius;
  }}
void main() {
  print(MathUtils.pi);  // 输出 3.14159
  final area = MathUtils.calculateArea(2);  // 计算半径为2的圆的面积
  print(area);  // 输出 12.56636}

 

在上述示例中,MathUtils类中定义了一个静态变量pi和一个静态方法calculateArea。我们可以直接通过类名访问静态变量和调用静态方法。


带你读《深入浅出Dart》十、更多特性(2)https://developer.aliyun.com/article/1349051?groupCode=tech_library

相关文章
|
4月前
|
人工智能 自然语言处理 运维
企业建设智能客服系统要多少钱?2026年中小微到集团企业预算方案全攻略
本文解析智能客服建设成本,从万元级SaaS订阅到百万级私有化定制,详解阿里云瓴羊Quick Service针对中小微、中大型及集团企业的三级预算方案,助力企业精准投入、高效升级数字化服务能力。(239字)
|
7月前
|
人工智能 运维 数据可视化
告别繁琐巡检:AR智能眼镜打造工业&电力运维闭环体系|阿法龙XR云平台
本方案以AR眼镜为核心,融合蓝牙定位、AI识别与多模态感知技术,构建智能巡检体系。通过精准定位触发、AI实时识别仪表状态、数据自动上传与可视化管理,实现电力、化工、智能制造等场景下巡检效率提升60%、故障率降低40%,推动工业运维数字化、标准化、闭环化转型。(238字)
|
安全 搜索推荐 开发者
XYNTService 报错 StartServiceCtrlDispatcher Failed, error code = 1063
【10月更文挑战第7天】XYNTService 报错 StartServiceCtrlDispatcher Failed, error code = 1063
557 6
|
运维 监控 安全
|
存储 机器学习/深度学习 算法
北京化工大学历年真题整理:没考上,换了个学校,但还是在北京~哈哈(总结的算法题,有缘人自取之)
这份文件是北京化工大学历年算法真题的整理,包括选择题和算法题的总结,以及一些必背的算法知识点,帮助考生备考。
418 2
|
存储 机器学习/深度学习 人工智能
AI Agent技术的最新进展与改变世界的典型项目巡礼
【7月更文挑战第3天】 AI Agent技术的最新进展与改变世界的典型项目巡礼
 AI Agent技术的最新进展与改变世界的典型项目巡礼
|
存储 监控 网络协议
计算机网络基础知识和术语(一)
计算机网络基础知识和术语(一)
1511 1
|
存储 C# Windows
WPF技术之RadioButton控件
WPF(Windows Presentation Foundation)中的RadioButton控件用于创建单选按钮,允许用户从一组选项中选择一个。
1873 0
|
监控 算法 安全
计算机在航空航天领域的应用
计算机在航空航天领域的应用
|
Ubuntu Linux 开发工具
阿里云主机的Milk-V Duo开发板python环境搭建
Milk-V Duo是一款基于算能CV1800B芯片的开发板。搭载阿里云平头哥玄铁C906处理器核心,最高频率为1GHz,视频解码、2D图形加速能力强,可应用于智能语音、智能汽车及高清显示等领域。开发板身材小巧,大小和树莓派Pico相当,引脚也基本一致,但是功能更强大一些,能够运行基于LINUX和RTOS的操作系统。
1774 0