2013-11-12 3 views
4

я следующий класс:Dart вы можете перегрузить оператор присваивания?

class EventableNumber{ 

    num _val; 

    num get val => _val; 

    void set val(num v){ 

    num oldValue = _val; 
    _val = v; 
    _controller.add(new NumberChangedEvent(oldValue, v)); 

    } 

    StreamController<NumberChangedEvent> _controller = new StreamController<NumberChangedEvent>(); 
    Stream<NumberChangedEvent> _stream; 
    Stream<NumberChangedEvent> get onChange => (_stream != null) ? _stream : _stream = _controller.stream.asBroadcastStream(); 

    EventableNumber([num this._val = 0]); 

} 

Можно ли перегружать оператор присваивания в =? вместо того, чтобы использовать геттер и сеттер val для принудительного запуска события при изменении значения, было бы неплохо, если бы это можно было сделать, когда пользователь пишет myEventableNum = 34, а затем myEventableNum сначала его событие onChange, а не myEventableNum.val = 34.

ответ

6

Dart не допускает этого.

Однако, вы считали вызов стиля функции?

В принципе, если вы определили функцию под названием «Вызов» в классе EventableNumber, то вы можете вызвать экземпляр как функцию:

myEventableNum(34) 

Если вы решили идти по этому пути, то рекомендуется осуществлять Функция интерфейс:

class EventableNumber implements Function { 
... 
    void call(val) {...} 
... 
} 

Надеется, что это помогает :)

Смежные вопросы