C sharp e File:Auguri Professore.PNG: differenze tra le pagine

(Differenze fra le pagine)
Contenuto cancellato Contenuto aggiunto
 
Nessun oggetto della modifica
 
Riga 1:
{{Informazioni file
{{titolo errato|C#}}
|Descrizione = Screenshot
{{Nota disambigua|la nota '''Do diesis''' nella notazione musicale in uso nei paesi di lingua inglese e tedesca|[[Scala musicale]]}}
|Fonte = Film ''Auguri professore'' di Riccardo Milani, 1997
Il '''C#''' (si pronuncia "''c sharp''") è un [[linguaggio di programmazione]] ''[[Programmazione orientata agli oggetti|object-oriented]]'' sviluppato da [[Microsoft]] all'interno dell'iniziativa [[.NET]], e successivamente approvato come standard [[ECMA]]. La sintassi del C# prende spunto da quella del [[Delphi]] (hanno il medesimo autore, ovvero [[Anders Hejlsberg]]), del [[C++]], da quella di [[Java (linguaggio)|Java]] ed a [[Visual Basic]] per gli strumenti di programmazione visuale e per la sua semplicità (meno simbolismo rispetto a C++, meno elementi decorativi rispetto a Java).
|Data = 21 marzo 2014
|Autore = [[Utente:Fabio Matteo]]
|Detentore copyright = Cecchi Gori Group
|EDP = [[Wikipedia:Copyright immagini#Screenshot protetti da copyright]]
|Altre versioni =
}}
 
== Licenza ==
== Caratteristiche del linguaggio ==
{{Screenshot Copyrighted||film}}
C# è, in un certo senso, il linguaggio che meglio degli altri descrive le linee guida sulle quali ogni programma [[.NET]] gira; questo linguaggio è stato infatti creato da [[Microsoft]] specificatamente per la programmazione nel Framework [[.NET]].
[[Categoria:Immagini di Silvio Orlando|1997]]
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.
 
=== Differenze con il C/C++ ===
In confronto al [[C (linguaggio)|C]] o al [[C++]] il linguaggio ha subito una serie di modifiche volte principalmente ad evitare errori tipici e ambiguità della programmazione [[C (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 [[allocazione di memoria|deallocati]] esplicitamente; la loro rimozione viene gestita automaticamente (implicitamente) dal "[[garbage collection|garbage-collector]]" quando non esistono più riferimenti a tali oggetti. Questa gestione evita i due problemi ben noti dei ''[[dangling pointer]]'' e del ''[[memory leak]]''.
* Come in [[Java (linguaggio)|Java]], è possibile ereditare da una sola classe (diversamente da come avviene in [[C++]]) ma è possibile implementare un numero indefinito di interfacce.
* Le sole conversioni implicite che sono consentite sono quelle "safe", ovvero che non espongono al rischio di perdita di dati causata dalla diversa tipologia di dato. Ad esempio non sono consentite conversioni implicite fra integer e boolean o fra enumerati ed integer.
* C# non possiede i "template" (tipici del [[C++]]) ma nella versione 2.0 sono stati introdotti i "generic".
 
=== Differenze con Java ===
Sebbene C# sia ritenuto simile a [[Java (linguaggio)|Java]], esistono alcune importanti differenze fra i due linguaggi:
 
* Java non ha costrutti specifici per definire le proprietà di una classe ( getters e setters ).<ref>[http://groups.google.it/group/it.comp.java/browse_thread/thread/5a90046a50a79d29/3daf2d8a261a1da2?hl=it&lnk=st&q=Java+non+ha+costrutti+specifici+per+definire+le+proprietà.#3daf2d8a261a1da2 discussione sull'articolo su google groups (get e set)]</ref>
* Java non permette blocchi di codice "unsafe" che consentono di gestire i puntatori.
* 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.
* C# non obbliga la gestione delle eccezioni (handle or declare), in Java alcuni tipi di eccezioni, le [[checked exceptions]] vanno gestite.<ref>[http://groups.google.it/group/it.comp.java/browse_thread/thread/5a90046a50a79d29/4c52f7e67dcf7aa1?hl=it&lnk=st&q=In+Java%2C+le+checked+exceptions+devono+essere+gestite.#4c52f7e67dcf7aa1 discussione sull'articolo su google groups (checked expressions)]</ref>
* C# supporta gli indicizzatori ed i delegati.
* C# supporta le strutture, le cui istanze sono memorizzate nello [[stack]] e che utilizzano implicitamente ed obbligatoriamente 'ValueType' (che è derivato da object) quale tipo base .
* C# ha la possibilità di dichiarare i metodi virtual tramite l'apposita keyword virtual; a differenza di Java, dove i metodi sono forzatamente virtual di default.
 
=== Nuove funzioni introdotte con la versione 3 del linguaggio ===
* Lambda expressions
* Tipi anonimi
* [[LINQ]]
* Extension methods
 
Come Java ha i suoi [[package]] anche nel C# possiamo ritrovare una serie di classi già sviluppate per l'interazione con i vari ambienti, Front End, Database, Xml e altri. Questo è il [[.NET]] framework, del quale utilizza una serie di librerie di classi che gli permettono l'accesso alle funzionalità del sistema.
In C# quello che in Java è chiamato [[package]] viene chiamato [[namespace]] o "spazi di nomi".
Le classi sono organizzate all'interno di una serie di [[namespace]] che raggruppano le classi con funzionalità simili; ad esempio System.Windows.Forms per la gestione delle finestre di tipo "Forms", System.Xml per l'elaborazione di [[XML]] e System.Data per l'accesso alle basi dati.
 
Un ulteriore livello di organizzazione è costituito dagli "assembly". Un assembly può essere un singolo file od una serie di file linkati fra di loro. Un assembly può avere al suo interno diversi spazi di nomi.
 
== Esempi ==
=== Hello world! ===
Hello, world!
Il seguente esempio stampa il testo "[[Hello world|Hello World]]" su console.
<source lang="csharp">
using System;
class HelloWorldApp
{
public static void Main()
{
System.Console.WriteLine("Hello World");
System.Console.ReadLine();
}
}
</source>
 
Invece il seguente esempio stampa il testo "[[Hello World]] su una Message Box.
<source lang="csharp">
using System.Windows.Forms;
class HelloWorldApp
{
public static void Main()
{
MessageBox.Show("Hello World");
}
}
</source>
 
 
=== 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'':
<source lang="csharp">
using System;
 
namespace Program
{
class Persona
{
public string Nome
{
get { return mNome; }
set { mNome = value; }
}
 
private string mNome;
}
}
</source>
 
Lo stesso esempio si può scrivere in una forma equivalente, utilizzando la sintassi delle "Automatic Properties" introdotta con la versione 3.0:
<source lang="csharp">
using System;
class Persona
{
public string Nome { get; set; }
}
</source>
 
Da notare che il linguaggio C# risulta essere 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++. Nell'esempio presentato infatti viene utilizzato il namespace System del quale sarà poi utilizzato il metodo WriteLine della classe Console per mandare in output a video la scritta "Hello World".
 
==Implementazioni==
===Autofac===
'''Autofac''' è una implementazione in [[C#]] del pattern ''Inversione di controllo'' (IoC).
 
Pur supportando la versione 2.0 di C#, è progettato e realizzato per trarre vantaggio dalle nuove funzionalità
introdotte con la versione 3, in particolare dalle [[Espressione (informatica)|espressioni]] lambda.
 
== Standardizzazione ==
Microsoft ha sottoposto C# ad [[ECMA]] per una standardizzazione formale. Nel dicembre del [[2001]] ECMA ha rilasciato "ECMA-334 C# Language Specification". C# è diventato uno standard ISO nel [[2003]] (ISO/IEC 23270).
 
Esistono implementazioni indipendenti di [[.NET]] e del C#, fra cui il progetto [[Mono (progetto)|Mono]] di [[Ximian]] e [[dotGNU]] & Portable.NET della [[Free Software Foundation]].
 
Recentemente Microsoft ha introdotto, nella versione 2.0 del framework, i "generics", le "partial-class" ed altre nuove funzionalità. È stata proposta la standardizzazione ECMA/ISO anche per queste funzionalità, ma allo stato attuale non fanno parte della definizione standard del linguaggio.
 
== Altri progetti ==
{{interprogetto|b}}
 
== Note ==
<references />
 
== Collegamenti esterni ==
*[http://en.csharp-online.net/ C# Online.NET] - C# e .NET enciclopedia.
* [http://www.csharpuniversity.com/ Programming using C#]
*[http://www.ugidotnet.org User Group Italiano dot NET]
*[http://www.mono-project.com/Main_Page Mono: Piattaforma di sviluppo Opensource]
*[http://www.visualcsharp.it VisualCsharp.it: Sito Italiano dedicato a C#]
*[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csspec/html/CSharpSpecStart.asp?frame=true C# Language Specification (MSDN)]
*[http://www.fsharp.net F#]
*[http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf C# Language Specification (.pdf)]
*[http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=36768&ICS1=35&ICS2=60&ICS3= ISO/IEC 23270:2003 C# Language Specification]
*[http://www.go-mono.com/c-sharp.html MCS: The Ximian C# compiler]
*[http://www.southern-storm.com.au/portable_net.html Portable.NET]
*[http://www.dotgnu.org/ DotGNU Project - a Free Software .NET compatible platform]
*[http://www.borland.com/csharpbuilder/ Borland USA's C# Builder for the Microsoft .NET Framework]
*[http://csharpcomputing.com/Tutorials/TOC.htm C# tutorial including MSIL by Aleksey Nudelman]
*[http://www.icsharpcode.net Open Source C# IDE]
*[http://www.csharp-station.com/Tutorial.aspx Free C# Tutorial by Joe Mayo]
*[http://www.csharphelp.com/archives/archive96.html ''Java And C-Sharp Compared'' by Anand Narayanaswamy]
*[http://www.parlezuml.com UML tutorial] for C# programmers
*[http://www.dotnetarchitects.it/downloadbook.aspx ABC# - Guida alla programmazione (pdf) di Antonio Pelleriti]
*[http://www.meshplex.org/wiki/C_Sharp_Tutorial Full C# Online book]
*[[Baltie]] - C# IDE for children and young [http://www.sgpsys.com Baltie]
*[http://code.google.com/p/autofac/ Il sito di Autofac]
*[http://docs.google.com/View?docid=dg4p5693_22h76wp Descrizione del pattern IoC]
 
{{Linguaggio C}}
{{Principali linguaggi di programmazione}}
{{portale|informatica|Microsoft}}
 
[[Categoria:Linguaggi di programmazione]]
[[Categoria:.NET]]
 
[[ar:سي شارب]]
[[az:C Sharp]]
[[bg:C Sharp]]
[[bn:সি শার্প]]
[[bs:C šarp]]
[[ca:C sostingut]]
[[cs:C Sharp]]
[[da:C Sharp]]
[[de:C-Sharp]]
[[en:C Sharp (programming language)]]
[[eo:C dieso (programlingvo)]]
[[es:C Sharp]]
[[eu:C Sharp]]
[[fa:سی‌شارپ]]
[[fi:C sharp]]
[[fr:C sharp]]
[[gl:C Sharp]]
[[he:C sharp]]
[[hr:C sharp]]
[[hu:C Sharp]]
[[id:C sharp]]
[[is:C Sharp]]
[[ja:C Sharp]]
[[ka:C Sharp]]
[[ko:C 샤프]]
[[lt:C sharp]]
[[ml:സി ഷാര്‍പ്പ്]]
[[ms:C Sharp]]
[[nds:C sharp]]
[[new:सी शार्प]]
[[nl:C sharp]]
[[no:C Sharp]]
[[pl:C Sharp]]
[[pt:C Sharp]]
[[ro:C sharp]]
[[ru:C Sharp]]
[[sah:C Sharp]]
[[sh:C Sharp]]
[[simple:C sharp]]
[[sk:C Sharp]]
[[sr:C Sharp]]
[[sv:C-sharp]]
[[tg:C Sharp]]
[[th:ภาษาซีชาร์ป]]
[[tr:C Sharp (programlama dili)]]
[[uk:C Sharp]]
[[uz:C Sharp dasturlash tili]]
[[vi:C thăng]]
[[zh:C#]]