C sharp: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Annullata la modifica di ~2025-28382-52 (discussione), riportata alla versione precedente di Emayeah
Etichetta: Rollback
 
(3 versioni intermedie di 3 utenti non mostrate)
Riga 9:
|tipizzazione = [[Tipizzazione statica|Statica]], [[Tipizzazione dinamica|Dinamica]], [[Tipizzazione forte|Forte]], [[Sicurezza rispetto ai tipi|Sicura]]
|specifiche =
|estensione = .cs, .csprojcsx
|influenzato_da = [[Delphi]], [[C++]], [[Java (linguaggio di programmazione)|Java]], [[Eiffel (linguaggio)|Eiffel]], [[Haskell (linguaggio)|Haskell]], [[ML (linguaggio di programmazione)|ML]]
|ha_influenzato = [[D (linguaggio)|D]], [[F Sharp|F#]], [[Java (linguaggio di programmazione)|Java]], [[TypeScript]]
Riga 139:
* 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 [[namespace]].
 
=== Differenze rispetto ada C e C++ ===
Rispetto a [[C (linguaggio)|C]] o a [[C++]] il linguaggio C# presenta varie modifiche, volte principalmente ad evitare errori tipici e ambiguità della programmazione in [[C (linguaggio)|linguaggio C]]:
 
Riga 146:
* Gli oggetti dinamici non vengono deallocati esplicitamente, ma viene gestita automaticamente e implicitamente dal [[garbage collection|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 (linguaggio di programmazione)|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 dalladal diversadiverso tipologiatipo 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 ada Java ===
Sebbene C# sia ritenuto simile a [[Java (linguaggio di programmazione)|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 (linguaggio di programmazione)|Java]] sono stati deliberatamente vietati. I sostenitori del C# affermano che tutto ciò rende il codice più chiaro, mentre i sostenitori di [[Java (linguaggio di programmazione)|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.