![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
const - если надо запретить выполнять переменной присвоение (кроме одного раза при инициализации). Если переменная объявлена как conts, тогда при передаче ее в функцию по ссылке, аргумент функции тоже должен быть const, но это компилятор заставит, можно не задумываться. Если переменной не выполняется присвоение, то ее тоже можно отметить как const - быстрее будет работать, это касается аргументов функций. Однако в любой момент может потребовать доработка...
static - если это переменная в классе, то это редкий случай, даже редчайший. Если метод класса, то если в методе обрабатываются только аргументы этого метода и статические переменные класса, тоже редкий случай (впрочем, не такой и редкий, если просто для удобства в класс собирать функции).
Еще не дошли руки попробовать C# DLL под MQL5. Раньше делал с обертками на C++, из плюсов создавался экземпляр класса на C#. Есть подозрение, что сейчас в DLL будет использоваться статический класс, что сильно ограничивает возможности. Кто-нибудь знает, сейчас создается статический класс или динамический?
Еще не дошли руки попробовать C# DLL под MQL5. Раньше делал с обертками на C++, из плюсов создавался экземпляр класса на C#. Есть подозрение, что сейчас в DLL будет использоваться статический класс, что сильно ограничивает возможности. Кто-нибудь знает, сейчас создается статический класс или динамический?
я статические только использовал для MQL5 - если есть модификатор static, то сигнатура будет видна прямо из МЕ, очень удобно
насчет ограничения, ну как вариант в отдельный thread выбросить задачу, потом прибить его, на C# делается очень быстро
или можно написать вызовы внутри dll
по моему это не проблема
UPD:
сомневаюсь, что сумею обьяснить свои недавние исследования в разумности использования ООП в задачах MQL, но напишу, что вижу
В общем если использовать ООП стиль, полностью с разграничением доступа и осознанно выставлять все модификаторы private/protected/public и в обязательном порядке использовать const при описании каждого метода и сигнатуры (затем можно убрать если цели метода модифицировать данные ) , и писать все доступы к защищенным данным через get / set - то результат правильно использования ООП, это выявление сложных багов по непреднамеренной модификации данных на этапе разработки.
Переписал с нуля один класс таким образом - сразу компилятор нашел несоответствие моей задаче, залез из потомка в базовый класс при проверке (тестировании) идеи,ну и как водится отвлекся и забыл убрать - не факт, что сумел бы найти этот баг при тесте, мог бы и подумать, что так задумано )) .
Еще один заметный плюс для меня это ушел от всех глобально описанных переменных - стараюсь их не использовать, тут вообще не используется (ну за исключением глобального флага оптимизация - под свои задачи и флага критической ошибки при торговле)
Интересное наблюдение, что когда переписывал все вызовы через get / set , то исходник класса сначала рос в обьеме, а потом начал значительно сокращаться, когда начал подставлять в вызовы get / set - т.е. не скажу, что это сильно раздувает код в обьеме, но еще раз - это обеспечит контроль за целостностью данных!
ЗЫ: ну и если в душе Вы перфекционист, и считаете, что лишний вызов через get / set это лишние такты процессора, то когда задача выполнена на 100%, то не сложно через поиск в исходнике посчитать вызовы каждого get / set и применить старое правило - если вызов участка кода более одного раза, то необходимо этот участок кода оформить в виде подпрограммы.... ни кто не запрещает это сделать наоборот ---> всего один раз вызов get / set раскрыть в присвоение / чтение поля....но это так сказать "грязные трюки" с сомнительной выгодой
я статические только использовал для MQL5 - если есть модификатор static, то сигнатура будет видна прямо из МЕ, очень удобно
насчет ограничения, ну как вариант в отдельный thread выбросить задачу, потом прибить его, на C# делается очень быстро
или можно написать вызовы внутри dll
по моему это не проблема
Я для шарпа имел в виду не статические члены, а вот это
Экземпляр статического класса нельзя создать через new, уничтожить через delete, у него нет конструкторов и деструкторов, все члены и методы только статические. Короче, давно не работал, но помню, сколько было неудобств, как прокрустово ложе.
Их обычно используют, как контейнер для библиотечных функций, например математических.
Я для шарпа имел в виду не статические члены, а вот это
думаю, что не увидит MQL без модификатора static это класс, а вот если методы внутри с модификатором static увидит
локально внутри dll юзайте как угодно классы, я WinForm делал в dll класс без static все прекрасно работает, но вызывал через static объявленные функции, а где эти функции объявлены внутри какого класса - для вызова dll из MQL вообще не принципиально, хоть весь класс static хоть не весь
проверить пока не смогу, на ноуте после замены на SSD студию не устанавливал, пока не нужна
Еще не дошли руки попробовать C# DLL под MQL5. Раньше делал с обертками на C++, из плюсов создавался экземпляр класса на C#. Есть подозрение, что сейчас в DLL будет использоваться статический класс, что сильно ограничивает возможности. Кто-нибудь знает, сейчас создается статический класс или динамический?
Класс обычный, методы статические. Другие варианты не пробовал.
Игорь, Дмитрий, короче надо самому пробовать. Я так понимаю, в любом случае надо обращаться по имени класса, а не по имени объекта класса. Попробую, спс.
По имени класса обращаться.
не могу утверждать, что только так можно вызывать C# из MQL5 , я использовал пример от разработчиков https://www.mql5.com/ru/forum/285631
чтобы получить точку входа в C#, другими способами не пользовался, при определенном пританцовывании с бубнами, один и тот же код .dll может быть скомпилирован для MT4
статья и мои исследования почему код из статьи не работает как задумано https://www.mql5.com/ru/forum/3153/page4#comment_10366498 - все работает до сих пор
просмотрел результаты своей битвы с кодом в стиле ООП - хм... превосходно! ))))
вопрос появился, а вот у меня в коде ну раза три точно используется конструкция вида:
вызовы все в privat методах, но есть ли "джедайский прием ?" чтобы уйти в тексте исходника от CheckPointer(m_order)==POINTER_INVALID
я про некие гет / сет спрашиваю
проблем особых нет, но так сказать прихоть, ну или пока еще не утихла жажда познания приемов ООП в С++