![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
const - se for necessário proibir a atribuição de variáveis (exceto uma vez durante a inicialização). Se uma variável é declarada como conts, então ao passá-la para uma função por referência, o argumento da função também deve ser constante, mas o compilador forçará isso, não é preciso pensar sobre isso. Se uma variável não estiver sendo atribuída, ela também pode ser marcada como const - ela funcionará mais rapidamente, isto se aplica a argumentos de função. No entanto, a qualquer momento, pode ser necessário modificá-lo...
estática - se é uma variável em uma classe, é um caso raro, mesmo o mais raro. Se é um método de classe, então se o método trata apenas de argumentos deste método e variáveis estáticas da classe, também é um caso raro (entretanto, não tão raro, se você apenas coletar funções em uma classe por conveniência).
Ainda não cheguei a tentar a DLL C# para MQL5. Eu costumava usar invólucros C++ e criei uma instância de classe em C#. Tenho uma suspeita de que esta DLL utilizará agora uma classe estática, o que limita severamente as opções. Alguém sabe se uma classe estática ou dinâmica está sendo criada agora?
Ainda não experimentei a DLL C# para MQL5. Eu costumava fazer isso com invólucros C++, no lado positivo foi criada uma instância da classe em C#. Tenho uma suspeita de que agora a DLL utilizará uma classe estática, o que limita severamente suas possibilidades. Alguém sabe se agora está criando uma classe estática ou uma classe dinâmica?
Eu só usei estáticos para MQL5 - se for usado modificador estático, a assinatura será visível diretamente da MU, muito útil
sobre a restrição, você poderia jogar a tarefa em um fio separado e depois matá-la.
ou escreva chamadas dentro da dll
não é um problema
UPD:
Não tenho certeza se posso explicar minha recente pesquisa sobre a lógica do uso do OOP em tarefas de MQL, mas vou lhe dizer o que vejo
Em geral, se usarmos o estilo OOP, respeitando totalmente o controle de acesso e assegurando a definição de todos os modificadores privados/protegidos/públicos e uso obrigatório constante para cada definição e assinatura de método (pode ser removido mais tarde se usado para modificar dados) e escrevendo todo o acesso aos dados protegidos com get / set, o resultado de usar o OOP corretamente, é a detecção de grandes bugs namodificação não intencionalde dados durante o desenvolvimento.
Eu reescrevi uma classe desse jeito do zero - imediatamente o compilador encontrou incompatibilidade com meu problema, entrou na classe base de descendente ao verificar (testar) a idéia, e como sempre me distraí e esqueci de remover - não o fato de que eu teria encontrado esse bug no teste, eu poderia ter pensado que era a intenção))) .
Outra vantagem notável para mim é a ausência de todas as variáveis descritas globalmente - tento não usá-las, elas não são usadas aqui (bem, exceto pela bandeira de otimização global - para atender minhas necessidades e a bandeira de erro crítico ao negociar)
Uma observação interessante é que ao reescrever todas as chamadas via get / set, a classe da fonte primeiro aumentou em tamanho e depois começou a diminuir significativamente, quando comecei a substituir nas chamadas de get / set - não digo que isso inflaciona muito o código em tamanho, mas novamente - isso proporcionará controle sobre a integridade dos dados!
SZY: bem, se você é um perfeccionista de coração e acredita que uma chamada extra via get / set é um relógio extra na CPU, então quando a tarefa está 100% concluída, não é difícil contar as chamadas para cada get / set via busca no código fonte e aplicar uma regra antiga - se você chamar uma seção de código mais de uma vez, então você deve fazer esta seção de código como uma sub-rotina.... ninguém proíbe fazer o contrário ---> apenas uma chamada para receber / definir para atribuir / ler campo.... mas isto é para dizer "truques sujos" com benefícios questionáveis
Eu só usei estáticos para MQL5 - se você tiver modificador estático, a assinatura será visível diretamente da MU, muito útil
sobre a restrição, você poderia jogar a tarefa em um fio separado e depois matá-la.
ou escreva chamadas dentro da dll
Eu não acho que isso seja um problema.
Não me refiro a membros estáticos para a Sharp, mas sim a isto
Não se pode criar uma instância de classe estática via nova e destruí-la via exclusão, não tem construtores e destruidores, todos os membros e métodos são estáticos. De qualquer forma, já faz muito tempo que eu não trabalho lá, mas lembro como era desconfortável, como uma cama procrusteana.
São normalmente usados como um recipiente para funções de biblioteca, como funções matemáticas.
Eu não quis dizer membros estáticos para a Sharp, mas isto
Acho que é uma classe que não verá MQL sem o modificador estático, mas verá se os métodos dentro da classe tiverem um modificador estático.
você pode usar qualquer classe dentro da dll localmente, eu tenho o WinForm em uma classe dll sem estática. tudo funciona bem, mas eu chamo funções declaradas com estática, e onde estas funções são declaradas dentro da classe - não importa a chamada dll da MQL, mesmo que a classe inteira seja estática ou não.
ainda não poderei verificá-lo, não instalei o estúdio em meu laptop depois de tê-lo substituído por SSD, ainda não preciso dele
Ainda não experimentei a DLL C# para MQL5. Eu costumava fazer isso com invólucros C++, no lado positivo foi criada uma instância da classe em C#. Tenho uma suspeita de que agora a DLL utilizará uma classe estática, o que limita severamente suas possibilidades. Alguém sabe se uma classe estática ou dinâmica está sendo criada agora?
A classe é regular, os métodos são estáticos. Eu não tentei nenhuma outra opção.
Igor, Dmitry, em resumo, você mesmo tem que tentar. Pelo que entendi, em qualquer caso, é necessário fazer referência pelo nome da classe, e não pelo nome do objeto de classe. Vou tentar, obrigado.
Endereço com o nome da classe.
Não posso afirmar que esta é a única maneira de chamar C# da MQL5, usei um exemplo de desenvolvedores dohttps://www.mql5.com/ru/forum/285631
Eu usei o exemplo dos desenvolvedores para obter o ponto de entrada em C#, não usei outras formas, com alguns ajustes no mesmo código .dll pode ser compilado para MT4
artigo e minha pesquisa sobre por que o código do artigo não funciona como pretendido https://www.mql5.com/ru/forum/3153/page4#comment_10366498 - tudo funciona até agora
olhou os resultados da minha batalha com o código estilo OOP - hmmm... excelente! ))))
Eu tenho uma pergunta, mas em meu código, bem, três vezes exatamente, eu uso uma construção como:
chama tudo em métodos privados, mas existe um "método Jedi ?" para escapar no código fonte doCheckPointer(m_order)==POINTER_INVALID
Estou perguntando sobre alguns get / set
nenhum problema especial, mas por assim dizer um capricho, ou enquanto a sede de conhecimento dos métodos OOP em C++ ainda não diminuiu