C sharp: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
LRKalle (discussione | contributi)
Atarubot (discussione | contributi)
template citazione; fix formato data; fix parametro lingua; elimino parametri vuoti; formattazione isbn
Riga 37: Riga 37:
È opinione comune che l'ispirazione venne dal linguaggio [[Java (linguaggio di programmazione)|Java]], dato che perfino il suo ideatore [[James Gosling]], nonché [[Bill Joy]] di Sun Microsystem, lo definirono una sua imitazione, ma più limitata dal punto di vista della affidabilità, sicurezza e produttività.<ref>{{Cita web|url=https://www.cnet.com/news/why-microsofts-c-isnt/|titolo=Why Microsoft C# isn't}}</ref>. Invece secondo Anders Hejsberg la struttura di C# è più vicina a quella del [[C++|linguaggio C++]] piuttosto che a [[Java (linguaggio di programmazione)|Java]].
È opinione comune che l'ispirazione venne dal linguaggio [[Java (linguaggio di programmazione)|Java]], dato che perfino il suo ideatore [[James Gosling]], nonché [[Bill Joy]] di Sun Microsystem, lo definirono una sua imitazione, ma più limitata dal punto di vista della affidabilità, sicurezza e produttività.<ref>{{Cita web|url=https://www.cnet.com/news/why-microsofts-c-isnt/|titolo=Why Microsoft C# isn't}}</ref>. Invece secondo Anders Hejsberg la struttura di C# è più vicina a quella del [[C++|linguaggio C++]] piuttosto che a [[Java (linguaggio di programmazione)|Java]].


C# è strettamente legato allo sviluppo di [[.NET Framework]]. Infatti gli ingegneri di Microsoft utilizzarono nelle prime fasi della sua stesura un framework chiamato SMC, ovvero Simple Managed C, un sistema utilizzante il [[C (linguaggio)|linguaggio C]] in modo gestito o "managed". Nel gennaio 1999, [[Microsoft]] mise Anders Hejsberg a capo di un gruppo di lavoro con il compito di produrre un nuovo linguaggio, chiamato provvisoriamente "Cool", acronimo di "C-like Object Oriented Language" (linguaggio orientato agli oggetti simile a C)<ref>{{Cita news|autore=Naomi Hamilton|url=http://www.computerworld.com.au/article/261958/-z_programming_languages_c|titolo=The A-Z of Programming Languages: C#|pubblicazione=Computerworld|data=01/10/2008|accesso=2017-02-04}}</ref>. Il nome commerciale definitivo divenne C# alla presentazione ufficiale del progetto .NET da parte di Microsoft alla Professional Developers Conference tenutasi nel luglio 2000 a [[Orlando (Florida)|Orlando]], quando anche le librerie di classi e il runtime di [[ASP.NET]] vennero convertite in linguaggio C#.
C# è strettamente legato allo sviluppo di [[.NET Framework]]. Infatti gli ingegneri di Microsoft utilizzarono nelle prime fasi della sua stesura un framework chiamato SMC, ovvero Simple Managed C, un sistema utilizzante il [[C (linguaggio)|linguaggio C]] in modo gestito o "managed". Nel gennaio 1999, [[Microsoft]] mise Anders Hejsberg a capo di un gruppo di lavoro con il compito di produrre un nuovo linguaggio, chiamato provvisoriamente "Cool", acronimo di "C-like Object Oriented Language" (linguaggio orientato agli oggetti simile a C)<ref>{{Cita news|autore=Naomi Hamilton|url=http://www.computerworld.com.au/article/261958/-z_programming_languages_c|titolo=The A-Z of Programming Languages: C#|pubblicazione=Computerworld|data=1º ottobre 2008|accesso=4 febbraio 2017}}</ref>. Il nome commerciale definitivo divenne C# alla presentazione ufficiale del progetto .NET da parte di Microsoft alla Professional Developers Conference tenutasi nel luglio 2000 a [[Orlando (Florida)|Orlando]], quando anche le librerie di classi e il runtime di [[ASP.NET]] vennero convertite in linguaggio C#.


Nel tempo C# e [[Java (linguaggio di programmazione)|Java]] hanno percorso strade differenti, aumentando complessivamente le differenze reciproche, sebbene ci siano stati anche evidenti casi di reciproco scambio di caratteristiche. Per esempio C#, a differenza di Java, utilizza sin dalla versione 2 la [[Reificazione (informatica)|reificazione]] per generare oggetti generici che possono essere usati come classi, riservando al momento del caricamento della classe in fase di esecuzione la compilazione effettiva del codice. Anche l'implementazione in ambedue i linguaggi dei [[tipi generici]], sebbene concettualmente identica, è stata implementata in maniera piuttosto differente. Invece, il concetto di boxing e unboxing propri di C# sono stati implementati successivamente anche in linguaggio Java<ref>{{Cita web|url=http://www.artima.com/weblogs/viewpost.jsp?thread=6543|titolo=After Java and C# - what is next?|autore=Klaus Kreft and Angelika Langer|sito=www.artima.com|accesso=2017-02-04}}</ref>.
Nel tempo C# e [[Java (linguaggio di programmazione)|Java]] hanno percorso strade differenti, aumentando complessivamente le differenze reciproche, sebbene ci siano stati anche evidenti casi di reciproco scambio di caratteristiche. Per esempio C#, a differenza di Java, utilizza sin dalla versione 2 la [[Reificazione (informatica)|reificazione]] per generare oggetti generici che possono essere usati come classi, riservando al momento del caricamento della classe in fase di esecuzione la compilazione effettiva del codice. Anche l'implementazione in ambedue i linguaggi dei [[tipi generici]], sebbene concettualmente identica, è stata implementata in maniera piuttosto differente. Invece, il concetto di boxing e unboxing propri di C# sono stati implementati successivamente anche in linguaggio Java<ref>{{Cita web|url=http://www.artima.com/weblogs/viewpost.jsp?thread=6543|titolo=After Java and C# - what is next?|autore=Klaus Kreft and Angelika Langer|sito=www.artima.com|accesso=4 febbraio 2017}}</ref>.


La versione C# 1.0, basata su .NET Framework 1.0, fu rilasciata commercialmente da Microsoft nel gennaio 2002 con il pacchetto di sviluppo Visual Studio .NET 2002. In seguito sono state rilasciate sino ad oggi nuove versioni del linguaggio e del framework .NET con i pacchetti [[Microsoft Visual Studio]].
La versione C# 1.0, basata su .NET Framework 1.0, fu rilasciata commercialmente da Microsoft nel gennaio 2002 con il pacchetto di sviluppo Visual Studio .NET 2002. In seguito sono state rilasciate sino ad oggi nuove versioni del linguaggio e del framework .NET con i pacchetti [[Microsoft Visual Studio]].
Riga 122: Riga 122:
* Indicizzatori di Proprietà (riconosciuti, ma non utilizzati dagli oggetti in C#)
* Indicizzatori di Proprietà (riconosciuti, ma non utilizzati dagli oggetti in C#)


=== Nuove funzioni introdotte con la versione 5 del linguaggio<ref>{{Cita news|lingua=en-US|url=https://blogs.msdn.microsoft.com/mvpawardprogram/2012/03/26/an-introduction-to-new-features-in-c-5-0/|titolo=An Introduction to New Features in C# 5.0|pubblicazione=The Microsoft MVP Award Program Blog|accesso=2017-02-04}}</ref> ===
=== Nuove funzioni introdotte con la versione 5 del linguaggio<ref>{{Cita news|lingua=en|url=https://blogs.msdn.microsoft.com/mvpawardprogram/2012/03/26/an-introduction-to-new-features-in-c-5-0/|titolo=An Introduction to New Features in C# 5.0|pubblicazione=The Microsoft MVP Award Program Blog|accesso=4 febbraio 2017}}</ref> ===
* Metodi asincroni
* Metodi asincroni
* Attributi ''Caller Info''
* Attributi ''Caller Info''


=== Nuove funzioni introdotte con la versione 6 del linguaggio<ref>{{Cita web|url=https://github.com/dotnet/roslyn/wiki/Languages-features-in-C#-6-and-VB-14|titolo=dotnet/roslyn|sito=GitHub|lingua=en|accesso=2017-02-04}}</ref> ===
=== Nuove funzioni introdotte con la versione 6 del linguaggio<ref>{{Cita web|url=https://github.com/dotnet/roslyn/wiki/Languages-features-in-C#-6-and-VB-14|titolo=dotnet/roslyn|sito=GitHub|lingua=en|accesso=4 febbraio 2017}}</ref> ===
* Servizio compilatore
* Servizio compilatore
* Importazione di membri di tipo statico nel namespace
* Importazione di membri di tipo statico nel namespace
Riga 139: Riga 139:
* Inizializzatore di dizionario
* Inizializzatore di dizionario


=== Funzionalità previste per la versione 7.0 (in fase di sviluppo)<ref>{{Cita web|url=https://github.com/dotnet/roslyn/blob/c830f88e093d8753e92e7f1054393e456e6fac20/docs/Language%20Feature%20Status.md|titolo=dotnet/roslyn|sito=GitHub|lingua=en|accesso=2017-02-04}}</ref> ===
=== Funzionalità previste per la versione 7.0 (in fase di sviluppo)<ref>{{Cita web|url=https://github.com/dotnet/roslyn/blob/c830f88e093d8753e92e7f1054393e456e6fac20/docs/Language%20Feature%20Status.md|titolo=dotnet/roslyn|sito=GitHub|lingua=en|accesso=4 febbraio 2017}}</ref> ===
* ''Binary litterals''
* ''Binary litterals''
* Separatori di cifra
* Separatori di cifra
Riga 305: Riga 305:


== Bibliografia ==
== Bibliografia ==
* {{cita libro|autore=|nome=John|cognome=Sharp|titolo=Microsoft Visual C# 2012|anno=2014|editore=Mondadori Informatica|città=|p=|pp=251|isbn=978-8861144040}}
* {{cita libro|autore=|nome=John|cognome=Sharp|titolo=Microsoft Visual C# 2012|anno=2014|editore=Mondadori Informatica|città=|pp=251|isbn=978-88-6114-404-0}}
* {{cita libro|autore=A. Boehm, J. Murach|nome=|cognome=|titolo=Murach's C# 2015|anno=2016|editore = Mike Murach & Associates|città=|p=|pp=908|isbn=978-1890774943}}
* {{cita libro|autore=A. Boehm, J. Murach|nome=|cognome=|titolo=Murach's C# 2015|anno=2016|editore = Mike Murach & Associates|città=|pp=908|isbn=978-1-890774-94-3}}
* {{cita libro|autore=D. Bochicchio, C. Civera, M. De Sanctis, A. Leoncini, M. Leoncini, S. Mostarda|nome=|cognome=|titolo=C#6 e Visual studio 2015. Guida completa per lo sviluppatore|anno=2016|editore=Hoepli Informatica|città=|p=|pp=456|isbn=978-8820370992}}
* {{cita libro|autore=D. Bochicchio, C. Civera, M. De Sanctis, A. Leoncini, M. Leoncini, S. Mostarda|nome=|cognome=|titolo=C#6 e Visual studio 2015. Guida completa per lo sviluppatore|anno=2016|editore=Hoepli Informatica|città=|pp=456|isbn=978-88-203-7099-2}}
* {{cita libro | titolo=Programmare con C# 6. Guida completa| nome=Antonio | cognome=Pelleriti | anno=2016| editore=Edizioni LSWR| isbn=978-8868953089|autore=|città=|p=|pp=828}}
* {{cita libro | titolo=Programmare con C# 6. Guida completa| nome=Antonio | cognome=Pelleriti | anno=2016| editore=Edizioni LSWR| isbn=978-88-6895-308-9|autore=|città=|pp=828}}
* {{cita libro | titolo=C# 6.0 and the .NET 4.6 Framework| nome= | cognome= | anno=2016| editore=Apress| isbn=978-1484213339|autore=A. Troelsen, P. Japikse|città=|p=|pp=1625}}
* {{cita libro | titolo=C# 6.0 and the .NET 4.6 Framework| nome= | cognome= | anno=2016| editore=Apress| isbn=978-1-4842-1333-9|autore=A. Troelsen, P. Japikse|città=|pp=1625}}
* {{cita libro | titolo=C# 6.0 in a Nutshell: The Definitive Reference| nome= | cognome= | anno=2016| editore=O'Reilly Media| isbn=978-1491927069|autore=J. Albahari, B. Albahari|città=|p=|pp=1136}}
* {{cita libro | titolo=C# 6.0 in a Nutshell: The Definitive Reference| nome= | cognome= | anno=2016| editore=O'Reilly Media| isbn=978-1-4919-2706-9|autore=J. Albahari, B. Albahari|città=|pp=1136}}


== Altri progetti ==
== Altri progetti ==

Versione delle 21:54, 6 feb 2017

Il titolo di questa pagina non è corretto per via delle caratteristiche del software MediaWiki. Il titolo corretto è C#.
Disambiguazione – "C♯" rimanda qui. Se stai cercando la nota Do diesis, vedi Do (nota).
C#
linguaggio di programmazione
AutoreAnders Hejlsberg
Data di origine2000
Ultima versione6.0
UtilizzoGenerico
ParadigmiMulti-paradigma: Strutturata, Imperativa, Object-Oriented, Funzionale, a eventi
TipizzazioneStatica, Dinamica, Forte, Sicura,
Estensioni comuni.cs, .csproj
Influenzato daDelphi, C++, Java, Eiffel, Haskell, ML
Ha influenzatoD, F#, Java
Implementazione di riferimento
Sito webdocs.microsoft.com/en-us/dotnet/csharp/, docs.microsoft.com/de-de/dotnet/csharp/, docs.microsoft.com/ja-jp/dotnet/csharp/, docs.microsoft.com/fr-fr/dotnet/csharp/ e docs.microsoft.com/it-it/dotnet/csharp/

Il C# (pronuncia: [ˈsiː ˈʃɑːp], come la parola inglese "see sharp")[1] è un linguaggio di programmazione orientato agli oggetti sviluppato da Microsoft all'interno dell'iniziativa .NET, e successivamente approvato come standard dalla Ecma (ECMA-334) e ISO (ISO/IEC 23270-2006).

La sintassi e struttura del C# prendono spunto da vari linguaggi nati precedentemente, in particolare Delphi, C++, Java e Visual BASiC.Il risultato è un linguaggio con meno simbolismo rispetto a C++, meno elementi decorativi rispetto a Java, ma comunque orientato agli oggetti in modo nativo e adatto a sviluppo di una vasta gamma di software.

Storia del linguaggio

Il progettista principale di C# è Anders Hejsberg, un informatico danese precedentemente coinvolto nello sviluppo dei linguaggi Turbo Pascal e Borland Delphi (attualmente di proprietà di Embarcadero).

È opinione comune che l'ispirazione venne dal linguaggio Java, dato che perfino il suo ideatore James Gosling, nonché Bill Joy di Sun Microsystem, lo definirono una sua imitazione, ma più limitata dal punto di vista della affidabilità, sicurezza e produttività.[2]. Invece secondo Anders Hejsberg la struttura di C# è più vicina a quella del linguaggio C++ piuttosto che a Java.

C# è strettamente legato allo sviluppo di .NET Framework. Infatti gli ingegneri di Microsoft utilizzarono nelle prime fasi della sua stesura un framework chiamato SMC, ovvero Simple Managed C, un sistema utilizzante il linguaggio C in modo gestito o "managed". Nel gennaio 1999, Microsoft mise Anders Hejsberg a capo di un gruppo di lavoro con il compito di produrre un nuovo linguaggio, chiamato provvisoriamente "Cool", acronimo di "C-like Object Oriented Language" (linguaggio orientato agli oggetti simile a C)[3]. Il nome commerciale definitivo divenne C# alla presentazione ufficiale del progetto .NET da parte di Microsoft alla Professional Developers Conference tenutasi nel luglio 2000 a Orlando, quando anche le librerie di classi e il runtime di ASP.NET vennero convertite in linguaggio C#.

Nel tempo C# e Java hanno percorso strade differenti, aumentando complessivamente le differenze reciproche, sebbene ci siano stati anche evidenti casi di reciproco scambio di caratteristiche. Per esempio C#, a differenza di Java, utilizza sin dalla versione 2 la reificazione per generare oggetti generici che possono essere usati come classi, riservando al momento del caricamento della classe in fase di esecuzione la compilazione effettiva del codice. Anche l'implementazione in ambedue i linguaggi dei tipi generici, sebbene concettualmente identica, è stata implementata in maniera piuttosto differente. Invece, il concetto di boxing e unboxing propri di C# sono stati implementati successivamente anche in linguaggio Java[4].

La versione C# 1.0, basata su .NET Framework 1.0, fu rilasciata commercialmente da Microsoft nel gennaio 2002 con il pacchetto di sviluppo Visual Studio .NET 2002. In seguito sono state rilasciate sino ad oggi nuove versioni del linguaggio e del framework .NET con i pacchetti Microsoft Visual Studio.

Versione C# Data di presentazione Versione .NET Visual Studio
1.0 Gennaio 2002 1.0 Visual Studio .NET 2002
2.0 Novembre 2005 2.0 Visual Studio .NET 2003
3.0 Novembre 2007 2.0/3.5 Visual Studio 2008-2010
4.0 Aprile 2010 4.0 Visual Studio 2010
5.0 Agosto 2012 4.5 Visual Studio 2012-2013
6.0 Luglio 2015 4.6 Visual Studio 2015

Caratteristiche del linguaggio

C# è, in un certo senso, il linguaggio che meglio degli altri descrive le linee guida sulle quali ogni programma .NET gira. Infatti è stato creato da Microsoft specificatamente per la programmazione nel Framework .NET. I suoi tipi di dati "primitivi" hanno una corrispondenza univoca con i tipi .NET e molte delle sue astrazioni, come classi, interfacce, delegati ed eccezioni, sono particolarmente adatte a gestire il .NET framework.

Definire in forma classica C# come linguaggio interpretato o compilato nel senso classico dei termini è piuttosto complicato. In effetti è ambedue le cose allo stesso tempo. Data la sua stretta integrazione con il Framework .NET, i codici sorgente scritti in C# sono normalmente compilati secondo i criteri JIT. In pratica, la trasformazione in codice macchina (ovvero eseguito direttamente dalla CPU) avviene su richiesta solo all'atto di caricamento ed esecuzione del programma. In prima istanza il codice sorgente viene convertito dal framework in un codice intermedio detto CIL e solo all'esecuzione del programma il CLR specifico per il sistema operativo utilizzato converte il CIL in codice macchina specifico per l'hardware ospite, man mano che viene eseguito.

Una seconda possibilità è la cosiddetta compilazione Ngen, che permette di convertire tutto il codice CIL in codice macchina in una volta sola. Ciò ha il vantaggio di consentire l'implementazione di ambienti di sviluppo che utilizzino C# in qualunque sistema operativo, una volta implementato il CLR specifico.

La sintassi di base del C# è spesso molto simile o identica a quella dei linguaggi C, C++ e Java. Alcune delle caratteristiche di base sono:

  • I nomi di variabili, funzioni, classi e altri elementi sono sempre sensibili alle minuscole, ovvero "case-sensitive".
  • Ogni specifica dev'essere chiusa dal carattere punto e virgola (;).
  • Le parentesi graffe ({}) sono usate per raggruppare specifiche.
  • Secondo le consuetudini dei linguaggi orientati agli oggetti, le specifiche sono di regola raggruppate in metodi (ovvero funzioni), i metodi sono raggruppati in classi, e le classi sono raggruppate nei namespaces.

Differenze rispetto a C e C++

Rispetto a C o a C++ il linguaggio C# presenta varie modifiche, volte principalmente ad evitare errori tipici e ambiguità della programmazione in linguaggio C:

  • I puntatori possono essere utilizzati solo in particolari blocchi di codice marcati come unsafe.
  • In molte operazioni aritmetiche vengono controllati eventuali overflow.
  • Gli oggetti dinamici non vengono deallocati esplicitamente, ma viene gestita automaticamente e implicitamente dal garbage-collector quando non esistono più riferimenti a tali oggetti. Questo sistema evita i due problemi dei dangling pointer e del memory leak, anche se con una riduzione delle prestazioni.
  • Come in Java è possibile ereditare da una sola classe, diversamente da quanto avviene in C++, ma è possibile implementare un numero indefinito di interfacce. A differenza del C++, non è consentita l'ereditarietà di tipo private.
  • Le sole conversioni implicite consentite sono quelle safe, ovvero che non espongono al rischio di perdita di dati causata dalla diversa tipologia di dato. Per esempio non sono consentite conversioni implicite fra integer e boolean oppure tra enumeratori ed integer.
  • C# non dispone dei template tipici del C++, ma nella versione 2.0 sono stati introdotti i generic.

Differenze rispetto a Java

Sebbene C# sia ritenuto simile a Java, esistono alcune importanti differenze fra i due linguaggi. Quella maggiormente visibile è certamente la presenza in C# di molti costrutti, alcuni dei quali chiaramente derivati dal C++, che in Java sono stati deliberatamente vietati. I sostenitori del C# affermano che tutto ciò rende il codice più chiaro, mentre i sostenitori di Java affermano che proprio la presenza di un gran numero di parole-chiave e di regole da ricordare rende il linguaggio più difficile da imparare e utilizzare.

Altre differenze evidenti sono le seguenti:

  • Java utilizza i commenti Javadoc-sintax per generare la documentazione dal codice sorgente, mentre C# utilizza la sintassi XML nei commenti per lo stesso scopo.
  • Quello che in Java è chiamato package, in C# viene chiamato namespace o "spazio di nomi". Un ulteriore livello di organizzazione in C# è costituito dagli assembly, che possono contenere al proprio interno diversi spazi di nomi.

Nuove funzioni introdotte con la versione 3 del linguaggio

Nuove funzioni introdotte con la versione 4 del linguaggio

  • Pseudo tipo dynamic
  • Covarianza e Controvarianza nei tipi di parametri per interfacce generiche e delegati
  • Specifica ref opzionale per l'uso di COM
  • Parametri opzionali e nomi di argomenti
  • Indicizzatori di Proprietà (riconosciuti, ma non utilizzati dagli oggetti in C#)

Nuove funzioni introdotte con la versione 5 del linguaggio[5]

  • Metodi asincroni
  • Attributi Caller Info

Nuove funzioni introdotte con la versione 6 del linguaggio[6]

  • Servizio compilatore
  • Importazione di membri di tipo statico nel namespace
  • Filtri di eccezione
  • Await nei blocchi catch/finally
  • Inizializzatori di proprietà automatici
  • Valori di default per proprietà di tipo getter esclusivo
  • Membri expression-bodied
  • Propagatore di null
  • Interpolazione stringhe
  • Operatore nameof
  • Inizializzatore di dizionario

Funzionalità previste per la versione 7.0 (in fase di sviluppo)[7]

  • Binary litterals
  • Separatori di cifra
  • Funzioni locali
  • Tipo switch
  • Ref return
  • Tuple
  • Out var
  • Pattern Matching
  • Ritorni asincroni arbitrari
  • Records

Esempi

Hello world!

Il seguente esempio stampa il testo "Hello world" su console.

  using System;

  class HelloWorldApp
  {
    public static void Main(string[] args)
    {
      Console.WriteLine("Hello World");
      Console.ReadLine ();
    }
  }

Invece il seguente esempio stampa il testo "Hello world" su una Message Box.

  using System.Windows.Forms;

  class HelloWorldApp
  {
    public static void Main()
    {
      MessageBox.Show("Hello World");
    }
  }

Definizione di classe

Il seguente esempio definisce una classe di nome Persona che espone una proprietà Nome il cui valore viene memorizzato nella variabile mNome:

using System;
namespace Program
{
  class Persona 
  {
    private string mNome;
    
    public string Nome 
    {
      get { return mNome; }
      set { mNome = value; }
    }
  }				
}

Lo stesso esempio si può scrivere in una forma equivalente, utilizzando la sintassi delle Automatic Properties introdotta con la versione 3.0:

  using System;
  class Persona 
  {
    public string Nome { get; set; }
  }

Da notare che il linguaggio C# risulta uno strumento sintattico per l'utilizzo delle librerie presenti nei namespace del Framework .NET di Microsoft. A parte le strutture interne al linguaggio, il programmatore C# deve fare riferimento alle librerie, anche per la gestione dell'I/O, come del resto in C e C++. Nel primo esempio presentato infatti viene utilizzato il namespace System del quale sarà poi utilizzato il metodo WriteLine della classe Console per scrivere a video la scritta "Hello World".

Calcolatrice

Questo esempio mostra una semplice calcolatrice.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calcolatrice
{
    class Program
    {
        static void Main(string[] args)
        {
            int numero1; // Dichiara la variabile "numero1" per il primo numero.
            int numero2; // Dichiara la variabile "numero2" per il secondo numero.
            int risultato; // Dichiara la variabile "risultato" per il risultato tra "numero1" e "numero2".
            int scelta; // Dichiara la variabile "scelta" per scegliere quale operazione eseguire.
            bool ripeti = true; // Dichiara la variabile "ripeti" per ripetere sempre tutta la calcolatrice.

            do // Ripeti tutta la calcolatrice.
            {
                Console.Clear(); // Cancella tutte le scritte presenti nella console.
                Console.WriteLine("Benvenuto nella calcolatrice."); // Scrivi nella console "Benvenuto nella calcolatrice.".
                Console.WriteLine("1. Addizione"); // Scrivi nella console "1. Addizione".
                Console.WriteLine("2. Sottrazione"); // Scrivi nella console "2. Sottrazione".
                Console.WriteLine("3. Moltiplicazione"); // Scrivi nella console "3. Moltiplicazione".
                Console.WriteLine("4. Divisione"); // Scrivi nella console "4. Divisione".
                Console.WriteLine("5. Esci"); // Scrivi nella console "5. Esci".
                scelta = Convert.ToInt32(Console.ReadLine()); // Assegna la variabile "scelta" all'operazione scelta dall'utente.
                if(scelta!=5){
                    Console.Write("Inserisci il primo numero: "); // Chiedi all'utente di inserire il primo numero.
                    numero1 = Convert.ToInt32(Console.ReadLine()); // Assegna la variabile "numero1" al primo numero inserito dall'utente.
                    Console.Write("Inserisci il secondo numero: "); // Chiedi all'utente di inserire il secondo numero.
                    numero2 = Convert.ToInt32(Console.ReadLine()); // Assegna la variabile "numero2" al secondo numero inserito dall'utente.
                if (scelta == 1) // Esegui il codice per l'addizione.
                {
                    risultato = numero1 + numero2; // Assegna la variabile "risultato" al risultato tra "numero1" e "numero2".
                    Console.WriteLine(numero1 + " + " + numero2 + " = " + risultato); // Dici all'utente il risultato.
                }
                else if (scelta == 2) // Esegui il codice per la sottrazione.
                {
                    risultato = numero1 - numero2; // Assegna la variabile "risultato" al risultato tra "numero1" e "numero2".
                    Console.WriteLine(numero1 + " - " + numero2 + " = " + risultato); // Dici all'utente il risultato.
                }
                else if (scelta == 3) // Esegui il codice per la moltiplicazione.
                {
                    risultato = numero1 * numero2; // Assegna la variabile "risultato" al risultato tra "numero1" e "numero2".
                    Console.WriteLine(numero1 + " * " + numero2 + " = " + risultato); // Dici all'utente il risultato.
                }
                else if (scelta == 4) // Esegui il codice per la divisione.
                {
                    if(numero2 != 0){
                        risultato = numero1 / numero2; // Assegna la variabile "risultato" al risultato tra "numero1" e "numero2".
                        Console.WriteLine(numero1 + " / " + numero2 + " = " + risultato); // Dici all'utente il risultato.
                    }else{
                        Console.WriteLine("Divisione per 0!");
                    }
                }
                else if (scelta == 5) // Esegui il codice per uscire dalla calcolatrice.
                {
                    return; // Esci dalla calcolatrice.
                }
                }
                Console.ReadKey(); // Ordina l'utente di premere un tasto qualsiasi.
            } while (ripeti == true); // Ripeti sempre tutta la calcolatrice.
        }
    }
}

Implementazioni

Il compilatore di riferimento è Microsoft Visual C#, parte del pacchetto Microsoft Visual Studio.

Esistono sul mercato e nei circuiti dell'open source altre implementazioni.

Mono

Il progetto Mono implementa un compilatore C# con licenza open source, un'implementazione completa open source del CLI, o Common Language Infrastructure, comprendente le librerie di framework richieste da specifiche ECMA, oltre a una quasi completa implementazione delle librerie di classi proprietarie di .NET attualmente aggiornate alle versione 3.5. Fino alla versione 2.6 di Mono non è prevista l'implementazione di Windows Presentation Foundation (WPF), sebbene sia invece prevista per successive evoluzioni della piattaforma Mono. Inoltre attualmente sono previste implementazioni solo parziali di LINQ to SQL e WCF.

DotGNU

Il progetto DotGNU include un compilatore C#, una implementazione parziale della CLI, comprese le librerie richieste secondo le specifiche ECMA, oltre a un sottoinsieme di alcune librerie di classi .NET proprietarie di Microsoft, aggiornate alla versione .NET 2.0.

Standardizzazione

Nel dicembre del 2001 ECMA ha pubblicato "ECMA-334 C# Language Specification"[8].

C# è diventato uno standard ISO nel 2003 (ISO/IEC 23270)[9].

Note

  1. ^ Il nome gioca sul fatto che C♯, in inglese e altre lingue, indica la nota musicale Do diesis, un semitono sopra il "C", ovvero il Do (fonte: James Kovacs, C#/.NET History Lesson, su jameskovacs.com, 7 settembre 2007. URL consultato il 7 giugno 2012.). In effetti, il nome del linguaggio andrebbe scritto con il simbolo del diesis, ma in sostituzione si usa il cancelletto per praticità di scrittura (fonte: MSDN, Domande frequenti su Visual C#). In italiano, il gioco di parole viene perso.
  2. ^ Why Microsoft C# isn't, su cnet.com.
  3. ^ Naomi Hamilton, The A-Z of Programming Languages: C#, in Computerworld, 1º ottobre 2008. URL consultato il 4 febbraio 2017.
  4. ^ Klaus Kreft and Angelika Langer, After Java and C# - what is next?, su www.artima.com. URL consultato il 4 febbraio 2017.
  5. ^ (EN) An Introduction to New Features in C# 5.0, in The Microsoft MVP Award Program Blog. URL consultato il 4 febbraio 2017.
  6. ^ (EN) dotnet/roslyn, su GitHub. URL consultato il 4 febbraio 2017.
  7. ^ (EN) dotnet/roslyn, su GitHub. URL consultato il 4 febbraio 2017.
  8. ^ Standard ECMA-334
  9. ^ http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=36768 - Standardizzazione ISO

Bibliografia

  • John Sharp, Microsoft Visual C# 2012, Mondadori Informatica, 2014, pp. 251, ISBN 978-88-6114-404-0.
  • A. Boehm, J. Murach, Murach's C# 2015, Mike Murach & Associates, 2016, pp. 908, ISBN 978-1-890774-94-3.
  • D. Bochicchio, C. Civera, M. De Sanctis, A. Leoncini, M. Leoncini, S. Mostarda, C#6 e Visual studio 2015. Guida completa per lo sviluppatore, Hoepli Informatica, 2016, pp. 456, ISBN 978-88-203-7099-2.
  • Antonio Pelleriti, Programmare con C# 6. Guida completa, Edizioni LSWR, 2016, pp. 828, ISBN 978-88-6895-308-9.
  • A. Troelsen, P. Japikse, C# 6.0 and the .NET 4.6 Framework, Apress, 2016, pp. 1625, ISBN 978-1-4842-1333-9.
  • J. Albahari, B. Albahari, C# 6.0 in a Nutshell: The Definitive Reference, O'Reilly Media, 2016, pp. 1136, ISBN 978-1-4919-2706-9.

Altri progetti

Collegamenti esterni

Template:Estensioni

Controllo di autoritàLCCN (ENsh2001001705 · GND (DE4616843-6 · BNF (FRcb13614817q (data) · J9U (ENHE987007530455805171