Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969

    [VB.NET] Richiamare metodo da una classe creata

    Ciao a tutti, sono alle prime armi con VB.NET e sto facendo delle prove.

    Ho creato un form che cliccando un bottone mi popola una txtbox con i dati presi da una tabella mysql.
    Ho creato una funzione di connessione a mysql interna alla form.
    Nell'evento click del bottone l'ho richiamata e tutto funziona.

    Poi ho creato una classe esterna alla form (da solution -> create new project -> class library), chiamandola mysql_class, ho copiato all'interno della classe la funzione di connessione mettendola public, ho referenziato la classe nel form e ho creato un nuovo bottone per popolare la txtbox usando la funzione di connessione della classe appena creata. La funzione di connessione è chiamata mysql_connect.

    Nell'evento click del bottone scrivo:

    Dim link_db As MySqlConnection = mysql_class.mysql_connect(...)

    Mi da errore: mysql_connect is not a member of mysql_class.

    Dove sbaglio?

  2. #2
    Quella che vuoi è una funzione di classe, ossia deve essere visibile sempre e comunqe a tutte le sue istanze, perciò è static e deve essere dichiarata Shared. Se tu non hai fatto in questo modo, quella funzione è considerata una funzione d'istanza, ossia accessibile solo da oggetti creati ex novo:
    codice:
    Dim I As New mysql_class
    I.mysql_connect(...)
    Per ulteriori informazioni, vedi qui.

  3. #3
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    mysql_connect(...) deve essere un metodo statico.
    vedi la parola chiave shared !

    edit:non ho visto la risposta di totem
    I got the remedy

  4. #4
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Vi ringrazio per le risposte.
    Il problema era che non avevo capito che dovevo dichiarare l'istanza mettendo il nome della dll (mysql_class) seguito dal nome della classe (sempre mysql_class):

    codice:
    ' creo un'istanza della classe mysql_class
            Dim l As New mysql_class.mysql_class
            'inizializzo la variabile connessione
            Dim Connection As MySqlConnection = Nothing
            'connessione
            Connection = l.mysql_connect("localhost", "xxx", "xxx", "PROVA")
    ...
    Non ho usato shared ma il metodo indicato da totem (funzione d'istanza), dichiarando la funzione mysql_connect public.
    Ora funziona, grazie.

  5. #5
    Il mio codice voleva soltanto dimostrare la differenza tra le funzioni d'istanza e quelle di classe, ma concordo con albgen nel consigliarti vivamente di usare un metodo statico. Anche perchè in questo modo usi meno memoria.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.