C sharp: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti. |
|||
(14 versioni intermedie di 9 utenti non mostrate) | |||
Riga 5:
|autore = [[Anders Hejlsberg]]
|data = [[2000]]
|utilizzo = Generico
|paradigmi = Multi-paradigma: [[Programmazione strutturata|Strutturata]], [[Programmazione imperativa|Imperativa]], [[Programmazione orientata agli oggetti|Object-Oriented]], [[Programmazione funzionale|Funzionale]], [[Programmazione a eventi|a eventi]]
Line 19 ⟶ 18:
|sito_web =
}}
Il '''C#''' (pronuncia inglese: {{IPA|[ˈsiː ˈʃɑːp]|en}}, come l'espressione ''see sharp'', "vedere nitidamente"<!--la fonte è sempre MSDN, vedi nota che segue-->)<ref>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: {{Cita web
|url= http://www.jameskovacs.com/blog/CNETHistoryLesson.aspx
|titolo= C#/.NET History Lesson
Line 31 ⟶ 30:
}}). 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: [[Microsoft Developer Network|MSDN]], [https://msdn.microsoft.com/it-it/vcsharp/aa336822.aspx Domande frequenti su Visual C#]). In italiano, il gioco di parole viene perso.</ref> è un [[linguaggio di programmazione]] multi-paradigma che supporta tutti i concetti della programmazione orientata agli oggetti. Esso è stato sviluppato da [[Microsoft]] all'interno dell'iniziativa [[Microsoft .NET|.NET]], e successivamente approvato come standard dalla [[ECMA International|ECMA]] (ECMA-334) e [[Organizzazione internazionale per la normazione|ISO]] (norma [[ISO 23270|ISO/IEC 23270]]).
La [[sintassi]] e struttura del C# prendono spunto da vari linguaggi nati precedentemente, in particolare [[Delphi]], [[C++]], [[Java (linguaggio di programmazione)|Java]] e [[Visual Basic]].
== Storia del linguaggio ==
Line 38 ⟶ 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|lingua=EN}}</ref>. Invece, secondo Anders Hejlsberg e Microsoft stessa, la struttura di C# è più vicina a quella del [[C++|linguaggio C++]] piuttosto che a [[Java (linguaggio di programmazione)|Java]]<ref>{{Cita web|url=https://msdn.microsoft.com/en-us/library/ms836794.aspx|titolo=C# and Java: Comparing Programming Languages|lingua=EN}}</ref>.
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 Hejlsberg 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 |lingua=en |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 (blog)|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 [[Libreria (software)|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|lingua=EN|accesso=4 febbraio 2017}}</ref>.
Line 51 ⟶ 50:
|-
|1.0
|
|1.0
|Visual Studio .NET 2002
|-
|2.0
|
|2.0
|Visual Studio .NET 2003
|-
|3.0
|
|2.0/3.5
|Visual Studio 2008-2010
|-
|4.0
|
|4.0
|Visual Studio 2010
|-
|5.0
|
|4.5
|Visual Studio 2012-2013
|-
|6.0
|
|4.6
|Visual Studio 2015
|-
|7.0
|
|4.6.2
|Visual Studio 2017
|-
|7.1
|
|4.7
|Visual Studio 2017 Ver. 15.3
|-
|7.2
|
|4.7.1
|Visual Studio 2017 Ver. 15.5
|-
|7.3
|
|4.7.2
|Visual Studio 2017 Ver. 15.7
|-
|8.0
|
|4.8
|Visual Studio 2019
|-
|9.0
|
|5
|Visual Studio 2019
|-
|10.0
|
|6
|Visual Studio 2022
|-
|11.0
|
|7
|Visual Studio 2022
|-
|12.0
|novembre 2023
|8
|Visual Studio 2022
|}
Line 130 ⟶ 134:
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]] (;).
* Gli indici degli elementi di [[array]] e [[Matrice|matrici]] sono numerati a partire da 0.
* Le parentesi graffe ({}) sono usate per raggruppare specifiche.
Line 168 ⟶ 172:
* Indicizzatori di Proprietà (riconosciuti, ma non utilizzati dagli oggetti in C#)
==== Versione 5 ====
* Metodi asincroni
* Attributi ''Caller Info''
==== Versione 6 ====
* Servizio compilatore
* Importazione di membri di tipo statico nel namespace
Line 185 ⟶ 193:
* Inizializzatore di dizionario
==== Versione 7 ====
* ''Binary literals''
* Decostruttori
Line 200 ⟶ 210:
* Costruttori e finalizzatori nelle definizioni di espressioni
==== Versione 8 ====
<ref>{{Cita web|url=https://docs.microsoft.com/it-it/dotnet/csharp/whats-new/csharp-8|titolo=Novità C# 8|lingua=IT}}</ref> * Nullable reference types
* Membri di interfaccia di default
Line 212 ⟶ 224:
* Assegnamento con null-coalescing
==== Versione 9 ====
<ref>{{Cita web|url=https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9|titolo=Novità C# 9|lingua=IT}}</ref> * Dichiarazioni di primo livello
* Miglioramenti della corrispondenza dei modelli
Line 233 ⟶ 247:
class HelloWorldApp
{
public static void Main(string[] args) // punto d'ingresso del programma
{
Console.WriteLine("Hello World");
Line 277 ⟶ 291:
Lo stesso esempio si può scrivere in una forma equivalente, utilizzando la sintassi delle ''Automatic Properties'' introdotta con la versione 3.0:
<syntaxhighlight lang="csharp">using System;
class Persona
{
public string Nome { get; set; }
}</syntaxhighlight>▼
}▼
▲</syntaxhighlight>
Da notare che il linguaggio C# risulta uno strumento sintattico per l'utilizzo delle librerie presenti nei namespace del Framework [[Microsoft .NET|.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++. Infatti, nel primo esempio presentato viene utilizzato il namespace
=== Deserializzazione di un file JSON ===
In questo esempio si utilizza il namespace nativo <code>System.Text.Json</code> per deserializzare un semplice file JSON, il cui contenuto viene in seguito formattato e stampato su <code>System.Console</code>.
Prendiamo in considerazione il seguente JSON.<syntaxhighlight lang="json">
{
"0": "Carthago delenda est.",
"1": "Alea iacta est.",
"2": "Cogito ergo sum."
}
</syntaxhighlight>Questo il codice in C#.<syntaxhighlight lang="csharp">using System.Text.Json;
namespace JSONDeserialization;
class Program
{
// Creiamo un'istanza di "JsonSerializerOptions.Default".
// È sempre consigliato inizializzarne solo una per programma.
// La parola chiave "readonly" significa che la variabile non verrà modificata dopo l'inizializzazione.
private readonly static JsonSerializerOptions JsonOptions = JsonSerializerOptions.Default;
// La funzione riceve come parametro la directory del file JSON che vogliamo deserializzare.
// Ci ritorna un dizionario contenente chiavi, identificatori unici di tipo "Int32", e un valore di tipo "String" per ogni chiave.
private static Dictionary<int, string> GetJsonAsDictionary(string directory)
{
// Dichiariamo un dizionario vuoto e nullable.
Dictionary<int, string>? data = [];
// Deserializziamo il file usando questa funzione statica e specificando il tipo di ritorno.
// Alcune funzioni richiedono che venga specificato il tipo di ritorno tra due parentesi angolari.
data = JsonSerializer.Deserialize<Dictionary<int, string>>(File.ReadAllText(directory), JsonOptions);
// File è una classe statica fornita da System per semplici manipolazioni di file.
// Se il dizionario è nullo o vuoto, facciamo scattare una "Exception".
// Le "Exception" spezzano immediatamente il runtime flow di un programma.
if (data is null || data.Keys.Count == 0)
throw new Exception("Il file è vuoto o non è stato deserializzato correttamente.");
return data;
▲ }
private static void Main()
{
// Infine usiamo "string.Join" per scrivere l'output della funzione sulla Console.
Console.WriteLine(string.Join(", ", GetJsonAsDictionary("test.json")));
}
}</syntaxhighlight>L'output sarà quindi: <code>[0, Carthago delenda est.], [1, Alea iacta est.], [2, Cogito ergo sum.]</code>
=== Calcolatrice ===
Line 398 ⟶ 457:
Nel dicembre del [[2001]] ECMA ha pubblicato "ECMA-334 C# Language Specification"<ref>{{Cita web |url=https://www.ecma-international.org/publications/standards/Ecma-334.htm|titolo=Standard ECMA-334<!-- Titolo generato automaticamente -->}}</ref>.
C# è diventato uno standard ISO nel [[2003]] ([[ISO 23270|ISO/IEC 23270]])<ref>{{Cita web |url=http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=36768
== Note ==
|