Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Dichiarazione e riempimento lista in una Classe
Forum - C# / VB.NET - [VB.NET] Dichiarazione e riempimento lista in una Classe

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 15:00
Lunedì, 28/06/2010
Buongiorno a tutti,

ecco un piccolo dilemma che oggi mi affligge.

Come mai non possi riempire un array di una struttura personalizzata in una classe?

Ecco il codice :

Codice sorgente - presumibilmente VB.NET

  1. 'struttura della lista parametri
  2.     Public Structure ElencoParametri
  3.         Public Comando As String
  4.         Public Risposta As String
  5.         Public Password As Boolean
  6.         Public Contatore As Integer
  7.     End Structure
  8.  
  9.     'elementi presenti nella lista dei parametri
  10.     Private NumParametri As Integer = 5
  11.  
  12.     'dichiaro lista parametri
  13.     Public Parametri(NumParametri) As ElencoParametri
  14.  
  15.     Parametri(0).Comando = "Prova"    'ECCO DOVE RESTITUISCE L'ERRORE



Nell'ultima riga del codice postato mi segnala errore (Declaration Expected).

L'unico modo che sono riuscito a trovare per compilare questa lista è includere la compilazione in una Sub, ecco il codice :

Codice sorgente - presumibilmente VB.NET

  1. 'inizializzazione dei parametri
  2.     Public Sub Inizializza_Parametri()
  3. 'Richiesta DA
  4.         Parametri(0).Comando = "DA"
  5.         Parametri(0).Risposta = ""
  6.         Parametri(0).Password = False
  7.         Parametri(0).Contatore = 0
  8. End Sub



Facendo così, per far si che la lista funzioni devo richiamare la sub Inizializza_Parametri(), scomodo all'interno di una dll.

Dove sbaglio? Consigli?

Grazie


PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:29
Lunedì, 28/06/2010

sbagli che il codice deve avere un contesto... non esiste il codice "al volo" :)

non importa che crei una dll o un programma, se quella classe deve inizializzare un'array semplicemente lo inserirai nel suo costruttore :)

PM Quote
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 15:48
Lunedì, 28/06/2010
Testo quotato


sbagli che il codice deve avere un contesto... non esiste il codice "al volo"  

non importa che crei una dll o un programma, se quella classe deve inizializzare un'array semplicemente lo inserirai nel suo costruttore  



mmm.... capisco perfettamente cosa vuoi dire, solo che mi sembra un pò scomodo per chi userà la dll finale.

Questa famigerata lista, mi serve per inviare tramite porta seriale il testo contenuto nel campo Comando, è molto pericoloso dare la possibilità all'utilizzatore della dll di modificare a proprio piacimento quel campo... capisci?

diciamo che la lista viene usata/manipolata solo all'interno della dll...

qualche idea o consiglio? magari un'alternativa a questa lista... :heehee:

Ultima modifica effettuata da Neo1986 il 28/06/2010 alle 15:49
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:55
Lunedì, 28/06/2010
Testo quotato

Postato originariamente da Neo1986:

Testo quotato


sbagli che il codice deve avere un contesto... non esiste il codice "al volo"  

non importa che crei una dll o un programma, se quella classe deve inizializzare un'array semplicemente lo inserirai nel suo costruttore  



mmm.... capisco perfettamente cosa vuoi dire, solo che mi sembra un pò scomodo per chi userà la dll finale.

Questa famigerata lista, mi serve per inviare tramite porta seriale il testo contenuto nel campo Comando, è molto pericoloso dare la possibilità all'utilizzatore della dll di modificare a proprio piacimento quel campo... capisci?

diciamo che la lista viene usata/manipolata solo all'interno della dll...

qualche idea o consiglio? magari un'alternativa a questa lista... :heehee:



l'utilizzatore della dll non ha il suo sorgente, altrimenti gli daresti il sorgente... non la dll, giusto?

Cosa intendi per "pericoloso"? Perchè mai dovrebbe modificarlo o ne dovrebbe essere in grado?
Si può tranquillamente impedire che una classe venga ad esempio ereditata e quindi overridata, in questo modo se sistemi quei parametri nel costruttore niente e nessuno toccherà quel codice.

Questo discorso ovviamente presuppone un mondo perfetto in cui i decompilatori .NET non esistono e tutti gli utenti sono buoni. Altrimenti bastano cmq due colpi di reflection per fare qualsiasi cosa per non parlare poi di estrarre tutto il codice del progetto dalla dll compilata.

Non so cosa stai realizzando, ma a mio avviso c'è qualcosa che non va nella scelta del linguaggio.

Ultima modifica effettuata da HeDo il 28/06/2010 alle 15:56
PM Quote
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 16:59
Lunedì, 28/06/2010
mmm penso non ci stiamo capendo entrambi....

Allora, stò realizzando una dll che comunica con un sensore laser via porta seriale.

Dopo aver stabilito la comunicazione devo interrogare il sensore in questo modo:

ComPort.Write(COMANDO + vbcr + vblf)

e dopo aspetto la risposta e tutto ok.

Visto che ho una miriade di comandi, avevo pensato di inserire tutti i comandi in un lista di una struttura personalizzata, così facendo un semplice for posso inviare il comando, aspettare la risposta ed incrementando di 1 l'indice della lista passare alla richiesta successiva.

Il problema è che non riesco a riempire con i comandi la lista (con il codice che puoi leggere nel primo post).

Sono stato un pelo più chiaro? :k:

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 17:21
Lunedì, 28/06/2010
in pratica, tu il codice

Codice sorgente - presumibilmente Plain Text

  1. Parametri(0).Comando = "Prova"


lo metti nella DLL libero, senza metterlo in una funzione? Perché se è così è ovvio che ti dia errore.

Deve essere inserito in una Sub oppure in una Function.

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 17:26
Lunedì, 28/06/2010
Testo quotato

Postato originariamente da lorenzo:

in pratica, tu il codice

Codice sorgente - presumibilmente Plain Text

  1. Parametri(0).Comando = "Prova"


lo metti nella DLL libero, senza metterlo in una funzione? Perché se è così è ovvio che ti dia errore.

Deve essere inserito in una Sub oppure in una Function.



intervento inutile in quanto fin qui c'eravamo arrivati...

ho capito cosa vuoi fare e non mi sembra così difficile, semplicemente metti le inizializzazioni nei costruttori delle classi che ne hanno bisogno, punto.

a parte il fatto che potresti creare una classe per ogni comando e adottare un approcio molto più OOP alla situazione, al posto che cercare di usare vb.net come vb6 ;)

PM Quote
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 17:39
Lunedì, 28/06/2010
visto che abbiamo fatto 30 facciamo 31, nel caso volessi usare una classe per ogni comando, come potrei fare nel thread di lettura per fargli "scorrere" tutte le classi (quindi ogni comando)?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 17:54
Lunedì, 28/06/2010
Testo quotato

Postato originariamente da Neo1986:

visto che abbiamo fatto 30 facciamo 31, nel caso volessi usare una classe per ogni comando, come potrei fare nel thread di lettura per fargli "scorrere" tutte le classi (quindi ogni comando)?



l'oop non si spiega in un post :D

l'idea base sarebbe quella di creare una classe astratta command dalla quale tutti i comandi discendono. E un commandforger che dai dati di ingresso restituisce un'istanza della classe che rappresenta quel comando.
Nella classe base metti dei comandi per serializzare/deserializzare il comando in modo da poterli chiamare direttamente sui dati.

E' un argomento non banale in cui intervengono molti aspetti della programmazione OOP, ti consiglio un buon libro :D

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo