Dart Mixins
最后修改:2025 年 2 月 15 日
在本文中,我们将展示如何在 Dart 语言中使用 **mixins**。Mixins 是一种在不使用继承的情况下跨多个类层次结构重用代码的方式。它们允许您在不创建完整的父子关系的情况下向类添加功能。
当您想在不共享共同祖先的类之间共享行为时,Mixins 特别有用。它们使用 mixin
关键字声明,并可以使用 with
关键字添加到类中。
Dart Mixins 简单示例
以下示例演示了如何在 Dart 中创建和使用简单的 mixin。
mixin Logging { void log(String message) { print('Log: $message'); } } class User with Logging { String name; User(this.name); void greet() { log('User $name says hello!'); } } void main() { final user = User('Alice'); user.greet(); }
在此程序中,我们定义了一个提供 log
方法的 Logging
mixin。然后,我们在 User
类中使用此 mixin 来记录问候消息。
mixin Logging { void log(String message) { print('Log: $message'); } }
我们定义了一个名为 Logging
的 mixin,其中包含一个 log
方法。
class User with Logging { String name; User(this.name); void greet() { log('User $name says hello!'); } }
我们创建了一个使用 with
关键字的 Logging
mixin 的 User
类。greet
方法使用来自 mixin 的 log
方法。
void main() { final user = User('Alice'); user.greet(); }
我们创建了 User
类的一个实例,并调用了 greet
方法,该方法记录了一条消息。
$ dart main.dart Log: User Alice says hello!
Dart Mixins 与多个类
Mixins 可以与多个类一起使用以共享公共行为。
mixin Logging { void log(String message) { print('Log: $message'); } } class User with Logging { String name; User(this.name); void greet() { log('User $name says hello!'); } } class Admin with Logging { String name; Admin(this.name); void announce() { log('Admin $name makes an announcement!'); } } void main() { final user = User('Alice'); user.greet(); final admin = Admin('Bob'); admin.announce(); }
在此程序中,我们将 Logging
mixin 用于 User
和 Admin
类,以共享日志记录功能。
class User with Logging { String name; User(this.name); void greet() { log('User $name says hello!'); } } class Admin with Logging { String name; Admin(this.name); void announce() { log('Admin $name makes an announcement!'); } }
User
和 Admin
类都使用 Logging
mixin 来记录消息。
$ dart main.dart Log: User Alice says hello! Log: Admin Bob makes an announcement!
Dart Mixins 与覆盖
Mixins 可以覆盖其使用的类中的方法。
mixin Logging { void log(String message) { print('Log: $message'); } } class User with Logging { String name; User(this.name); void log(String message) { print('User Log: $message'); } void greet() { log('User $name says hello!'); } } void main() { final user = User('Alice'); user.greet(); }
在此程序中,User
类覆盖了 Logging
mixin 的 log
方法。
void log(String message) { print('User Log: $message'); }
User
类覆盖了 log
方法,以提供自定义日志记录行为。
$ dart main.dart User Log: User Alice says hello!
Dart Mixins 与约束
Mixins 可以使用 on
关键字指定约束,以限制它们的使用仅限于特定类。
class Person { String name; Person(this.name); } mixin Logging on Person { void log(String message) { print('Log: $name says $message'); } } class User extends Person with Logging { User(String name) : super(name); void greet() { log('Hello!'); } } void main() { final user = User('Alice'); user.greet(); }
在此程序中,Logging
mixin 被约束为只能与扩展 Person
的类一起使用。
mixin Logging on Person { void log(String message) { print('Log: $name says $message'); } }
Logging
mixin 使用 on
关键字指定它只能与扩展 Person
的类一起使用。
class User extends Person with Logging { User(String name) : super(name); void greet() { log('Hello!'); } }
User
类扩展了 Person
并使用了 Logging
mixin。
$ dart main.dart Log: Alice says Hello!
来源
在本文中,我们涵盖了 Dart 中 mixins 的基本用法。Mixins 是代码重用的强大功能,可用于在多个类之间共享行为。
作者
列出 所有 Dart 教程。