Campi private di una Classe in C# ?!?!

di il
2 risposte

Campi private di una Classe in C# ?!?!

Ciao a tutti,premetto che ho appena cominciato da neanche un mese ad interessarmi di programmazione e C#.
Nel mio studio ho incontrato un 'mistero' trattando i campi Private in una classe C#.

Con questo programma faccio il lancio di 2 dadi utilizzando le variabili private di una classe e,se lo rieseguo a distanza ravvicinata (dopo un paio di secondi) mi da' come risultato i VALORI UGUALI.
Se invece aspetto tot tempo (5 minuti circa) mi da' i VALORI DIVERSI.

Mi spegate perche' ?!?!

Credo abbia qualcosa a che fare con i contenuti della locazione di memoria della variabile privata 'valore' o della publica 'val' che dopo tot tempo vengono cancellati ...ma non riesco a capire ( qualcosa sulla stack o la heap?!?!)

Non lasciatemi nel MISTERO!!!!

Ciao Surfer

--------------
// created on 7/18/03 at 3:21 PM

using System;

class dado
{
int valore;


public int val
{
get
{
// crea l'oggetto rnd per calcolare il valore casuale
Random rnd = new Random();

// calcola il valore casuale
valore = (int) rnd.Next(1,7);

// ritorna il valore
return valore;
}
set
{
;
}
}
}

class Lancio
{
public static void Main()
{
int val1,val2;

// crea due oggetti di tipo dado
dado dado1 = new dado();
dado dado2 = new dado();

// stampa
val1 = dado1.val;
Console.WriteLine("Dado 1: {0}",val1);
val2 = dado2.val;
Console.WriteLine("Dado 2: {0}",val2);

}

2 Risposte

  • Re: Campi private di una Classe in C# ?!?!

    Scusate ho scritto una bestialita'!!!
    Private invece di Proprieta'.

    Cio a cui mi stavo riferendo erano naturalmente le Proprieta'.



    Ciao
  • Re: Campi private di una Classe in C# ?!?!

    Carissimo, il tuo problema è legato strettamente ad una questione di ordine logico nonchè ad una piccola limitazione (se così la si può chiamare) hardware; Mi spiego: quando cerchi di generare un numero casuale, accade che il tuo caro oggettino richiama una particolare funzione chiamata generatore dei numeri casuali; si tratta in pratica di un timer che viene avviato e che ha lo scopo di incrementare una variabile contatore che sarà utilizzata per restituirti il valore casuale cercato; in particolare il processore, (che richiama la suddetta funzione in sotto forma di interrupt), fà ripartire il contatore ogni volta che viene richiesto l'accesso al generatore;
    detto questo il tuo problema consiste nel fatto che ogni volta che richiami la function che calcola il numero casuale, tu istanzi ogni volta un nuovo oggetto random, il che porta alla ripartenza del contatore legato al generatore dei numeri casuali; ciò significa che i tempi di generazione sono sempre gli stessi ; la tua soluzione è quindi quella di dichiarare e istanziare l'oggetto all'interno della classe e non nella tua function; ciò dovrebbe far ripartire il generatore una sola volta e contribuire quindi a risolvere il tuo problema.

    Se hai ancora dei problemi, fammelo sapere

    (per avere più chiare le idee su questo particolare processo, analizza il seguente codice VB e la funzione randomize )

    Dim MyValue As Integer
    Randomize ' Initialize random-number generator.
    MyValue = CInt(Int((6 * Rnd()) + 1)) ' Generate random value between 1 and 6.



    Ciao, spero di esserti stato di aiuto e che soprattutto sia "UN" aiuto
Devi accedere o registrarti per scrivere nel forum
2 risposte