Salve a tutti,
premetto che sto muovendo i primi passi verso C# in ambiente di svliluppo Visual Studio.
Ho creato per la prima volta un componente visuale e fin qui tutto ok. Tale componente, al suo interno utilizza un oggetto:
TPippo pippo;
Quello che io vorrei (ed ho fatto) è implementare tutte le funzioni all’interno del componente, utilizzando i vari metodi di “pippo”. Questo è stato fatto e tutto funziona.
Avrei bisogno che l'oggetto "pippo" fosse passato dall’esterno.
Per capirci. Il software che sto implementando nel Main crea un’istanza dell’oggetto “pippo”. Tale oggetto dovrà essere visibile in tutte le altre classi del progetto.
Il componente che ho implementato deve ricevere il riferimento di questo oggetto così da utilizzare le sue funzioni al suo interno.
All’interno del mio componente però, devo creare un’istanza di “pippo” altrimenti (giustamente mi da un errore quando cerco di utilizzare i suoi metodi).
La soluzione da me approntata è stata la seguente:
All’interno del componente ho creato una proprietà che prendesse proprio il riferimento a questo oggetto. Dalla form principale creo l’istanza di “pippo” (ricordo che deve essere visibile e attiva in tutto il progetto); alla proprietà del componente assegno il riferimento creato nella form e tutto funziona.
Quel che mi sembra poco elegante è avere all’interno del componente un’istanza dell’oggetto, tale istanza non verrà infatti utilizzata siccome, passando un riferimento ad un oggetto esterno, il componente andrà ad utilizzare l’oggetto creato nella form.
C’è un modo per ovviare al problema? Cioè vi è una soluzione più elegante? So che (se non erro) C# ha il garbage collection, quindi in teoria, uscendo dalla form che utilizza il componente, non dovrebbero esserci oggetti pendenti (e conseguente spreco di memoria).. ma cercavo appunto una soluzione più elegante.
Se non sono stato chiaro posso rispiegare più in dettaglio cosa fa la classe "pippo" così da far capire perché deve essere visibile in tutto il programma e perché ho creato un componente apposito.
Grazie in anticipo per le risposte