Вопросы по ООП в MQL5 - страница 32

 
Vladimir Tkach:
В последнее время в функциях разных компиляторов начал встречать какой то "сбор мусора". Что это такое?
Если Вы про garbage collection, то эта та штука, которая вместо Вас delete делает, но не когда переменная из зоны видимости выходит, а когда сама захочет. Кстати не факт, что Вам разрешат деструктор самому вызывать, тут уже от языка будет зависеть, в шарпе, как я понял нельзя.
 
Vladimir Simakov:
тут уже от языка будет зависеть, в шарпе, как я понял нельзя.

так и есть, все что можно сделать это неиспользуемый обьект присвоить NULL, есть вроде мануалы на сайте Майкрософт как принудительно вызвать сборщик мусора, но кажется на хабре читал, что не факт что сборщик будет запущен именно в этот вызов как ожидалось

т.е. в Шарпе максимально забрали управление памятью у программиста - все на откуп ОС и компилятору отдали

 
Igor Makanu:

так и есть, все что можно сделать это неиспользуемый обьект присвоить NULL, есть вроде мануалы на сайте Майкрософт как принудительно вызвать сборщик мусора, но кажется на хабре читал, что не факт что сборщик будет запущен именно в этот вызов как ожидалось

т.е. в Шарпе максимально забрали управление памятью у программиста - все на откуп ОС и компилятору отдали

Вот вот. Сейчас первый таск на шарпе пилю, так после new в методе, аж жуть берет от отсутствия delete в коде))).
 
Vladimir Simakov:
Вот вот. Сейчас первый таск на шарпе пилю, так после new в методе, аж жуть берет от отсутствия delete в коде))).

пишите вместо delete MyObj;  так MyObj =  null; - это будет работать

ну и тогда используйте оператор ?? - поначалу как то не привычно было, потом на автомате пишется

но это не самое большое отличие от С++, в C# все обьекты это ссылки, и если присвоить MyObj_1=MyObj_2; то это не копирование, а получили указатель... в общем сейчас запутаю Вас, вот мануал краткий , я там подглядываю если что забыл

https://metanit.com/sharp/tutorial/2.16.php


Типы значений и ссылочные типы | C#
  • metanit.com
Ранее мы рассматривали следующие элементарные типы данных: int, byte, double, string, object и др. Также есть сложные типы: структуры, перечисления, классы. Все эти типы данных можно разделить на типы значений, еще называемые значимыми типами, (value types) и ссылочные типы (reference types). Важно понимать между ними различия. Ссылочные типы...
 

Кажется я начинаю понимать необходимость и пользу ООП, но затрудняюсь в реализации.

Имеется класс который должен использоваться с тремя разными наборами переменных. Но выполняет одну задачу. По простому, можно вставить 3 конструктора, объявить 3 переменных и обращаться к ним. Но, как я понимаю это не совсем грамотно. Плюс ко всему в двух вариантах одна из переменных типа string но разные по имени и используются в разных частях кода. Конечно можно изменить последовательность переменных, но и это, как я понимаю это не совсем грамотно.

Читаю документацию об операторе new но не понимаю как он может помочь в этой ситуации. Не вижу разницы между тремя разными переменными объекта и тремя указателями на такие-же объекты. Наверное это выгодно когда один раз создал указатель, использовал этот объект и удалил его за ненадобностью. Но если объект нужен периодически, то создавать на него указатель каждый раз и удалять совсем глупо.

В общем прошу помощи. Читал какие-то объяснения по ООП в С++ но там ещё хуже описывается чем в документации по mql5. Нетерпеливых прошу не встревать, я буду много переспрашивать. Готовый код без объяснений тоже не интересует, я хочу разобраться в этом, а не тупо повторить "Делай с нами, делай как мы..."

 
Alexey Viktorov:

Кажется я начинаю понимать необходимость и пользу ООП, но затрудняюсь в реализации.

Имеется класс который должен использоваться с тремя разными наборами переменных. Но выполняет одну задачу. По простому, можно вставить 3 конструктора, объявить 3 переменных и обращаться к ним. Но, как я понимаю это не совсем грамотно. Плюс ко всему в двух вариантах одна из переменных типа string но разные по имени и используются в разных частях кода. Конечно можно изменить последовательность переменных, но и это, как я понимаю это не совсем грамотно.

Читаю документацию об операторе new но не понимаю как он может помочь в этой ситуации. Не вижу разницы между тремя разными переменными объекта и тремя указателями на такие-же объекты. Наверное это выгодно когда один раз создал указатель, использовал этот объект и удалил его за ненадобностью. Но если объект нужен периодически, то создавать на него указатель каждый раз и удалять совсем глупо.

В общем прошу помощи. Читал какие-то объяснения по ООП в С++ но там ещё хуже описывается чем в документации по mql5. Нетерпеливых прошу не встревать, я буду много переспрашивать. Готовый код без объяснений тоже не интересует, я хочу разобраться в этом, а не тупо повторить "Делай с нами, делай как мы..."

Нужны подробности. Какую задачу выполняет класс?

 
Koldun Zloy:

Нужны подробности. Какую задачу выполняет класс?

Не секрет, выборка событий экономического календаря CalendarValueHistory(). В одном случае все новости в диапазоне времени. В другом по стране и другому диапазону времени. В третьем по символу. Но разве есть принципиальная разница? Разве на лекциях по программированию делят решения по типу выполняемых задач?

Я недавно встречал такого, который не сдал экзамен по вождению и возмущаясь говорил, что по этому перекрёстку они на занятиях по вождению не ездили и он просто не знает как на этом перекрёстке надо ехать.

 
Хотя сейчас я подумал, что может действительно лучше создавать указатель, использовать объект и удалять за ненадобностью? Ведь каждый раз диапазон времени будет разный. Или всё-же проще через сеттеры всунуть время в имеющийся объект?
 
Alexey Viktorov:

В другом по стране и другому диапазону времени. 

страны в enum

в конструкторе даже через обычный switch - case выполните инициализацию как Вам нужно, я выше показывал шаблон с интерфейсами, я так же в конструкторе инициализирую в зависимости от параметров одну из стратегий, а вся остальная работа сводится к написанию конкретной стратегии

https://www.mql5.com/ru/forum/85652/page24#comment_13054686

 
Igor Makanu:

страны в enum

в конструкторе даже через обычный switch - case выполните инициализацию как Вам нужно, я выше показывал шаблон с интерфейсами, я так же в конструкторе инициализирую в зависимости от параметров одну из стратегий, а вся остальная работа сводится к написанию конкретной стратегии

https://www.mql5.com/ru/forum/85652/page24#comment_13054686

Тоска... Тут ещё и шаблоны с интерфейсами надо осваивать???