Corso C# – Lezione n.1

Indice dei contenuti:

Introduzione

Inizia con questo primo articolo una nuova iniziativa del blog il “Corso C#”. C# è un linguaggio di programmazione progettato da Microsoft per la creazione di applicazioni in ambiente Windoes alla fine degli anni ’90 che poi è stato estesa ad altre piattaforme anche open source come Linux attraverso delle versioni aggiornate.
Il linguaggio C# è basato sulla tecnologia .Net si pronuncia “dotnet” un insieme di API (Application Programming Interface) e Librerie penate per scrivere applicazioni potenti e multi piattaforma. Il Framework ha come obiettivo quello di creare un set di istruzioni e tipi dati che sia indipendente dal linguaggio di programmazione scelto dall’utente, che però viene tradotto in questo linguaggio che viene posi eseguito da un esecutore universale dello CLR (Common Language Runtime) che si interfaccia direttamente con il sistema operativo in uso. Questo linguaggio intermedio IL consente al programmatore di scrivere codice in un linguaggio ad alto livello di sua preferenza C#, Visual Basic, C++, Javascript che viene poi interpretato da due moduli software fondamentali che sono il CLS Common Language Specification e prima ancora dal CTS Common Type Specification. IL CTS si occupa di definire i tipi di dati utilizzabili in tutti i linguaggi di programmazione distinguendoli in tre tipologie differenti ovvero: tipi valore, tipi riferimento e tipi puntatore. Tale modulo software analizza il codice sorgente e converte i tipi di dati presenti nel codice in un formato comune che sia accettabile al linguaggio intermedio di .NET.
Il Common Language Specification tiene conto delle differenze lessicali, sintattiche e semantiche dei vari linguaggi ad alto livello trasformando il codice sorgente in un formato universale supportato da .NET. La filosofia di sviluppo dell’architettura .NET. Tutto questo è poi integrato con le altre componenti software specifiche che il programmatore può sviluppare quali: componenti User Forms per l’interfaccia grafica, Web socket per l’uso di funzionalità di rete, insieme con i moduli software per la gestione di dati in formato XML o altro formato quali anche quello richiesto dai Database, e altri standard che saranno esaminati a metà di questo corso quali lo standard LINQ.
Al livello sottostante troviamo il Base Classe Module che contiene tutte le funzionalità dei livelli sovrastanti, in questo livello sono presenti tutte le funzionalità in linguaggio intermedio traduzione del programma scritto in codice sorgente con le relative funzionalità incorporate tutte in linguaggio intermedio. L’ultimo livello è il CLR Common Language Runtime che si occupa di eseguire il programma su piattaforma .NET in linguaggio intermedio e di raccordare l’esecuzione con le specificità del sistema operativo utilizzato.
Da diverso tempo inoltre la Microsoft ha reso disponibile due infrastrutture software la “.Net Framework” e la “.Net Core”. La prima per sistemi Windows, la seconda multi piattaforma con funzionalità più ristrette.
L’applicazione della prima lezione è un’applicazione Console in standard .Net Core. All’avvio della progettazione della soluzione Visual Studio (VS d’ora in poi) chede all’utente il tipo di linguaggio sorgente (scegliere C#), il tipo di Framework (scegliere .Net Core) e la tipologia di applicazione (scegliere Console).
Viene creata una classe ove è possibile digitare il codice. La prima classe contiene solo il main ovvero il metodo principale che viene eseguito per primo. Come primo esempio il nostro codice molto semplice è:

using System;

namespace CiaoMondo
{
    class Program
    {
        static void Main(string[] args)
        {
            int a, b, s;
            s = 0;
            Console.WriteLine("Inserisci due numeri a e b interi");
            a = Convert.ToInt32(Console.ReadLine());
            b = Convert.ToInt32(Console.ReadLine());
            s = a + b;
            Console.WriteLine("La somma è: "+s);
        }
    }
}

Subito sotto la dichiarazione di classe sono presenti due clausole la “Using” e la “namespace”. La Using dice alla classe che nell’uso delle funzionalità della libreria System è possibile omettere la parola chiave “System.”. Ad esempio nelle righe ove è richiamata la “Console” non anteponiamo il prefisso “Using”. La clausola “namespace” serve per creare uno spazio dei nomi laddove la classe debba essere richiamata in altra classe o altro modulo software. Il significato della clausola “namespace” sarà completamente chiarito nelle lezioni successive.
Libro consigliato per lo studio approfondito di C#

Sintassi linguaggio C#

Il linguaggio C# ha una sintassi molto simile al C++ infatti ogni codice di classe è racchiuso fra parentesi graffe, ogni istruzione in C# termina con un punto virgola. I commenti sono inseriti con il doppio “//” per singola riga e con apertura “/*” e chiusura “*/” per commenti multilinea.
Le variabili sono dichiarate con la sintassi:
tipo dato nome variabile {=valore]; (l’inizializzazione è consigliata ma non obbligatoria perciò è racchiusa fra parentesi quadrate).
In questo caso sono dichiarate tre variabili intere, e attraverso il metodo Writeline(stringa) è stampato il messaggio di output o i valori delle variabili. L’istruzione stampa la riga e inserisce autonomamente un’interruzione di riga. Il metodo ReadLine() legge l’input da tastiera. L’input è inserito in formato stringa e quindi attraverso l’oggetto Convert e il metodo toInt32 è eseguito il “casting esplicito” in formato intero a 32 bit. Nella lezione successiva saranno analizzati i tipi dati ammessi nel C# e la compatibilità di essi fra il framework “.Net Framework” e “.Net Core”.
L’istruzione di assegnazione è svolta con l’operatore “=”.
Le istruzioni aritmetiche elementari sono:
somma +
esempio s=a+b alla variabile s è assegnata la somma di a e b;
sottrazione –
esempio d=a-b; alla variabile d è assegnata la differenza fra a e b
moltiplicazione *
esempio p=a*b; alla variabile p è assegnato il prodotto a per b
divisione /
esempio r=a/b; alla variabile r è assegnato il rapporto di a fratto b, ricorda che se b è uguale a zero occorre gestire con un’eccezione.
resto della divisione intera fra due numeri %
esempio resto= a% b; resto è il resto della divisione intera fra e b.
E’ interessante anche analizzare la riga:
a = Convert.ToInt32(Console.ReadLine());
b = Convert.ToInt32(Console.ReadLine());
s = a + b; Console.WriteLine(“La somma è: “+s);

Nella prima il valore letto da tastiera è convertito in intero e assegnato alla variabile intera a (se l’utente inserisce un dato non valido viene sollevata un’eccezione che deve essere gestita se ne parlerà quando parlerò della convalida dell’Input).
La seconda riga nello stesso modo legge e assegna un numero intero alla variabile b, la terza riga esegue la somma e l’assegna alla variabile s.
La quarta riga stampa la stringa “La soma è” e la unisce alla variabile intera s che viene “castata” in automatico a stringa e unita con il segno “+” che è un operatore binario di concatenazione stringa ad esempio
String frase = “ciao”+” ” + “mondo”;
Console.WriteLine(frase);
Aggiungete queste due righe in fondo al codice e dopo aver letto due numeri e fatto la somma, il programma stamperà “ciao mondo”.
Per maggiori approfondimenti alcuni libri sul C#


Video della lezione numero 1