Frage zum Tippen - Seite 6

 
Soweit ich mich erinnere, ist C# kein guter Freund von mql
 
Ilya Malev:
Soweit ich mich erinnere, ist C# kein guter Freund von mql

https://www.mql5.com/ru/forum/285631

10. MQL5: Native Unterstützung für .NET-Bibliotheken mit "intelligentem" Funktionsimport hinzugefügt. Jetzt können Sie .NET-Bibliotheken verwenden, ohne spezielle Wrapper schreiben zu müssen - MetaEditor kümmert sich um diese Aufgabe.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Kein Aufruf, in C# zu schreiben. Nur, dass die Vorteile der impliziten Konvertierung sind fraglich (imho, Zucker, nicht mehr), ist es nicht erhöhen Rentabilität der Strategien. Wenn mir jemand erklären kann, warum dies bei der Programmierung von Strategien so hilfreich ist, würde ich mich freuen, etwas Neues zu lernen.
 
Vasiliy Sokolov:
Die Rentabilität der Strategien wird dadurch nicht erhöht.

Der Verweis auf die Rentabilität von Strategien bei der Erörterung von Programmiertechniken ist eher deprimierend.

Vasiliy Sokolov:
Wenn mir jemand erklären kann, warum das bei der Codierung so hilfreich ist, würde ich mich freuen, etwas Neues zu lernen.

Sie können nicht einmal Ihr eigenes mehrdimensionales Array richtig erstellen. Ganz zu schweigen von einem Array mit verschiedenen Arten von Werten. Man kann es nicht einmal mit nur einem tun, weil ein solcher Code nicht in mql passen würde:

  Array array;

  double d=123.456;

  array[5]=d;

  d=array[5];

Natürlich können Sie d=array[5].to_double() schreiben, so tun, als ob es so sein sollte, und sich über Ihren hässlichen Code freuen. Aber wenn das Überladen von Typumwandlungsoperationen erlaubt wäre, würde kaum jemand diese Schreibweise von d=array[5] bevorzugen.

 
Ilya Malev:

...

Sie können natürlich d=array[5].to_double() schreiben, so tun, als sei dies korrekt, und sich über Ihren fehlerhaften Code freuen. Aber wenn das Überladen von Typumwandlungsoperationen erlaubt wäre, würde kaum jemand diese Schreibweise von d=array[5] bevorzugen.

Unkompliziert. d=array[5] könnte:

template <typename T>
class MainArray
{
private:
   T m_items[];
   int m_curr;
public:
   MainArray()
   {
      ArrayResize(m_items, 16);
      m_curr = 0;
   }
   void Add(T item)
   {
      m_items[m_curr++] = item;
   }
   T operator[](int index)
   {
      return m_items[index];
   }
};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   MainArray<double> array;
   array.Add(123.456);
   double v = array[0];
   printf((string)v);
}

Wenn Sie es genau nehmen, gibt es immer noch Schwierigkeiten mit array[3] = 4.00123; Aber es ist lesbar und gut so, wie es ist.

 
Vasiliy Sokolov:

Richtig. d=array[5] ist in Ordnung:

Wenn man sich langweilt, gibt es Schwierigkeiten mit array[3] = 4.00123; Aber es ist lesbar und gut genug, wie es ist.

Ja, d=array[5] ist ok. aber dann kann man array[5]=d nicht machen. Aber Sie können %= anstelle von =. kein Problem, zur gleichen Zeit das Symbol wird uns daran erinnern, welche Stelle alles durch getan wird))

 
Ilya Malev:

Ja, d=array[5] kann. aber dann kann man nicht array[5]=d machen. Sie können aber auch %= anstelle von = verwenden, das ist kein Problem, und das Symbol erinnert Sie daran, welche Stelle Sie verwenden müssen))

Wenn Sie es wirklich wollen, können Sie wie folgt vorgehen

#property strict

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

#define  PRINT(A) ::Print(#A + " = " + (string)(A));

void OnStart( void )
{
// Работа со стандартными типами
  color Color = C'241,248,255';

  PRINT(_R(Color)[(uchar)1])             // Green-составляющая цвета - 248

  _W(Color)[2] = (uchar)230;             // Записали по смещению 2 значение (uchar)230.
  PRINT(Color)                           // Убедились, что Color теперь C'241,248,230'

// Работа со строками
  string Str = "abcd";

  _W(Str)[2] = "98765";                  // Побайтовая запись строки в строку со смещением 2
  PRINT(Str)

  string StrArray[] = {"123", "45", "6789"};
  _W(Str) = StrArray;                    // Записали в строку строковый массив
  PRINT(Str)

  _W(Str)[3] = (uchar)0;                 // В байт со смещением 3 записали ноль, тем самым отбрезав строку (длина - 3 ANSI-символа (4 байта))
  PRINT(Str);
}

usw.

 
pavlick_:

Ich war zuerst auch kritisch, aber dann habe ich mir gedacht, dass ich selbst eine Verwendung dafür finden würde:

Ich habe vor etwa drei oder vier Jahren einen Klammeroperator und einen Grapeshot-Operator gefordert.

fragen Sie, vielleicht können Sie es besser.

 
Es ist schade, dass Sie Ihren Beiträgen keine Pluspunkte hinzufügen können).
 
Ilya Malev:

...

Sie können natürlich d=array[5].to_double() schreiben, so tun, als sei dies korrekt, und sich über Ihren fehlerhaften Code freuen. Aber wenn das Überladen von Typumwandlungsoperationen erlaubt wäre, würde kaum jemand diese Schreibweise von d=array[5] bevorzugen.

Welche Probleme die Menschen haben))) Oh, segne mein Leben!

Übrigensist es viel einfacher, d=array[5].to_double() zu schreibenalsd=(double)array[5] Drücken Sie einfach einen Punkt. Aber wir sind nicht auf der Suche nach einfachen Wegen...