Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: Overload C#

  1. #1
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026

    Overload C#

    Salve ho fatto un overload ma non riesco a mantenere il valore nella variabile s1.
    codice:
            private void btnSomma_Click(object sender, EventArgs e)
            {
                    double op1;
                    op1 = Convert.ToDouble(op1Txt.Text);
                    ClassOperazioni sommatoria = new ClassOperazioni(op1);
            }
            private void btnUguale_Click(object sender, EventArgs e)
            {
                   double x = 0;
                   int c = Convert.ToInt32(x);
                   double op2;
                   op2 = Convert.ToDouble(op1Txt.Text);
                   ClassOperazioni sommatoria2 = new ClassOperazioni(op2,c);
                   op1Txt.Text = Convert.ToString(sommatoria2.Somma());
           }
    codice:
            public ClassOperazioni(double a)
            {
                  som0 = a;
            }
             public ClassOperazioni(double b, int c) 
            {
                som00 = b; som1 = c;
            }
            public double Somma1()
            {
                    double s1 = som0;
                    return s1 ;
            }
            public double Somma2()
            { 
                   double s2 = som00;
                   return s2;
            }
            public double Somma()
            {
                double somma =(Somma1() + Somma2());
                return somma;
            }
    Qualcuno ha qualche idea?
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    A prescindere dall'assurdità del codice, soprattutto non si capisce bene a cosa serva:

    codice:
      double x = 0;
      int c = Convert.ToInt32(x);
    è normale che tu se tu clicchi su btnUguale la variabile s1 non ti risulti in quanto richiami una funzione
    codice:
    op1Txt.Text = Convert.ToString(sommatoria2.Somma());
    che appartiene a un'istanza della classe ClassOperazioni che non è la stessa che hai creato nell'evento del pulsante btnSomma
    codice:
     ClassOperazioni sommatoria = new ClassOperazioni(op1);
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Ciao Pirelli72.
    Me ne sono accorto solo adesso che le due istanze dei bottoni della somma e dell'uguale, non comunicano tra di loro.
    Infatti vorrei capire, se faccio la domanda giusta, come sommare i valori delle variabili delle due istanze?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Prima di tutto devo capire perchè devi usare due istanze della stessa classe per fare una somma.
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Ho creato una calcolatrice visuale(una TextBox e due Botton '+','-'), che sulla stessa TextBox vengono inseriti i dati da sommare e poi una volta sommati deve restituire il valore sempre nella stessa TextBox.
    Mi sono avvalso in un primo tempo di un costruttore che passasse i due parametri però mi sono accorto che deve passare un parametro per volta.
    Ma costruendo un costruttore che passa un solo parametro, si era possibile ma a condizione che il primo inserimento nella TextBox il parametro veniva passato in una funzione Somma1() ed il secondo parametro nella seconda funzione Somma2(), quindi questa cosa.
    Cosi ho fatto un overload, in modo che il costruttore con singolo parametro passasse il valore alla funzione Somma1(), mentre in secondo costruttore passase i due parametri alla funzione Somma2() e che ne restituisse solo un valore.
    E così ho istanziato due volte la classe ClassOperazioni, non sapendo che stavo creando due oggetti della stessa classe con ritorno di funzioni abbinati al singolo oggetto e quindi separati tra di loro.

    Algoritmo sarebbe questo:

    1_Clicco con il mouse nella TextBox.
    2_Inserisco un valore numerico di tipo double da tastiera
    3_Clicco il bottone + 'Più'
    4_Inserisco un'altro valore numerico di tipo double da tastiera
    5_Clicco il bottone = 'Uguale'

    All'evento del bottone '+' l'oggetto che viene istanziato deve passare un parametro, letto nella TextBox al costruttore di tipo double della classe ClassOperazioni al primo costruttore per passarlo poi alla funzione Somma1().
    All'evento del bottone '=' l'oggetto che viene istanziato deve passare due parametri, uno dei quali letto nella TextBox, al secondo costruttore di tipo double della classe ClassOperazioni del quale poi nella funzione Somma2() ritorna solo un valore, cioè quello dell'inserimento nella TextBox.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Solo per sommare due numeri una classe mi sembra sprecata , bastava una variabile. Se invece lo fai per imparare ad utilizzare le classi ci può stare. Ma a quel punto potrei consigliarti questo codice che utilizza due metodi e una funzione Shared e non devi istanziare nessuna classe.

    codice:
    Public Class Form1
    
        Private Sub Button_add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Calcolo.FirstNumber(CInt(TextBox1.Text))
        End Sub
    
        Private Sub Button_equal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Calcolo.SecondNumber(CInt(TextBox1.Text))
            TextBox1.Text = Calcolo.Somma.ToString
        End Sub
    End Class
    
    Public Class Calcolo
    
        Shared myFirstNumber As Integer
        Shared mySecondNumber As Integer
    
        Public Shared Sub FirstNumber(ByVal num As Integer)
            myFirstNumber = num
        End Sub
    
        Public Shared Sub SecondNumber(ByVal num As Integer)
            mySecondNumber = num
        End Sub
    
        Public Shared Function Somma() As Integer
            Return myFirstNumber + mySecondNumber
        End Function
    
    End Class
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Grazie Pirelli72 Funziona!!!

  8. #8
    Originariamente inviato da Pirelli72
    [...]
    Una classe tutta shared? Mmm, se ne perde un po' il significato, non sarebbe meglio una classe normale e crearne un'istanza a livello di form?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Originariamente inviato da MItaly
    Una classe tutta shared? Mmm, se ne perde un po' il significato, non sarebbe meglio una classe normale e crearne un'istanza a livello di form?
    Perchè se ne perde il significato se serve solo a fare operazioni matematiche
    e quindi non si ha necessità di crearne istanze diverse ognuna con un suo proprio stato ?

    (apro parentesi)
    Nel caso in questione in effetti le variabili
    Shared myFirstNumber As Integer
    Shared mySecondNumber As Integer
    potrebbero giocare brutti scherzi...ma questa è un'altra questione
    (chiusa parentesi)

    Aggiungendo un costruttore privato che ne impedisca la creazione di istanze
    e marcandola come non ereditabile si comporta di fatto come un modulo del VB.NET.

    Mi risulta che in C# i moduli (che non esistono) siano simulati proprio così;
    ...anzi è il modulo VB.NET che viene di fatto trasformato dal compilatore
    in una classe "tutta shared" con un costruttore privato.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Comunque avevo detto:

    Se invece lo fai per imparare ad utilizzare le classi...
    Ciò voleva dire, visto che il progetto originale è un pò assurdo, allora se è per imparare......puoi scrivere anche questo.



    Sbagliare è umano, perseverare è diabolico.

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.