Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Iniziare con C#
Che cos’è C#
Rilasciato nel giugno 2000, C# (si pronuncia “Ci sharp”) è un nuovo linguaggio di
Microsoft sottoposto a ECMA per la standardizzazione. Creato da un’équipe guidata
dall’ingegnere Anders Hejlsberg, che ha ideato altri prodotti, quali Borland Turbo
C++ e Borland Delphi, C# integra e migliora gli aspetti più funzionali di linguaggi
già esistenti.
C# è potente e flessibile e, come tutti i linguaggi di programmazione, può essere
utilizzato per creare molteplici applicazioni; non pone limiti a ciò che potete fare ed
è già stato utilizzato per progetti molto diversi tra loro, come siti Web, strumenti di
sviluppo e persino compilatori.
Vari linguaggi di programmazione possiedono caratteristiche orientate agli oggetti,
ma sono davvero pochi quelli che si possono definire completamente OOP (Object-
Oriented Programming) come C#. Il linguaggio orientato agli oggetti verrà trattato
nel Giorno 2.
Più avanti, nella lezione di oggi, si confronterà C# con altri linguaggi di programma-
zione e si vedrà quali applicazioni possono essere create.
Perché C#?
Si supponeva che Java, C++, Perl, Microsoft Visual Basic e altri linguaggi esistenti
offrissero tutte le funzionalità necessarie e, quindi, non ci fosse ragione di creare un
nuovo linguaggio di programmazione.
C# si basa su C e C++, ma ha regole proprie. Microsoft ha utilizzato le proprietà più
efficaci di C e C++ includendovi nuove caratteristiche che rendono il linguaggio fa-
cile da usare (molte di queste sono simili alle funzionalità di Java).
Le caratteristiche principali di C# sono le seguenti:
● C# è semplice;
● C# è di ultima generazione;
● C# è orientato agli oggetti.
4 Giorno 1
C# è semplice
C# ha permesso di eliminare alcuni aspetti complessi tipici di linguaggi quali Java e
C++, come macro, modelli, eredità multiple e classi di base virtuali, che creano vari
problemi agli sviluppatori C++.
C# è semplice perché è basato su C e C++; quindi, se avete familiarità con tali lin-
guaggi o con Java, riuscirete a comprendere meglio C#. Istruzioni, espressioni, ope-
ratori e altre funzioni derivano direttamente da C e da C++, ma le migliorie apporta-
te a C# (come l’eliminazione di ridondanze e le modifiche riguardanti la sintassi)
semplificano notevolmente il linguaggio. Per esempio, C++ possiede tre operatori
che consentono di lavorare con i membri (::, . e ->) e risulta complesso capire
quando usarli. In C#, essi vengono sostituiti da un solo simbolo: l’operatore “dot”.
Se avete usato Java e siete convinti che sia semplice, troverete che C# lo è an-
cora di più.
C# è di ultima generazione
Caratteristiche quali la gestione delle eccezioni, la garbage collection, i tipi di dati
estensibili e la protezione del codice sono proprie di un linguaggio di ultima gene-
razione e C# le possiede tutte.
I puntatori sono parte integrante di C e C++, ma rappresentano anche l’ele-
mento del linguaggio che genera maggiore confusione. C# elimina molti
dei problemi determinati dai puntatori. In C#, le garbage collection e la
protezione dei tipi sono parte integrante del linguaggio. Se non avete fami-
liarità con i concetti di puntatori, garbage collection e sicurezza dei tipi,
non preoccupatevi: saranno spiegati nelle prossime lezioni.
C# è potente e flessibile
Come si è già accennato, C# non pone limiti alla realizzazione di qualsiasi tipo di
progetto, tra cui elaboratori di testi, grafica, fogli di calcolo e persino compilatori
per altri linguaggi.
C# è modulare
TERMINE
Il codice C# può (e dovrebbe) essere scritto in parti denominate classi, che conten-
gono routine chiamate metodi membri. Classi e metodi possono essere riutilizzati in
altre applicazioni e programmi. Passando parti di informazioni alle classi e ai meto-
di, potete creare un codice utile e riutilizzabile.
può concludere che Visual Basic non è più facile di C#: impiegando C#, infatti, po-
tete scrivere molti programmi con meno codice.
C# ha eliminato alcune caratteristiche di C++ che causano molti problemi ai pro-
grammatori, mantenendo potenza e funzionalità. Alcuni degli errori di programma-
zione in cui è più facile incorrere in C++ possono essere tranquillamente evitati, ri-
sparmiando ore o addirittura giorni di lavoro.
Un altro linguaggio molto diffuso è Java che, come C++ e C#, si basa su C. Avrete
modo di scoprire che quanto avrete imparato su C# può essere applicato quasi sem-
pre anche a Java.
Probabilmente, conoscete il linguaggio di programmazione C. Molti utenti si chiede-
ranno se debbano imparare C prima di C#, C++ o Java. In realtà, non è assolutamente
necessario.
Nei prossimi paragrafi esplorerete i passaggi di creazione di un programma.
Uso di un editor
TERMINE
Un editor è un programma che può essere usato per inserire o salvare un codice
sorgente; ne esistono vari da utilizzare con C#: ideati specificatamente o meno.
Al momento della stesura del libro esistevano solo alcuni editor creati per C#; tutta-
via, a breve, molti altri saranno presenti sul mercato. Microsoft ha potenziato le ca-
pacità del suo prodotto Visual Studio, che include Visual C#, l’editor attualmente
più importante in circolazione. Se non possedete Visual Studio .NET, potete comun-
que lavorare con C#.
Vi sono inoltre altri editor disponibili per C# che, Come Visual Studio .NET, vi con-
sentono di eseguire tutti i passaggi del ciclo di sviluppo senza abbandonare l’editor
stesso. La maggior parte di questi colorano il testo che inserite; questo rende più fa-
cile individuare eventuali errori. Molti editor vi offrono anche varie informazioni su
ciò che dovete inserire e forniscono aiuto consistente.
Se non possedete un editor C#, non preoccupatevi: gran parte dei sistemi di elabo-
razione comprendono un programma che può essere usato come editor. Se state
usando Microsoft Windows, potete scegliere Blocco note o WordPad come vostro
editor. Se avete optato per un sistema Linux o UNIX, potete impiegare editor quali
ed, ex, edit, emacs o vi.
Quasi tutti gli elaboratori di testo usano speciali codici per formattare i loro docu-
menti; altri programmi, invece, non possono leggerli correttamente. Vari word pro-
cessor, quali WordPerfect, Microsoft Word e WordPad, sono capaci di salvare file
sorgenti in un formato basato sul testo. Per salvare un file di elaboratore di testi
come file di testo, selezionate l’opzione testo.
Iniziare con C# 9
Per trovare editor alternativi, potete cercare nei negozi di computer, nei ca-
taloghi di vendita per corrispondenza o negli annunci delle riviste di pro-
grammazione di computer. Di seguito vengono riportati alcuni editor di-
sponibili al momento della stesura di questo libro.
● CodeWrite. È un editor che fornisce speciale supporto per ASP, XML,
HTML, C#, Perl, Python e altri. Si trova consultando il sito www.pre-
mia.com.
● EditPlus. È un editor di testo adatto a Internet, un editor HTML e un
editor per programmatori di Windows. Oltre a rappresentare un buon
sostituto di Blocco note, offre molte caratteristiche potenti per autori e
programmatori di pagine Web, inclusa la codifica colore per il codice.
Si trova all’indirizzo www.editplus.com.
● JEdit. È un editor open source per Java; tuttavia può essere impiegato
anche per C#. Comprende la capacità di codifica colore di codice. Si
trova all’indirizzo http://jedit.sourceforge.net.
● Poorman IDE di Duncan Chen. Fornisce un editor che evidenzia la
sintassi sia per C# sia per Visual Basic .NET. Consente anche di eseguire
il compilatore e catturare l’output del terminale, in modo da non dover
abbandonare IDE Poorman. Si trova all’indirizo www.geocities.
com/duncanchen/poormanide.htm.
● SharpDevelop di Mike Krüger. È un editor gratuito per progetti C#
su piattaforme .NET di Microsoft ed è open source (GPL): potete scarica-
re sia il codice sorgente sia gli eseguibili da www.icsharpcode.net.
Eseguire un programma C#
Prima di addentrarci nel ciclo di sviluppo del programma, è importante capire come
viene eseguito un programma C# che è strutturato in modo diverso da quelli che
create con altri linguaggi di programmazione.
TERMINE
I programmi C# sono creati per essere eseguiti in CLR (Common Language Run-
time). Ciò significa che se create un programma eseguibile C# e provate a ese-
guirlo su un computer che non possiede CLR o un runtime compatibile, non
verrà eseguito. Eseguibile significa che il programma può essere eseguito dal vo-
stro computer.
Il vantaggio nel creare programmi per un ambiente runtime consiste nella portabili-
tà. In linguaggi più datati, quali C e C++, se volevate creare un programma da ese-
guire su diverse piattaforme o sistemi operativi dovevate compilare differenti pro-
grammi eseguibili. Per esempio, se avevate scritto un’applicazione C e desideravate
10 Giorno 1
TERMINE
Se desiderate che il vostro programma venga eseguito il più velocemente possi-
bile, dovete creare un vero eseguibile. Un computer necessita di istruzioni digita-
li o binarie in ciò che viene chiamato linguaggio computer. Un programma no-
minato compilatore esegue questa traduzione: prende il vostro file di codice sor-
gente come input e produce un file su disco contenente le istruzioni che corri-
spondono alle istruzioni del vostro codice sorgente. Con programmi quali C e
C++ il compilatore crea un file che può essere eseguito senza ulteriori operazioni
da compiere.
Con C# potete usare un compilatore che non produce linguaggio macchina,
bensì un file IL (Intermediate Language). Poiché esso non è direttamente ese-
guibile dal computer, occorre effettuare un passaggio in più per tradurre o per
compilare il programma per il computer. CLR o una fase di esecuzione C# com-
patibile compie la necessaria compilazione finale.
Una delle prime operazioni che fa CLR con un file IL è una compilazione finale del
programma. In questo processo, CLR trasforma il codice IL portabile in un linguag-
gio (linguaggio macchina) che il computer possa comprendere ed eseguire. CLR in
realtà compila solo le parti del programma che vengono utilizzate, consentendo di
risparmiare tempo. Inoltre, dopo che a una porzione del vostro file IL è stata data
una vera compilazione, non è più necessario ricompilarla, poiché questa porzione
del programma viene salvata e riutilizzata tutte le volte che viene eseguita.
Poiché il runtime deve compilare il file IL, la prima volta ci vuole un po’
più di tempo per eseguire un programma in C# rispetto a quello impiega-
to per eseguire un linguaggio pienamente compilato come C++. Ma le vol-
te successive che un programma in C# viene eseguito la differenza di
tempo non sussiste più, perché verrà usata la sua versione pienamente
compilata.
TERMINE
Dopo la compilazione, ottenete un file IL. Se osservate un elenco dei file nella di-
rectory o nella cartella in cui avete compilato, dovreste trovare un nuovo file che ha
lo stesso nome del vostro file sorgente ma con un’estensione .exe (invece che .cs).
Il file con l’estensione .exe è il vostro programma “compilato” (chiamato assembly).
Questo programma è pronto per essere eseguito sul CLR. Il file assembly contiene
tutte le informazioni che la fase di esecuzione ordinaria deve conoscere per esegui-
re il programma.
La Figura 1.1 mostra che cosa accade nel passaggio dal codice sorgente al codice
eseguibile.
OXOXOXO
XOXOXOX
QUESTO
OXOXOX
È Compila
CODICE OXOXOX
XOXOXO
O X X OO X
File assembly
contenente IL
Figura 1.1
Il codice sorgente C# che scrivete è convertito in un codice IL (Intermediate Language) dal compilatore.
In generale vengono creati due tipi di programmi C#: gli eseguibili e le libre-
rie. Durante le prime due settimane lezione sarete concentrati sugli esegui-
bili, che sono file EXE. Potete inoltre usare C# per altri tipi di programma-
zione, compreso lo scripting su pagine ASP.NET. Approfondirete la cono-
scenza delle librerie nelle lezioni della terza settimana.
Il ciclo di sviluppo C#
Passaggio 1. Usate un editor per scrivere il vostro codice sorgente. Ai file co-
dice sorgente C# viene abitualmente attribuita l’estensione .cs (per esempio,
a_program.cs, database.cs e così via).
Passaggio 2. Compilate il programma usando un compilatore C#. Se il
compilatore non individua alcun errore nel programma, produce un file
assembly con l’estensione .exe o .dll. Per esempio, myprog.cs è compilato a
myprog.exe di default. Se il compilatore individua errori, li riporta. Dove-
te ritornare al passaggio 1 per effettuare le correzioni nel vostro codice
sorgente.
Passaggio 3. Eseguite il programma sul computer con un runtime C# quale
il Common Language Runtime. Dovreste verificare se il vostro programma
funziona correttamente. In caso contrario, iniziate di nuovo dal passaggio
1 ed effettuate le modifiche e le aggiunte al vostro codice sorgente.
La Figura 1.2 mostra i passaggi del processo di sviluppo del programma. Per tutti i
programmi, tranne quelli più semplici, potreste dover eseguire questa sequenza
molte volte. Persino i programmatori più esperti non riescono a scrivere un pro-
gramma completo senza errori, la prima volta! Quindi, poiché eseguirete il ciclo
edita-compila-effettua test molte volte, è importante avere dimestichezza con l’edi-
tor, il compilatore e l’ambiente di runtime.
Inizio
Inserimento
codice sorgente Passaggio 1
Compilazione
Passaggio 2
Errori?
Sì
No
Esecuzione
programma
Passaggio 3
Funziona No
correttamente?
Sì
Fatto
Figura 1.2
I passaggi da seguire per sviluppare un programma C#.
Area = 2πr
Potete inserire questa formula nel vostro programma, compilare ed eseguire: otter-
rete un risultato. Il programma C# potrebbe venire scritto con una sintassi corretta;
tuttavia, ogni volta che eseguite questo programma, riceverete una risposta errata. È
la logica del programma ad essere sbagliata: con questa formula otterrete la circon-
ferenza di un cerchio e non la sua area. Avreste dovuto usare la formula πr2.
Per quanto valido sia un compilatore, non sarà mai in grado di individuare gli errori
di logica. Dovete trovarli personalmente, revisionando il codice e facendo eseguire
i vostri programmi.
Tipi di programmi C#
Prima di terminare la lezione odierna, analizzate quali tipi di applicazioni potete
creare con C#.
● Applicazioni di console. Eseguono dalla riga di comando e sono princi-
palmente basate sul carattere tipografico o sul testo; di conseguenza, riman-
gono relativamente semplici da comprendere.
● Applicazioni Windows. Si avvantaggiano dell’interfaccia utente grafica
(GUI) fornita da Windows di Microsoft.
Iniziare con C# 17
Domande e risposte
D. Un programma C# verrà eseguito su qualsiasi computer?
R. No. Un programma C# sarà eseguito unicamente sui computer che hanno
installato CLR (Common Language Runtime). In caso contrario, si genererà
un errore. Nelle versioni di Windows sprovviste di CLR viene, solitamente,
indicato che un file DLL è mancante.
D. Se si fornisce un programma personalizzato, quali file bisogna inserire?
R. Uno degli aspetti positivi di C# è che è un linguaggio compilato. Ciò signifi-
ca che, dopo la compilazione del codice sorgente, disponete di un pro-
gramma eseguibile. Se desiderate passare ad altri il programma hello, pote-
te farlo: fornitegli hello.exe. Infatti, non è necessario il file sorgente hello.cs
e non c’è bisogno di possedere un proprio compilatore C#; basta usare un
sistema di elaborazione che abbia una fase di esecuzione C# quale Com-
mon Language Runtime di Microsoft.
D. Dopo aver creato un file eseguibile, bisogna mantenere il file sor-
gente (.cs)?
R. Se eliminate il file sorgente, successivamente, non potete effettuare modifi-
che al programma in modo semplice, quindi dovreste conservarlo. Gran
parte degli ambienti di sviluppo integrato creano dei file in aggiunta al codi-
ce sorgente (.cs) e al file eseguibile. Finché manterrete il file sorgente (.cs),
potrete quasi sempre ricreare altri file. Quando il vostro programma impie-
ga risorse esterne quali immagini e form, non dovete mai eliminare questi
file, se pensate di dover effettuare modifiche e ricreare l’eseguibile.
D. Se il compilatore fosse fornito di un editor, si sarebbe obbligati a
usarlo?
R. Assolutamente no. Potete usare qualsiasi editor a patto che salvi il codice sor-
gente in formato testo. Se il compilatore fosse fornito di un editor, dovreste
provare a usarlo; se preferite, scegliete un editor venduto separatamente. Co-
munque, gli editor forniti con i compilatori stanno migliorando: alcuni forma-
tizzano automaticamente il vostro codice C# e altri colorano parti diverse del
vostro file sorgente per rendere più facile l’individuazione di errori.
D. È possibile ignorare i messaggi di attenzione?
R. Alcuni messaggi di attenzione non influiscono su come viene eseguito il
programma, altri invece sì. Se il compilatore visualizza un messaggio di at-
tenzione, non tutto è corretto. Quasi tutti i compilatori vi permettono di im-
postare il livello di attenzione per ottenere solo messaggi di attenzione mol-
to gravi o riceverli tutti, compreso il più insignificante. Alcuni compilatori
offrono anche diversi livelli intermedi. Nei vostri programmi dovreste con-
18 Giorno 1
Verifica
Questo paragrafo fornisce quiz ed esercizi per consolidare la comprensione dei
temi trattati nel corso della lezione. Le risposte sono riportate nell’Appendice A.
Quiz
1. Spiegate per quali ragioni C# risulta un’ottima scelta come linguaggio da
utilizzare per la programmazione. Fornite almeno tre motivazioni.
2. Che cosa significano IL e CLR?
3. Quali sono i passaggi nel ciclo di sviluppo del programma?
4. Quale comando dovete inserire per compilare un programma denominato
my_prog.cs con il vostro compilatore?
5. Quale estensione dovreste usare per i file sorgente C#?
6. Il nome di file .txt è un nome valido per un file sorgente C#?
7. Se eseguite un programma che avete compilato e non funziona secondo le
vostre aspettative, come dovete intervenire?
8. Qual è la funzione del linguaggio macchina?
9. In quale riga è avvenuto l’errore seguente?
my_prog.cs(35,6): error CS1010: Newline in constant
Esercizi
1. Usate il vostro editor di testo per analizzare il file EXE che avete creato nel
Listato 1.1. Il file EXE assomiglia al file sorgente? (Non salvate questo file
quando uscite dall’editor.)
2. Inserite il seguente programma e compilatelo (non includete i numeri di
riga o i due punti). Qual è la funzione di questo programma?
1: // circle.cs – Usando variabili e valori letterali
2: // Questo programma calcola elementi attinenti al cerchio.
3: //-----------------------------------------------
4:
5: using System;
6:
7: class variables
8: {
Iniziare con C# 19