Я "походжу з C # / F # / Haskell, тому я" намагаюся придумати рішення проблем програмування, які я використовував для вирішення типів.
клас A, де T: new () в C #, це головним чином, щоб я могла десь робити нове T (). Це створює помилку сформованого типу в Dart. Чи є досить ідіоматичний спосіб вирішити це? Можливо, з фабриками?
Я робив кілька експериментів з міксинами, у випадкуконфлікти імен для успадкованих членів міксину, виграє останній міксин. Отже для наступного: абстрактний клас mixA {void foo (); } абстрактний клас mixB {void foo (); } клас C розширює об’єкт за допомогою mixA, mixB {} новий C (). foo ();
це в кінцевому підсумку викликає mixB.foo (), тоді як клас C розширює об’єкт за допомогою mixB, mixA {} нарешті дзвонить на mixA.foo () Чи є все-таки доступ до членів прихованих міксин?
Припустимо, я змішую 2 міксини з полем того жназва. Чи має екземпляр підкласу 2 поля під час виконання (лише 1 є недоступним) чи об'єкт схожий на словник і є лише 1 слот для кожного імені?
Відповіді:
4 для відповіді № 11 це неможливо. Ви не можете телефонувати new
на загальний тип (або змінну для цього питання). Найпоширенішим вирішенням є створення закриття, яке замість цього виділяє об'єкт.
Відповіді на 2 випадають з того, що Mixins можна розглядати як суперкласи: A extends Object with B, C
в основному еквівалентний:
class B" extends Object { <copy over code inside B> }
class C" extends B" { <copy over code inside C> }
class D extends C" { ... }
Маючи це на увазі:
- ні. немає способу отримати доступ до прихованих суперелементів.
- так. ви отримаєте кілька полів.
Маленька примітка: <copy over code inside X>
частина є не зовсім коректною, оскільки це змінить область бібліотеки. Код від mixin B концептуально знаходиться в бібліотеці, в якій розміщено mixin.