Domande su OOP in MQL5 - pagina 32

 
Vladimir Tkach:
Ultimamente ho iniziato a vedere una sorta di "raccolta di spazzatura" nelle funzioni di vari compilatori. Che cos'è?
Se intendi la garbage collection, è la cosa che fa la cancellazione al posto tuo, ma non quando la variabile lascia lo scope, ma quando vuole. A proposito, non il fatto che ti sia permesso chiamare il distruttore da solo, dipenderà dalla lingua, in Sharp, da quanto ho capito è impossibile.
 
Vladimir Simakov:
Qui dipenderà dalla lingua, in Sharp, come ho capito è impossibile.

È, tutto ciò che si può fare è assegnare un oggetto inutilizzato a NULL, ci sono manuali sul sito Microsoft come forzare a chiamare il raccoglitore di rifiuti, ma sembra che ho letto su hubra che non il fatto che il raccoglitore sarà lanciato in questa chiamata come previsto

cioè, in Sharp hanno tolto la maggior parte della gestione della memoria al programmatore - tutto è in balia del sistema operativo e del compilatore

 
Igor Makanu:

È, tutto ciò che si può fare è assegnare un oggetto inutilizzato a NULL, ci sono manuali sul sito Microsoft come forzare a chiamare il raccoglitore di rifiuti, ma sembra che ho letto su hubra che non il fatto che il raccoglitore sarà lanciato in questa chiamata come previsto

cioè, in Sharp hanno tolto la maggior parte della gestione della memoria al programmatore - tutto è alla mercé del sistema operativo e del compilatore

Ecco fatto. Sto scrivendo il mio primo compito Sharp in questo momento e dopo il nuovo metodo mi sento malissimo a causa dell'assenza di cancellazione nel codice))).
 
Vladimir Simakov:
Ecco fatto. Attualmente sto scrivendo il mio primo libro di testo su Sharp e sono spaventato dall'assenza di cancellazione nel codice dopo new in method))).

invece di cancellare MyObj; scrivere MyObj = null; - questo funzionerà

e poi usare ?? - all'inizio era un po' scomodo, poi funziona automaticamente

ma non è la più grande differenza rispetto al C++, in C# tutti gli oggetti sono riferimenti e se si imposta MyObj_1=MyObj_2; non si ottiene una copia, si ottiene un puntatore... Sto per confondervi, ecco un veloce tutorial, lo sto solo riguardando nel caso abbia dimenticato qualcosa

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


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

Penso che sto cominciando a capire la necessità e l'utilità dell'OOP, ma sto avendo problemi ad implementarla.

Ho una classe che deve essere usata con tre diversi set di variabili. Ma esegue un compito. In termini semplici, possiamo inserire 3 costruttori, dichiarare 3 variabili e fare riferimento ad esse. Ma per come la vedo io, non è del tutto corretto. Inoltre, c'è una variabile di tipo stringa in due varianti, ma ha un nome diverso ed è usata in diverse parti del codice. Naturalmente, si può cambiare la sequenza delle variabili, ma penso che anche questo non sia del tutto corretto.

Ho letto la documentazione sul nuovo operatore ma non capisco come possa essere utile. Non vedo la differenza tra tre diverse variabili oggetto e tre puntatori agli stessi oggetti. Forse è vantaggioso quando si crea un puntatore una volta, usare questo oggetto e cancellarlo quando non è necessario. Ma se avete bisogno dell'oggetto regolarmente, è assolutamente stupido creare un puntatore ad esso ogni volta e cancellarlo.

Quindi, per favore, datemi una mano. Ho letto alcune spiegazioni di OOP in C++, ma lì sono descritte in modo peggiore che nella documentazione di mql5. Per favore, non chiedete agli impazienti di unirsi a me, farei troppe domande. Non mi interessa nemmeno il codice già pronto senza spiegazioni, voglio capirlo, e non ripetere stupidamente "Fai con noi, fai come noi...".

 
Alexey Viktorov:

Penso che sto cominciando a capire la necessità e l'utilità dell'OOP, ma sto avendo problemi ad implementarla.

Ho una classe che deve essere usata con tre diversi set di variabili. Ma esegue un compito. In termini semplici, possiamo inserire 3 costruttori, dichiarare 3 variabili e fare riferimento ad esse. Ma per come la vedo io, non è del tutto corretto. Inoltre, c'è una variabile di tipo stringa in due varianti, ma ha un nome diverso ed è usata in diverse parti del codice. Naturalmente, si può cambiare la sequenza delle variabili, ma penso che anche questo non sia del tutto corretto.

Ho letto la documentazione sul nuovo operatore ma non capisco come possa essere utile. Non vedo la differenza tra tre diverse variabili oggetto e tre puntatori agli stessi oggetti. Forse è vantaggioso quando si crea un puntatore una volta, usare questo oggetto e cancellarlo quando non è necessario. Ma se avete bisogno dell'oggetto regolarmente, è stupido creare un puntatore ad esso ogni volta e cancellarlo.

Tutto sommato, per favore aiutatemi. Ho letto alcune spiegazioni di OOP in C++, ma lì sono descritte in modo peggiore che nella documentazione di mql5. Si prega di non essere impazienti, farò troppe domande. Non mi interessa nemmeno il codice già pronto senza spiegazioni, voglio capirlo, e non ripetere stupidamente "Fai con noi, fai come noi...".

Abbiamo bisogno di più dettagli. Quale compito svolge la classe?

 
Koldun Zloy:

I dettagli sono necessari. Quale compito svolge la classe?

Non è un segreto, un esempio di eventi del calendario economico CalendarValueHistory(). In un caso, tutte le notizie nell'intervallo di tempo. In un altro per paese e in un altro intervallo di tempo. Nel terzo è da un simbolo. Ma c'è una differenza fondamentale? Le lezioni di programmazione dividono le soluzioni in base al tipo di compiti che svolgono?

Recentemente ho incontrato qualcuno che non ha superato un esame di guida ed era indignato, dicendo che non aveva guidato in quell'incrocio durante le sue lezioni di guida e semplicemente non sapeva come guidare in quell'incrocio.

 
Anche se ora sto pensando che forse è davvero meglio creare un puntatore, usare l'oggetto e cancellarlo quando non è necessario? Dopo tutto, l'intervallo di tempo sarà diverso ogni volta. O è più facile usare i setter per inserire il tempo in un oggetto esistente?
 
Alexey Viktorov:

In un altro per paese e in un intervallo di tempo diverso.

paesi in enum

Nel costruttore, anche attraverso il solito switch - case, fate l'inizializzazione come avete bisogno, ho mostrato sopra un modello con interfacce, inizializzo anche una delle strategie nel costruttore, a seconda dei parametri, e il resto del lavoro si riduce a scrivere una strategia specifica

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

 
Igor Makanu:

paesi in enum

Nel costruttore, anche attraverso il solito switch - case, fate l'inizializzazione come avete bisogno, ho mostrato sopra un modello con interfacce, inizializzo anche una delle strategie nel costruttore, a seconda dei parametri, e il resto del lavoro si riduce a scrivere una strategia specifica

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

Noioso... Ci sono anche modelli e interfacce da padroneggiare?