Esercizio - Chiamare i metodi di una classe .NET
- 12 minuti
Che te ne sia reso conto o no, hai chiamato metodi C# sin dalla tua prima applicazione "Hello, World!". L'applicazione usa il metodo WriteLine() della classe Console per visualizzare il messaggio "Hello, World!".
Tuttavia, non tutte le classi e i metodi vengono implementati nello stesso modo. Questa unità illustra alcune delle varianti più diffuse che è necessario conoscere quando si usano i metodi della libreria di classi .NET. In particolare, si apprenderà come trovare e usare la documentazione per comprendere meglio ogni metodo.
Come chiamare i metodi della libreria di classi .NET
Dall'esperienza precedente con il metodo Console.WriteLine(), le nozioni di base dovrebbero essere già note:
- Per iniziare, digitare il nome della classe. In questo caso, il nome della classe è
Console. - Aggiungere l'operatore di accesso ai membri, ovvero il simbolo
.. - Aggiungere il nome del metodo. In questo caso, il nome del metodo è
WriteLine. - Aggiungere l'operatore di chiamata al metodo, che è un set di parentesi
(). - Specificare infine gli argomenti passati al metodo, se presenti, tra le parentesi dell'operatore di chiamata al metodo. In questo caso, si specifica il testo che si vuole che il metodo
Console.WriteLine()scriva nella console, ad esempio"Hello World!".
Facoltativamente, a seconda di come gli sviluppatori hanno progettato e implementato il metodo specificato, potrebbe anche essere necessario:
- Passare valori aggiuntivi come parametri di input.
- Accettare un valore restituito.
Nell'unità successiva si esaminerà come passare i valori di input a un metodo e come usare un metodo per restituire un valore alla routine chiamante.
Nonostante alcuni metodi possano essere chiamati nello stesso modo in cui si è chiamato Console.WriteLine(), nella libreria di classi .NET esistono altri metodi che richiedono un approccio diverso.
Prepara l'ambiente di scrittura del codice
Questo modulo include attività di codifica che guidano l'utente attraverso il processo di compilazione ed esecuzione di un codice di esempio. È consigliabile completare queste attività usando Visual Studio Code come ambiente di sviluppo. L'uso di Visual Studio Code per queste attività consente di acquisire familiarità nella scrittura e nell'esecuzione del codice in un ambiente di sviluppo usato da professionisti di tutto il mondo.
Apri Visual Studio Code.
Per aprire Visual Studio Code, è possibile usare il menu Start di Windows (o una risorsa equivalente per un altro sistema operativo).
Scegliere Apri cartella dal menu File di Visual Studio Code.
Nella finestra di dialogo Apri cartella passare alla cartella Desktop di Windows.
Se hai una cartella diversa dove conservi i progetti di codice, puoi usare quella cartella. Per questa formazione, è importante che il luogo sia facile da individuare e ricordare.
Nella finestra di dialogo Apri cartella, selezionare Seleziona cartella.
Se viene visualizzata una finestra di dialogo di sicurezza che chiede se si considerano attendibili gli autori, selezionare Sì.
Nel menu Terminale di Visual Studio Code selezionare Nuovo terminale.
Si noti che un prompt dei comandi nel pannello Terminale visualizza il percorso della cartella corrente. Per esempio:
C:\Users\someuser\Desktop>Annotazioni
Se si usa il proprio PC anziché un ambiente sandbox o ospitato e sono stati completati altri moduli di Microsoft Learn in questa serie C#, potrebbe essere già stata creata una cartella di progetto per gli esempi di codice. In tal caso, è possibile ignorare il passaggio successivo, usato per creare un'app console nella cartella TestProject.
Al prompt dei comandi del terminale, per creare una nuova applicazione console in una cartella specificata, immettere il prompt seguente:
dotnet new console -o ./CsharpProjects/TestProjectQuesto comando dell'interfaccia della riga di comando .NET usa un modello di programma .NET per creare un nuovo progetto di applicazione console C# nel percorso della cartella specificato. Il comando crea le cartelle CsharpProjects e TestProject e usa TestProject come nome del file
.csproj.Se viene visualizzato un messaggio che indica che i file esistono già, continuare con i passaggi successivi. I file di progetto esistenti verranno riutilizzati.
Nella visualizzazione EXPLORER espandere la cartella CsharpProjects .
Verranno visualizzati la cartella TestProject e due file, un file di programma C# denominato Program.cs e un file di progetto C# denominato TestProject.csproj.
Scegliere Apri cartella dal menu File di Visual Studio Code.
Nella finestra di dialogo Apri cartella selezionare la cartella CsharpProjects e quindi selezionare Seleziona cartella.
Nella visualizzazione EXPLORER espandere la cartella TestProject e quindi selezionare Program.cs.
Eliminare le righe di codice esistenti.
Questo progetto console C# verrà usato per creare, compilare ed eseguire esempi di codice durante questo modulo.
Chiudere il pannello Terminale.
Chiamare tipi diversi di metodi nella libreria di classi .NET
Nell'editor di Visual Studio Code immettere il codice seguente per creare un esempio di codice che implementa i metodi delle classi
System.RandomeSystem.Console:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Questo codice simula un tiro di dado usando il metodo
Random.Next()per generare un numero e il metodoConsole.WriteLine()per visualizzare il valore.Annotazioni
Il codice verrà esaminato in dettaglio più avanti in questa unità.
Scegliere Salva dal menu File di Visual Studio Code.
Nella visualizzazione EXPLORER, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject e quindi scegliere Apri nel terminale integrato.
Si noti che il pannello Terminale include un prompt dei comandi che visualizza un percorso di cartella. Per esempio:
C:\Users\someuser\Desktop\CsharpProjects\TestProject>Quando si usa terminale per eseguire i comandi dell'interfaccia della riga di comando di .NET, i comandi vengono eseguiti dal percorso della cartella visualizzata. Assicurarsi che la cartella del codice corrisponda al percorso della cartella visualizzato nel prompt dei comandi prima di compilare o eseguire il codice.
Al prompt dei comandi del terminale, per eseguire il codice, digitare dotnet run e quindi premere INVIO.
Si noti che un numero compreso tra 1 e 6 viene visualizzato nell'output della console (il numero di punti sul dado). Se si esegue il codice abbastanza volte, verranno visualizzati ognuno dei numeri da 1 a 6.
Esaminare la sintassi usata per accedere ai metodi
Next()eWriteLine().Si noti che si usano tecniche diverse per accedere ai metodi.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Nella terza riga di codice si include un riferimento alla classe
Consolee si chiama direttamente il metodoConsole.WriteLine(). Tuttavia, si usa una tecnica diversa per chiamare il metodoRandom.Next(). Il motivo per cui vengono usate due tecniche diverse è che alcuni metodi sono con stato e altri sono senza stato. Alla prossima sezione si esaminerà la differenza tra metodi con stato e senza stato.
Confronto tra metodi con e senza stato
Nei progetti di sviluppo software, il termine stato viene usato per descrivere la condizione dell'ambiente di esecuzione in un momento specifico. Mentre il codice viene eseguito riga per riga, i valori vengono archiviati nelle variabili. In qualsiasi momento durante l'esecuzione, lo stato corrente dell'applicazione è la raccolta di tutti i valori archiviati in memoria.
Alcuni metodi non si basano sullo stato corrente dell'applicazione per funzionare correttamente. In altre parole, vengono implementati metodi senza stato in modo che possano funzionare senza fare riferimento ai valori già archiviati in memoria e senza modificarli. I metodi senza stato sono detti anche metodi statici.
Il metodo Console.WriteLine(), ad esempio, non si basa sui valori archiviati in memoria, ma esegue la funzione e termina senza influire in alcun modo sullo stato dell'applicazione.
Altri metodi, tuttavia, devono avere accesso allo stato dell'applicazione per funzionare correttamente. In altre parole, i metodi con stato sono creati per basarsi sui valori archiviati in memoria dalle precedenti righe di codice già eseguite. oppure modificano lo stato dell'applicazione aggiornando i valori o archiviando nuovi valori in memoria. Sono detti anche metodi di istanza.
I metodi con stato (di istanza) tengono traccia dello stato nei campi, che sono variabili definite nella classe. Ogni nuova istanza della classe ottiene la propria copia di tali campi in cui archiviare lo stato.
Una singola classe può supportare metodi sia con stato che senza stato. Quando tuttavia è necessario chiamare metodi con stato, si deve prima di tutto creare un'istanza della classe in modo che il metodo possa accedere allo stato.
Creazione di un'istanza di una classe
Un'istanza di una classe viene chiamata come oggetto . Per creare una nuova istanza di una classe, usare l'operatore new. Si consideri la riga di codice seguente che crea una nuova istanza della classe Random per creare un nuovo oggetto denominato dice:
Random dice = new Random();
L'operatore new esegue diverse operazioni importanti:
- Richiede prima di tutto un indirizzo nella memoria del computer abbastanza grande da archiviare un nuovo oggetto basato sulla classe
Random. - Crea il nuovo oggetto e lo archivia nell'indirizzo di memoria.
- Restituisce l'indirizzo di memoria in modo che possa essere salvato nell'oggetto
dice.
Da questo punto in poi, quando si fa riferimento all'oggetto dice nel codice, il runtime .NET esegue una ricerca in background per simulare l'interazione diretta con l'oggetto stesso.
Il codice usa l'oggetto dice come una variabile che memorizza lo stato della classe Random. Quando si chiama il metodo Next() sull'oggetto dice, il metodo usa lo stato memorizzato nell'oggetto dice per generare un numero casuale.
La versione più recente del runtime .NET consente di istanziare un oggetto senza dover ripetere il nome del tipo (invocazione del costruttore con tipo specificato di destinazione). Ad esempio, il codice seguente creerà una nuova istanza della classe Random:
Random dice = new();
L'intenzione è quella di semplificare la leggibilità del codice. Si usano sempre le parentesi quando si scrive un'espressione con tipo di destinazione new.
Perché il metodo Next() è con stato?
Ci si potrebbe chiedere perché il metodo Next() sia stato implementato come metodo con stato. I progettisti della libreria di classi .NET non sono riusciti a trovare un modo per generare un numero casuale senza richiedere lo stato? Ed esattamente a che cosa fa riferimento o che cosa archivia il metodo Next()?
Sono domande sensate. In generale, i computer sono in grado di seguire istruzioni specifiche per creare un esito affidabile e ripetibile. Per simulare la casualità, gli sviluppatori del metodo Next() hanno deciso di acquisire la data e l'ora fino ai millisecondi e di usarla per inizializzare un algoritmo che genera un numero diverso ogni volta. Nonostante non sia completamente casuale, è sufficiente per la maggior parte delle applicazioni. Lo stato acquisito e mantenuto per tutta la durata dell'oggetto dice è il valore iniziale. Ogni chiamata successiva al metodo Next() esegue nuovamente l'algoritmo, ma assicura che il valore di inizializzazione venga modificato in modo che non sia (necessariamente) restituito lo stesso valore.
Per usare il metodo Random.Next(), tuttavia, non è necessario comprendere il funzionamento. L'aspetto importante da tenere presente è che alcuni metodi richiedono che venga creata un'istanza di una classe prima di chiamarli, mentre altri no.
Come è possibile determinare se è necessario creare un'istanza di una classe prima di chiamarne i metodi?
Un approccio per determinare se un metodo è con stato o senza stato consiste nel consultare la documentazione. La documentazione include esempi che indicano se il metodo deve essere chiamato dall'istanza dell'oggetto o direttamente dalla classe.
Annotazioni
Potrebbe essere necessario scorrere la pagina della documentazione verso il basso per trovare gli esempi di codice.
In alternativa alla ricerca nella documentazione del prodotto, è possibile tentare di accedere al metodo direttamente dalla classe stessa. Se funziona, si sa che si tratta di un metodo senza stato. Il peggio che può verificarsi è che si verificherà un errore di compilazione.
Provare ad accedere direttamente al metodo Random.Next() e vedere cosa accade.
Immettere la riga di codice seguente nell'editor di Visual Studio Code:
int result = Random.Next();Si sa già che
Next()è un metodo con stato, tuttavia in questo esempio viene illustrato il modo in cui l'editor di Visual Studio Code reagisce quando si tenta di accedere a un metodo in modo non corretto.Si noti che viene visualizzata una linea ondulata rossa in
Random.Next, che indica che si è verificato un errore di compilazione.Se il metodo che si è interessati a usare è senza stato, non verrà visualizzata alcuna linea ondulata rossa.
Posizionare il puntatore del mouse sulla linea ondulata rossa.
Verrà visualizzata una finestra popup con il messaggio seguente:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'Come illustrato nel codice all'inizio dell'unità, è possibile correggere questo errore creando un'istanza della classe
Randomprima di accedere al metodoNext(). Per esempio:Random dice = new Random(); int roll = dice.Next();In questo caso, il metodo
Next()viene chiamato senza parametri di input.
Riepilogo
- Per chiamare i metodi di una classe nella libreria di classi .NET, usare il formato
ClassName.MethodName(), dove il simbolo.è l'operatore di accesso ai membri per accedere a un metodo definito nella classe e i simboli()sono gli operatori di chiamata al metodo. - Quando si chiama un metodo senza stato, non è necessario creare prima una nuova istanza della classe.
- Quando si chiama un metodo con stato, è necessario creare un'istanza della classe e accedere al metodo per l'oggetto.
- Per creare una nuova istanza di una classe, usare l'operatore
new. - Un'istanza di una classe viene chiamata come oggetto .