none
Errore CS0120 RRS feed

  • Domanda

  • Ciao a tutti. Sto sviluppando un codice per tracciare dei parametri su DB SQL Server e richiamando in un public static ArrayList ricevo l' errore CS0120

            public static ArrayList Parametri_Rotore()
            {
                ArrayList arl = new ArrayList();
                par p;
                int id = Mex.PAR_ROTORE + 1;
                int id_par;

                // Descrizione
                p = new par(); id_par = 0;
                p.par_descr = Mex.M[id]; id++;
                p.par_tipo = TEXTBOX_STRINGA;
                p.par_min = 0;
                p.par_max = 0;
                p.par_lenght = 20;
                p.par_enable = Abilita_Parametro(OPERATORE);
                arl.Add(p);

                Insert_SQL_Par_Rotore(id.ToString(), p.par_descr, p.par_um, p.par_tipo.ToString(), p.par_min.ToString(), p.par_max.ToString(), p.par_lenght.ToString(), p.par_enable.ToString());

             ...
              }


    Il codice precedente viene richiamato da il seguente :

            private void Insert_SQL_Par_Rotore(string IDParametroProg_string, string Descrizione_string, string UnitaMisura_string, string Tipo_string, string Min_string, string Max_string, string Perc_string, string Perc_Enable_string)
            {
            ...
            }


    L'errore che ricevo è  il seguente :

      CS0120    È necessario un riferimento all'oggetto per la proprietà, il metodo o il campo non statico 'Form_Parametri.Insert_SQL_Par_Rotore(string, string, string, string, string, string, string, string)'  

    Come posso fare per risolverlo ? Grazie in anticipo.

    Paolo

              
    giovedì 7 novembre 2019 10:29

Risposte

  • Ciao l'errore CS0120 indica che stai richiamando un metodo non statico da uno statico per risolvere l'errore ci sono due metodi  o dichiari anche Insert_SQL_Par_Rotore come statica

     private static void Insert_SQL_Par_Rotore(string IDParametroProg_string, string Descrizione_string, string UnitaMisura_string, string Tipo_string, string Min_string, string Max_string, string Perc_string, string Perc_Enable_string)
            {
            ...
            }

    oppure tramite un istanza della classe in cui ai definito il metodo.

    var instance = new  Form_Parametri();
    instance.Insert_SQL_Par_Rotore(...);


    nel tuo casi credo che la prima soluzione sia la migliore.

    Un' altro suggerimento al posto degli ArrayList per motivi di prestazioni sarebbe meglio utilizzare le Collezioni Generic che evitano la conversione fra object e tipo di destinazione.

    Qui trovi la documentazione sui generincs

    Qui trovi un esempio dell'utilizzo di una lista generica.

    venerdì 8 novembre 2019 09:39

Tutte le risposte

  • Ciao, ho scritto il seguente codice per il richiamo di una procedura SQL inclusa in un private void e richiamata da public static ArrayList :

    public static ArrayList Parametri_Rotore()
            {
                ArrayList arl = new ArrayList();
                par p;
                int id = Mex.PAR_ROTORE + 1;
                int id_par;

                // Descrizione
                p = new par(); id_par = 0;
                p.par_descr = Mex.M[id]; id++;
                p.par_tipo = TEXTBOX_STRINGA;
                p.par_min = 0;
                p.par_max = 0;
                p.par_lenght = 20;
                p.par_enable = Abilita_Parametro(OPERATORE);
                arl.Add(p);

                Insert_SQL_Par_Rotore(id.ToString(), p.par_descr, p.par_um, p.par_tipo.ToString(), p.par_min.ToString(), p.par_max.ToString(), p.par_lenght.ToString(), p.par_enable.ToString());

             ...
              }


    Il codice precedente viene richiamato da il seguente :

            private void Insert_SQL_Par_Rotore(string IDParametroProg_string, string Descrizione_string, string UnitaMisura_string, string Tipo_string, string Min_string, string Max_string, string Perc_string, string Perc_Enable_string)
            {
            ...
            }


    L'errore che ricevo è  il seguente :

      CS0120    È necessario un riferimento all'oggetto per la proprietà, il metodo o il campo non statico 'Form_Parametri.Insert_SQL_Par_Rotore(string, string, string, string, string, string, string, string)'  

    Mi sapreste indirizzare su come posso fare per risolverlo ? Grazie in anticipo.

    Paolo

    giovedì 7 novembre 2019 13:42
  • il codice è tutto nella stessa classe?

    magari prova a postare il resto del codice


    giovedì 7 novembre 2019 17:17
  • Ciao l'errore CS0120 indica che stai richiamando un metodo non statico da uno statico per risolvere l'errore ci sono due metodi  o dichiari anche Insert_SQL_Par_Rotore come statica

     private static void Insert_SQL_Par_Rotore(string IDParametroProg_string, string Descrizione_string, string UnitaMisura_string, string Tipo_string, string Min_string, string Max_string, string Perc_string, string Perc_Enable_string)
            {
            ...
            }

    oppure tramite un istanza della classe in cui ai definito il metodo.

    var instance = new  Form_Parametri();
    instance.Insert_SQL_Par_Rotore(...);


    nel tuo casi credo che la prima soluzione sia la migliore.

    Un' altro suggerimento al posto degli ArrayList per motivi di prestazioni sarebbe meglio utilizzare le Collezioni Generic che evitano la conversione fra object e tipo di destinazione.

    Qui trovi la documentazione sui generincs

    Qui trovi un esempio dell'utilizzo di una lista generica.

    venerdì 8 novembre 2019 09:39