Size: a a a

2021 June 04

KF

Konstantin Firsov in dlang.ru
хорошо, сейчас проведу эксперимент.
источник

KF

Konstantin Firsov in dlang.ru
провел серию экспериментов. alias вроде как можно убрать под private в классе, имеющим публичный проперти с ним. Количество параметров компилятор отслеживает, увеличить или уменьшить не дает, обращение к null срабатывает также, как и в случае с обычным делегатом. Так кажется, что ведет себя одинаково. Здесь разве что подозрительно выглядит подмена типа в поле, вероятно, это как-то может потом отразиться на рефлексии или создаст частный случай... кгм. Но вообще все это выглядит странным: делегат(a,b) в поле не одно и тоже, что и делегат(a,b,c).
источник

DH

Dark Hole in dlang.ru
Ты объявляешь не просто делегат, а проперти-делегат и я не понял зачем. Разницы между ними я никакой не нашел.
источник

KF

Konstantin Firsov in dlang.ru
Насколько я понимаю по аналогии, в D проперти в контексте полей класса используется как аналог автогеттеров\сеттеров в других языках.
источник

DH

Dark Hole in dlang.ru
Нет, проперти метод мимикрирует под поле класса. Там на него дополнительные ограничения накладывают — можно посмотреть по ссылке, которую я выше кинул. Геттеры и сеттеры в Ди помечаются как проперти именно по этой причине, но благодаря UFCS в них особой надобности нет. Например, эти конструкции одинаковы из-за UFCS:
a.foo(b);
a.foo = b;
источник

KF

Konstantin Firsov in dlang.ru
ок, проперти отпадают. Как тогда объявить поле класса с учетом того, что мне не нужна дополнительная _приватная переменная и еще два метода к ней?
источник

DH

Dark Hole in dlang.ru
А чем тебя не устраивает простое объявление публичного поля? Зачем тебе нужны геттеры и сеттеры которые ничего не делают?
источник

КП

Константин Пунш... in dlang.ru
В наследниках переопределить можно
источник

DH

Dark Hole in dlang.ru
Только virtual, не?
источник

КП

Константин Пунш... in dlang.ru
Ну да
источник

DH

Dark Hole in dlang.ru
Если решать прям в лоб и ты не хочешь именно писать руками геттеры и сеттеры — можно написать mixin template под такой случай и вставлять его везде. Но он просто сгенерирует приватную переменную и геттер/сеттер, так что если тебе принципиально не нужна лишняя переменная — то я не знаю как сделать и, скорее всего, так нельзя.
источник

КП

Константин Пунш... in dlang.ru
Можно темплейтную структуру написать, в ней операторы переопределить
источник

КП

Константин Пунш... in dlang.ru
Чтобы проверяла на null при вызове
источник

DH

Dark Hole in dlang.ru
У него сейчас не проверяет на null конструкция
источник

DH

Dark Hole in dlang.ru
Так что хз 8)
источник

DH

Dark Hole in dlang.ru
Проверять на нулл можно по разному
источник

DH

Dark Hole in dlang.ru
Инвариантами, например, ещё можно
источник

OB

Oleg B in dlang.ru
в D все методы классов виртуальные кроме приватных и финальных
источник

DH

Dark Hole in dlang.ru
А, вот как
источник

DH

Dark Hole in dlang.ru
Совсем об этом забыл
источник