Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtOpMxOv 63 of 113 menu
◀ ▶

Переопределение метода mixin в Dart

Метод класса может перекрыть одноименный метод mixin. Тогда у объекта сработает версия из класса. Чтобы явно дополнить поведение mixin, внутри метода класса вызывают super.show().

Класс Post с mixin Helper добавит вывод заголовка после базовой команды:

mixin Helper { void show() { print("note"); } } class Post with Helper { String title = ""; @override void show() { super.show(); print(title); } }

Создадим объект, заполним поля и проверим результат:

var post = Post(); post.title = "hello"; post.show();

Если в классе и в mixin есть метод с одним именем, без @override в теле класса все равно победит метод класса. Mixin остается доступен через super, если вы его вызываете сами.

При наследовании метод mixin имеет приоритет над одноименным методом родителя, если класс сам метод не переопределяет:

mixin TestTrait { String method() { return "mixin"; } } class ParentPost { String method() { return "parent"; } } class Post extends ParentPost with TestTrait {}

Создадим объект и вызовем метод:

var post = Post(); print(post.method());

Когда два mixin дают один метод, порядок в with решает конфликт: правый mixin замещает левый. Две версии одного метода одновременно не доступны - меняют порядок with или переопределяют метод в классе:

mixin Helper1 { int value() { return 1; } } mixin Helper2 { int value() { return 2; } } class Employee with Helper1, Helper2 { int getSum() { return value(); } }

Создадим объект и вызовем метод:

var emp = Employee(); print(emp.getSum());

Сделайте mixin Helper1, Helper2 и TestTrait с одним методом value, возвращающим 1, 2 и 3. Подключите их к Employee и выведите результат value. Затем поменяйте порядок mixin и сравните вывод.

Сделайте mixin Helper1, Helper2 и TestTrait с методами part1, part2 и part3. Класс Employee подключит все три mixin, а метод getSum вернет сумму трех частей.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить