MQL5中的OOP问题 - 页 32

 
Vladimir Tkach:
最近,我开始在各种编译器的功能中看到某种 "垃圾收集 "的情况。它是什么?
如果你指的是垃圾收集,它是代替你进行删除的东西,但不是在变量离开作用域时,而是在它想离开时顺便说一下,不是允许你自己调用析构器,这将取决于语言,在夏普,据我所知这是不可能的。
 
Vladimir Simakov:
这里将取决于语言,在夏普,据我所知,这是不可能的。

是的,所有能做的就是将一个未使用的对象赋值为NULL,在微软网站上有如何强制调用垃圾收集器的手册,但似乎我在hubra上读到的事实是,收集器将在这个调用中如期启动。

也就是说,在《夏普》中,他们把大部分内存管理从程序员手中拿走了--一切都由操作系统和编译器来决定。

 
Igor Makanu:

是的,你能做的就是把一个未使用的对象分配给NULL,在微软网站上有手册可以强制垃圾收集器,但我在hubra上读到的事实似乎不是收集器将在这个调用中按预期启动。

也就是说,在《夏普》中,他们把大部分内存管理从程序员手中拿走了--一切都由操作系统和编译器来决定。

你去吧。我现在正在写我的第一个夏普任务,在新的方法中,我感到很害怕,因为代码中没有删除)))。
 
Vladimir Simakov:
你去吧。我目前正在写我的第一本夏普教科书,我对方法中new之后的代码中没有删除感到毛骨悚然))。

而不是删除MyObj; 写MyObj = null; - 这将工作

然后用?- 一开始有点别扭,后来就自动运行了。

但这并不是与C++最大的区别,在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). Важно понимать между ними различия. Ссылочные типы...
 

我想我已经开始理解OOP的必要性和实用性了,但我在实现它时遇到了困难。

我有一个类,要和三组不同的变量一起使用。但它执行的是一项任务。简单地说,我们可以插入3个构造函数,声明3个变量并引用它们。但在我看来,这并不完全正确。除此之外,在两个变体中都有一个字符串类型的变量,但它的名称不同,而且在代码的不同部分使用。当然,你可以改变变量的顺序,但我认为这也不太正确。

我读了关于新操作员 的文件,但不明白它可能有什么帮助。我看不出三个不同的对象变量和三个指向相同对象的指针之间有什么区别。也许当你创建一次指针,使用这个对象并在不需要它的时候删除它是有利可图的。但是,如果你经常需要这个对象,每次都为它创建一个指针并删除它是绝对愚蠢的。

所以,请帮我一把。我读过一些关于C++中OOP的解释,但那里的描述比mql5上的文档更糟糕。请不要让没有耐心的人加入我,我会问太多的问题。我对没有解释的现成代码也不感兴趣,我想了解它,而不是愚蠢地重复 "和我们一起做,像我们一样做..."。

 
Alexey Viktorov:

我想我已经开始理解OOP的必要性和实用性了,但我在实现它时遇到了困难。

我有一个类,要和三组不同的变量一起使用。但它执行的是一项任务。简单地说,我们可以插入3个构造函数,声明3个变量并引用它们。但在我看来,这并不完全正确。除此之外,在两个变体中都有一个字符串类型的变量,但它的名称不同,而且在代码的不同部分使用。当然,你可以改变变量的顺序,但我认为这也不太正确。

我读了关于新操作员 的文件,但不明白它可能有什么帮助。我看不出三个不同的对象变量和三个指向相同对象的指针之间有什么区别。也许当你创建一次指针,使用这个对象并在不需要它的时候删除它是有利可图的。但是,如果你经常需要这个对象,每次都为它创建一个指针并删除它是很愚蠢的。

总而言之,请大家帮忙。我读过一些关于C++中的OOP的解释,但是那里的描述比mql5的文档中的还要糟糕。请不要不耐烦的人,我会问太多的问题。我对没有解释的现成代码也不感兴趣,我想了解它,而不是愚蠢地重复 "和我们一起做,像我们一样做..."。

我们需要更多细节。该班级执行的是什么任务?

 
Koldun Zloy:

需要细节。该班级执行的是什么任务?

这不是什么秘密,经济日历 事件的样本 CalendarValueHistory()。在一个案例中,该时间范围内的所有新闻。在另一个按国家和另一个时间范围。在第三张中,它是由一个符号。但是,是否有根本的区别?编程讲座是否按任务类型来划分解决方案?

我最近遇到了一个驾考失败的人,他愤愤不平地说,他们在驾驶课程中没有在那个十字路口开车,根本不知道如何在那个十字路口开车。

 
虽然现在我在想,也许创建一个指针,使用这个对象,在不需要的时候删除它,真的更好?毕竟,每次的时间范围都会不同。还是使用设置器将时间插入到现有对象中更容易?
 
Alexey Viktorov:

在另一个按国家和不同的时间范围。

枚举中的国家

在构造函数中,即使通过通常的switch - case,按照你的需要做初始化,我在上面展示了一个带接口的模板,我也在构造函数中初始化了一个策略,取决于参数,其余的工作就减少到写一个具体的策略了

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

 
Igor Makanu:

枚举中的国家

在构造函数中,即使通过通常的switch - case,按照你的需要做初始化,我在上面展示了一个带接口的模板,我也根据参数在构造函数中初始化了一个策略,其余的工作归结为编写一个具体的策略

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

无聊...也有模板和界面需要掌握?