![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
const - wenn es notwendig ist, die Zuweisung von Variablen zu verbieten (außer einmal während der Initialisierung). Wenn eine Variable als conts deklariert ist, muss bei der Übergabe an eine Funktion per Referenz auch das Funktionsargument const sein, aber der Compiler erzwingt dies, Sie müssen nicht darüber nachdenken. Wenn eine Variable nicht zugewiesen wird, kann sie auch als const markiert werden - das geht dann schneller, das gilt auch für Funktionsargumente. Es kann jedoch jederzeit vorkommen, dass Sie sie ändern müssen...
statisch - wenn es sich um eine Variable in einer Klasse handelt, ist das ein seltener Fall, sogar der seltenste. Wenn es sich um eine Klassenmethode handelt und die Methode nur Argumente dieser Methode und statische Variablen der Klasse behandelt, ist dies ebenfalls ein seltener Fall (allerdings nicht so selten, wenn man Funktionen nur der Einfachheit halber in einer Klasse sammelt).
Ich bin noch nicht dazu gekommen, die C# DLL für MQL5 auszuprobieren. Ich habe früher C++-Wrapper verwendet und eine Klasseninstanz in C# erstellt. Ich habe den Verdacht, dass diese DLL nun eine statische Klasse verwenden wird, was die Möglichkeiten stark einschränkt. Weiß jemand, ob jetzt eine statische oder eine dynamische Klasse erstellt wird?
Ich bin noch nicht dazu gekommen, die C# DLL für MQL5 auszuprobieren. Früher habe ich das mit C++-Wrappern gemacht, aber dafür wurde eine Instanz der Klasse in C# erstellt. Ich habe den Verdacht, dass die DLL jetzt eine statische Klasse verwenden wird, was ihre Möglichkeiten stark einschränkt. Weiß jemand, ob es jetzt eine statische oder dynamische Klasse erstellt?
Ich habe nur statische für MQL5 verwendet - wenn Sie den statischen Modifikator haben, wird die Signatur direkt von MU aus sichtbar sein, sehr praktisch
über die Einschränkung, könnten Sie die Aufgabe in einen separaten Thread werfen und ihn dann beenden.
oder Schreibaufrufe innerhalb der DLL
es ist kein Problem
UPD:
Ich bin mir nicht sicher, ob ich meine jüngsten Untersuchungen über die Gründe für die Verwendung von OOP in MQL-Aufgaben erklären kann, aber ich werde Ihnen sagen, was ich sehe
Wenn wir im Allgemeinen den OOP-Stil verwenden, die Zugriffskontrolle vollständig respektieren und sicherstellen, dass alle privaten/geschützten/öffentlichen Modifikatoren und die obligatorische Verwendung von const für jede Methodendefinition und -signatur (kann später entfernt werden, wenn sie zum Ändern von Daten verwendet wird) festgelegt werden und alle Zugriffe auf geschützte Daten mit get / set geschrieben werden, ist das Ergebnis der korrekten Verwendung von OOP die Entdeckung großer Fehler bei unbeabsichtigterDatenänderung während der Entwicklung.
Ich schrieb eine Klasse auf diese Weise von Grund auf neu - sofort Compiler gefunden Inkompatibilität mit meinem Problem, bekam in Basisklasse von Nachkomme bei der Überprüfung (Testen) die Idee, und wie üblich wurde abgelenkt und vergessen zu entfernen - nicht die Tatsache, dass ich diesen Fehler in der Prüfung gefunden hätte, könnte ich gedacht haben, dass es beabsichtigt war)) .
Ein weiterer bemerkenswerter Vorteil für mich ist das Fehlen aller global beschriebenen Variablen - ich versuche, sie nicht zu verwenden, sie werden hier überhaupt nicht verwendet (na ja, mit Ausnahme des globalen Optimierungsflags - für meine Bedürfnisse und das Flag für kritische Fehler beim Handel)
Eine interessante Beobachtung ist, dass beim Umschreiben aller Aufrufe über get / set, die Quelle Klasse zunächst in der Größe erhöht und dann begann deutlich schrumpfen, wenn ich begann, in den Aufrufen von get / set zu ersetzen - ich sage nicht, dass es stark bläht den Code in der Größe, aber wieder - dies wird die Kontrolle über die Datenintegrität!
SZY: Nun, wenn Sie im Herzen ein Perfektionist sind und glauben, dass ein zusätzlicher Aufruf über get / set ein zusätzlicher Takt auf der CPU ist, dann, wenn die Aufgabe zu 100 % erledigt ist, ist es nicht schwer, die Aufrufe zu jedem get / set über die Suche in der Quelle zu zählen und eine alte Regel anzuwenden - wenn Sie einen Abschnitt des Codes mehr als einmal aufrufen, dann müssen Sie diesen Abschnitt des Codes als eine Unterroutine machen.... niemand verbietet, das Gegenteil zu tun ---> nur ein Aufruf von get / set zu assign / read field.... aber das ist sozusagen "schmutzige Tricks" mit fragwürdigem Nutzen
Ich habe nur statische für MQL5 verwendet - wenn Sie statische Modifikatoren haben, wird die Signatur direkt von MU aus sichtbar sein, sehr praktisch
über die Einschränkung, könnten Sie die Aufgabe in einen separaten Thread verschieben und ihn dann beenden.
oder Schreibaufrufe innerhalb der DLL
Ich denke nicht, dass das ein Problem ist.
Ich meine nicht statische Mitglieder für Sharp, ich meine dies
Man kann eine statische Klasseninstanz nicht mit new erzeugen und mit delete zerstören, sie hat keine Konstruktoren und Destruktoren, alle Mitglieder und Methoden sind statisch. Jedenfalls ist es lange her, dass ich dort gearbeitet habe, aber ich weiß noch, wie unbequem es war, wie ein Prokrustesbett.
Sie werden in der Regel als Container für Bibliotheksfunktionen, z. B. mathematische Funktionen, verwendet.
Ich meinte nicht die statischen Mitglieder für Sharp, sondern diese
Ich denke, es ist eine Klasse, die MQL ohne den statischen Modifikator nicht sehen wird, aber es wird, wenn die Methoden innerhalb der Klasse einen statischen Modifikator haben.
Sie können alle Klassen innerhalb der DLL lokal verwenden, ich habe WinForm in einer DLL-Klasse ohne statische. alles funktioniert gut, aber ich rufe Funktionen mit statischen deklariert, und wo diese Funktionen innerhalb der Klasse deklariert sind - es spielt keine Rolle für DLL-Aufruf von MQL, auch wenn die gesamte Klasse statisch ist oder nicht.
ich kann es noch nicht überprüfen, ich habe das Studio noch nicht auf meinem Laptop installiert, nachdem ich ihn durch eine SSD ersetzt habe, ich brauche es noch nicht
Ich bin noch nicht dazu gekommen, die C# DLL für MQL5 auszuprobieren. Früher habe ich das mit C++-Wrappern gemacht, aber dafür wurde eine Instanz der Klasse in C# erstellt. Ich habe den Verdacht, dass die DLL jetzt eine statische Klasse verwenden wird, was ihre Möglichkeiten stark einschränkt. Weiß jemand, ob jetzt eine statische oder eine dynamische Klasse erstellt wird?
Die Klasse ist regulär, die Methoden sind statisch. Ich habe keine anderen Optionen ausprobiert.
Igor, Dmitry, kurz gesagt, ihr müsst es selbst ausprobieren. Soweit ich verstanden habe, ist es in jedem Fall notwendig, sich auf den Klassennamen und nicht auf den Namen des Klassenobjekts zu beziehen. Ich werde es versuchen, danke.
Anrede mit dem Namen der Klasse.
Ich kann nicht behaupten, dass dies die einzige Möglichkeit ist, C# von MQL5 aus aufzurufen, ich habe ein Beispiel vonhttps://www.mql5.com/ru/forum/285631 developers verwendet
Ich habe das Entwicklerbeispiel verwendet, um den Einstiegspunkt in C# zu erhalten, ich habe keine anderen Möglichkeiten verwendet, mit einigen Basteleien kann der gleiche .dll-Code für MT4 kompiliert werden
Artikel und meine Nachforschungen, warum der Code aus dem Artikel nicht wie vorgesehen funktioniert https://www.mql5.com/ru/forum/3153/page4#comment_10366498 - bisher funktioniert alles
Ich habe mir die Ergebnisse meines Kampfes mit OOP-artigem Code angesehen - hmmm... ausgezeichnet! ))))
Ich habe eine Frage, aber in meinem Code, na ja, genau drei Mal, verwende ich eine Konstruktion wie:
ruft alle in privaten Methoden, aber gibt es eine "Jedi-Methode?", um im Quellcode vonCheckPointer(m_order)==POINTER_INVALID wegzukommen
Ich frage nach einigen get / set
keine besonderen Probleme, sondern sozusagen eine Laune, oder wenn der Wissensdurst über OOP-Methoden in C++ noch nicht gestillt ist