Fragen zu OOP in MQL5 - Seite 32

 
Vladimir Tkach:
In letzter Zeit habe ich begonnen, eine Art "Müllsammlung" in den Funktionen verschiedener Compiler zu sehen. Was ist das?
Wenn Sie die Garbage Collection meinen , dann ist es die Sache, die an Ihrer Stelle löscht, aber nicht, wenn die Variable den Bereich verlässt, sondern wenn sie es will. Übrigens nicht die Tatsache, dass man den Destruktor selbst aufrufen darf, das hängt von der Sprache ab, in Sharp ist es meines Wissens nach unmöglich.
 
Vladimir Simakov:
Hier wird es auf die Sprache ankommen, in Sharp ist es meines Wissens nach unmöglich.

Es ist, alles, was getan werden kann, ist ein unbenutztes Objekt zu NULL zuweisen, gibt es Handbücher auf Microsoft-Website, wie zu erzwingen, um den Müllsammler aufrufen, aber es scheint, dass ich auf hubra lesen, dass nicht die Tatsache, dass der Sammler in diesem Aufruf wie erwartet gestartet werden

das heißt, in Sharp haben sie dem Programmierer den größten Teil der Speicherverwaltung abgenommen - alles ist der Gnade des Betriebssystems und des Compilers ausgeliefert

 
Igor Makanu:

Es ist, alles, was getan werden kann, ist ein unbenutztes Objekt zu NULL zuweisen, gibt es Handbücher auf Microsoft-Website, wie zu erzwingen, um den Müllsammler aufrufen, aber es scheint, dass ich auf hubra lesen, dass nicht die Tatsache, dass der Sammler in diesem Aufruf wie erwartet gestartet werden

das heißt, in Sharp haben sie dem Programmierer den größten Teil der Speicherverwaltung abgenommen - alles ist der Gnade des Betriebssystems und des Compilers ausgeliefert

Das war's. Ich schreibe gerade meine erste Sharp-Aufgabe und nach der neuen Methode fühle ich mich furchtbar, weil es keine Löschfunktion im Code gibt))).
 
Vladimir Simakov:
Das war's. Ich schreibe gerade mein erstes Sharp-Lehrbuch und bin erschrocken über das Fehlen von delete im Code nach new in method))).

anstelle von delete MyObj; write MyObj = null; - das wird funktionieren

und verwenden Sie dann ?? - am Anfang war es etwas umständlich, dann funktioniert es automatisch

aber es ist nicht der größte Unterschied von C++, in C# alle Objekte sind Referenzen und wenn Sie MyObj_1=MyObj_2; Sie erhalten keine Kopie, Sie erhalten einen Zeiger... Ich bin dabei, Sie zu verwirren. Hier ist eine kurze Anleitung, die ich nur überfliege, falls ich etwas vergessen habe

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


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

Ich glaube, ich fange an, die Notwendigkeit und Nützlichkeit von OOP zu verstehen, aber ich habe Schwierigkeiten, es zu implementieren.

Ich habe eine Klasse, die mit drei verschiedenen Sets von Variablen verwendet werden soll. Aber sie erfüllt eine Aufgabe. Einfach ausgedrückt, können wir 3 Konstruktoren einfügen, 3 Variablen deklarieren und auf sie verweisen. Meiner Meinung nach ist das aber nicht ganz richtig. Darüber hinaus gibt es eine Variable vom Typ String in zwei Varianten, die jedoch einen unterschiedlichen Namen hat und in verschiedenen Teilen des Codes verwendet wird. Natürlich können Sie die Reihenfolge der Variablen ändern, aber ich denke, auch das ist nicht ganz korrekt.

Ich habe die Dokumentation über den neuen Operator gelesen, aber ich verstehe nicht, wie er helfen kann. Ich sehe keinen Unterschied zwischen drei verschiedenen Objektvariablen und drei Zeigern auf dieselben Objekte. Vielleicht ist es vorteilhaft, wenn Sie einen Zeiger einmal erstellen, dieses Objekt verwenden und es löschen, wenn es nicht mehr benötigt wird. Wenn Sie das Objekt jedoch regelmäßig benötigen, ist es absolut unsinnig, jedes Mal einen Zeiger darauf zu erstellen und ihn zu löschen.

Also, bitte helfen Sie mir. Ich habe einige Erklärungen zu OOP in C++ gelesen, aber sie sind dort schlechter beschrieben als in der Dokumentation zu mql5. Bitte bitten Sie die Ungeduldigen nicht, sich mir anzuschließen, ich werde zu viele Fragen stellen. Ich bin auch nicht an vorgefertigtem Code ohne Erklärungen interessiert, ich möchte ihn verstehen und nicht stupide wiederholen "Mach mit uns, mach es wie wir...".

 
Alexey Viktorov:

Ich glaube, ich fange an, die Notwendigkeit und Nützlichkeit von OOP zu verstehen, aber ich habe Schwierigkeiten, es zu implementieren.

Ich habe eine Klasse, die mit drei verschiedenen Sets von Variablen verwendet werden soll. Aber sie erfüllt eine Aufgabe. Einfach ausgedrückt, können wir 3 Konstruktoren einfügen, 3 Variablen deklarieren und auf sie verweisen. Aber meiner Meinung nach ist das nicht ganz richtig. Darüber hinaus gibt es eine Variable vom Typ String in zwei Varianten, die jedoch einen unterschiedlichen Namen hat und in verschiedenen Teilen des Codes verwendet wird. Natürlich können Sie die Reihenfolge der Variablen ändern, aber ich denke, auch das ist nicht ganz korrekt.

Ich habe die Dokumentation über den neuen Operator gelesen, aber ich verstehe nicht, wie er helfen kann. Ich sehe nicht den Unterschied zwischen drei verschiedenen Objektvariablen und drei Zeigern auf dieselben Objekte. Vielleicht ist es vorteilhaft, wenn Sie einen Zeiger einmal erstellen, dieses Objekt verwenden und es löschen, wenn es nicht mehr benötigt wird. Wenn Sie das Objekt jedoch regelmäßig benötigen, ist es unsinnig, jedes Mal einen Zeiger auf das Objekt zu erstellen und es zu löschen.

Alles in allem: Bitte helfen Sie. Ich habe einige Erklärungen zu OOP in C++ gelesen, aber sie sind dort schlechter beschrieben als in der Dokumentation zu mql5. Bitte nicht ungeduldig Leute, ich werde zu viele Fragen stellen. Ich bin auch nicht an vorgefertigtem Code ohne Erklärungen interessiert, ich möchte ihn verstehen und nicht stupide wiederholen "Mach mit uns, mach es wie wir...".

Wir brauchen mehr Details. Welche Aufgabe erfüllt die Klasse?

 
Koldun Zloy:

Details sind erforderlich. Welche Aufgabe erfüllt die Klasse?

Es ist kein Geheimnis, ein Beispiel für wirtschaftliche Kalenderereignisse CalendarValueHistory(). In einem Fall sind es alle Nachrichten in dem betreffenden Zeitraum. In einem anderen nach Land und einer anderen Zeitspanne. Im dritten Fall ist es ein Symbol. Aber gibt es einen grundlegenden Unterschied? Unterteilen Programmiervorlesungen die Lösungen nach der Art der Aufgaben, die sie erfüllen?

Kürzlich traf ich jemanden, der eine Fahrprüfung nicht bestanden hatte und entrüstet behauptete, er sei in seinen Fahrstunden nicht an dieser Kreuzung gefahren und wisse einfach nicht, wie man an dieser Kreuzung fährt.

 
Obwohl ich jetzt denke, dass es vielleicht wirklich besser ist, einen Zeiger zu erstellen, das Objekt zu verwenden und es zu löschen, wenn es nicht benötigt wird? Schließlich ist die Zeitspanne jedes Mal eine andere. Oder ist es einfacher, Setter zu verwenden, um die Zeit in ein bestehendes Objekt einzufügen?
 
Alexey Viktorov:

In einem anderen nach Land und in einem anderen Zeitbereich.

Länder in Aufzählung

Im Konstruktor, auch durch die üblichen Schalter - Fall, tun Sie die Initialisierung, wie Sie brauchen, zeigte ich oben eine Vorlage mit Schnittstellen, ich auch eine der Strategien im Konstruktor initialisieren, je nach den Parametern, und der Rest der Arbeit wird auf das Schreiben einer bestimmten Strategie reduziert

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

 
Igor Makanu:

Länder in Aufzählung

Im Konstruktor, auch durch die üblichen Schalter - Fall, tun Sie die Initialisierung, wie Sie brauchen, zeigte ich oben eine Vorlage mit Schnittstellen, ich auch eine der Strategien in den Konstruktor in Abhängigkeit von den Parametern zu initialisieren, und der Rest der Arbeit kommt auf das Schreiben einer bestimmten Strategie

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

Langweilig... Es gibt auch Vorlagen und Schnittstellen, die beherrscht werden müssen.

Grund der Beschwerde: