Panoramica del linguaggio C#A Tour of the C# Language

C#, pronunciato "See Sharp", è un linguaggio di programmazione semplice, moderno, orientato a oggetti e indipendente dai tipi.C# (pronounced "See Sharp") is a simple, modern, object-oriented, and type-safe programming language. C# ha le sue radici nella famiglia di linguaggi C e risulterà immediatamente familiare ai programmatori di C, C++, Java e JavaScript.C# has its roots in the C family of languages and will be immediately familiar to C, C++, Java, and JavaScript programmers. Questa panoramica offre una presentazione dei componenti principali del linguaggio.This tour provides an overview of the major components of the language. Se si vuole esplorare il linguaggio tramite esempi interattivi, provare le esercitazioni Introduzione a C# .If you want to explore the language through interactive examples, try our introduction to C# tutorials.

C# è un linguaggio orientato a oggetti, ma include anche il supporto per la programmazione orientata ai componenti.C# is an object-oriented language, but C# further includes support for component-oriented programming. La progettazione software contemporanea è basata in misura sempre maggiore su componenti software costituiti da pacchetti di funzionalità autonomi e autodescrittivi.Contemporary software design increasingly relies on software components in the form of self-contained and self-describing packages of functionality. L'aspetto chiave di tali componenti è che presentano un modello di programmazione con proprietà, metodi ed eventi. Presentano inoltre attributi che forniscono informazioni dichiarative sul componente. Questi componenti, infine, includono la propria documentazione.Key to such components is that they present a programming model with properties, methods, and events; they have attributes that provide declarative information about the component; and they incorporate their own documentation. C# offre costrutti di linguaggio in grado di supportare direttamente questi concetti. Per questo motivo, C# è un linguaggio estremamente naturale in cui creare e usare componenti software.C# provides language constructs to support directly these concepts, making C# a very natural language in which to create and use software components.

Diverse funzionalità C# offrono un valido aiuto per la creazione di applicazioni affidabili e durevoli: Garbage Collection recupera automaticamente la memoria occupata da oggetti inutilizzati non raggiungibili, la gestione delle eccezioni offre un approccio strutturato ed estendibile al rilevamento degli errori e al ripristino, mentre la progettazione del linguaggio indipendente dai tipi rende impossibili la lettura da variabili non inizializzate, l'indicizzazione delle matrici oltre i limiti delle stesse o l'esecuzione di cast di tipo non controllati.Several C# features aid in the construction of robust and durable applications: Garbage collection automatically reclaims memory occupied by unreachable unused objects; exception handling provides a structured and extensible approach to error detection and recovery; and the type-safe design of the language makes it impossible to read from uninitialized variables, to index arrays beyond their bounds, or to perform unchecked type casts.

C# presenta un sistema di tipi unificato.C# has a unified type system. Tutti i tipi C#, inclusi i tipi di primitiva quali int e double, ereditano da un unico tipo object radice.All C# types, including primitive types such as int and double, inherit from a single root object type. Di conseguenza, tutti i tipi condividono un set di operazioni comuni e i valori dei diversi tipi possono essere archiviati, trasportati e gestiti in modo coerente.Thus, all types share a set of common operations, and values of any type can be stored, transported, and operated upon in a consistent manner. C#, inoltre, supporta sia i tipi riferimento sia i tipi valore definiti dall'utente, consentendo l'allocazione dinamica di oggetti e l'archiviazione inline di strutture leggere.Furthermore, C# supports both user-defined reference types and value types, allowing dynamic allocation of objects as well as in-line storage of lightweight structures.

Per assicurare un'evoluzione coerente dei programmi e delle librerie C# nel corso del tempo, nella progettazione del linguaggio è stata data particolare importanza al controllo delle versioni.To ensure that C# programs and libraries can evolve over time in a compatible manner, much emphasis has been placed on versioning in C#’s design. Molti linguaggi di programmazione prestano scarsa attenzione a questo aspetto e, di conseguenza, i programmi scritti in tali linguaggi si interrompono molto più spesso del necessario quando vengono introdotte nuove versioni delle librerie dipendenti.Many programming languages pay little attention to this issue, and, as a result, programs written in those languages break more often than necessary when newer versions of dependent libraries are introduced. Gli aspetti della progettazione di C# direttamente interessati dalle considerazioni sul controllo delle versioni includono quanto segue: modificatori virtual e override separati, regole per la risoluzione dell'overload dei metodi e supporto per le dichiarazioni esplicite dei membri di interfaccia.Aspects of C#’s design that were directly influenced by versioning considerations include the separate virtual and override modifiers, the rules for method overload resolution, and support for explicit interface member declarations.

Hello worldHello world

Il programma "Hello World" viene tradizionalmente usato per presentare un linguaggio di programmazione.The "Hello, World" program is traditionally used to introduce a programming language. Di seguito è riportato il programma Hello, World in C#:Here it is in C#:

using System;
class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}

I file di origine C# hanno in genere l'estensione .cs.C# source files typically have the file extension .cs. Supponendo che il programma "Hello World" sia archiviato nel file hello.cs, è possibile compilarlo usando la riga di comando:Assuming that the "Hello, World" program is stored in the file hello.cs, the program might be compiled using the command line:

csc hello.cs

In questo modo viene generato un assembly eseguibile denominato hello.exe.which produces an executable assembly named hello.exe. L'output prodotto dall'applicazione quando viene eseguita è il seguente:The output produced by this application when it is run is:

Hello, World

Importante

Il comando csc compila l'intero framework ed è possibile che non sia disponibile su tutte le piattaforme.The csc command compiles for the full framework, and may not be available on all platforms.

Il programma "Hello World" inizia con una direttiva using che fa riferimento allo spazio dei nomi System.The "Hello, World" program starts with a using directive that references the System namespace. Gli spazi dei nomi consentono di organizzare i programmi e le librerie C# in modo gerarchico.Namespaces provide a hierarchical means of organizing C# programs and libraries. Gli spazi dei nomi contengono tipi e altri spazi dei nomi. Lo stazio dei nomi System, ad esempio, contiene diversi tipi, come la classe Console a cui viene fatto riferimento nel programma, e altri spazi dei nomi, come IO e Collections.Namespaces contain types and other namespaces—for example, the System namespace contains a number of types, such as the Console class referenced in the program, and a number of other namespaces, such as IO and Collections. Una direttiva using che fa riferimento a un determinato spazio dei nomi consente l'uso non qualificato dei tipi che sono membri di tale spazio dei nomi.A using directive that references a given namespace enables unqualified use of the types that are members of that namespace. Grazie alla direttiva using, il programma può usare Console.WriteLine come sintassi abbreviata per System.Console.WriteLine.Because of the using directive, the program can use Console.WriteLine as shorthand for System.Console.WriteLine.

La classe Hello dichiarata dal programma "Hello World" ha un solo membro, ovvero il metodo denominato Main.The Hello class declared by the "Hello, World" program has a single member, the method named Main. Il metodo Main viene dichiarato con il modificatore static.The Main method is declared with the static modifier. Mentre i metodi di istanza possono fare riferimento a una particolare istanza dell'oggetto contenitore usando la parola chiave this, i metodi statici operano senza riferimento a un determinato oggetto.While instance methods can reference a particular enclosing object instance using the keyword this, static methods operate without reference to a particular object. Per convenzione, un metodo statico denominato Main funge da punto di ingresso di un programma.By convention, a static method named Main serves as the entry point of a program.

L'output del programma viene prodotto dal metodo WriteLine della classe Console nello spazio dei nomi System.The output of the program is produced by the WriteLine method of the Console class in the System namespace. Questa classe viene fornita da librerie di classi standard a cui, per impostazione predefinita, fa automaticamente riferimento il compilatore.This class is provided by the standard class libraries, which, by default, are automatically referenced by the compiler.

Oltre quelli sopra riportati, rimangono da discutere altri numerosi aspetti del linguaggio C#.There's a lot more to learn about C#. Gli argomenti seguenti offrono una panoramica degli elementi del linguaggio C#.The following topics provide an overview of the elements of the C# language. Queste panoramiche offrono informazioni di base su tutti gli elementi del linguaggio C# e forniscono le informazioni necessarie per approfondire le caratteristiche di questi ultimi:These overviews will provide basic information about all elements of the language and give you the information necessary to dive deeper into elements of the C# language:

  • Struttura del programmaProgram Structure
    • Vengono descritti i concetti organizzativi chiave di C#: programmi, spazi dei nomi, tipi, membri e assembly.Learn the key organizational concepts in the C# language: programs, namespaces, types, members, and assemblies.
  • Tipi e variabiliTypes and Variables
    • Vengono offerte informazioni sui tipi valore, i tipi riferimento e le variabili del linguaggio C#.Learn about value types, reference types, and variables in the C# language.
  • EspressioniExpressions
    • Le espressioni sono costituite da operandi e operatoriExpressions are constructed from operands and operators. e producono un valore.Expressions produce a value.
  • IstruzioniStatements
    • Le istruzioni consentono di esprimere le azioni di un programma.You use statements to express the actions of a program.
  • Classi e oggettiClasses and objects
    • Le classi sono i tipi C# più importanti.Classes are the most fundamental of C#'s types. Gli oggetti sono istanze di una classe.Objects are instances of a class. Le classi vengono create usando membri, descritti più avanti in questo argomento.Classes are built using members, which are also covered in this topic.
  • StructStructs
    • Le struct sono strutture dati che, a differenza delle classi, sono tipi valore.Structs are data structures that, unlike classes, are value types.
  • MatriciArrays
    • Una matrice è una struttura di dati contenente una serie di variabili accessibili tramite indici calcolati.An array is a data structure that contains a number of variables that are accessed through computed indices.
  • InterfacceInterfaces
    • Un'interfaccia definisce un contratto che può essere implementato da classi e struct.An interface defines a contract that can be implemented by classes and structs. Può contenere metodi, proprietà, eventi e indicizzatori.An interface can contain methods, properties, events, and indexers. Un'interfaccia non fornisce le implementazioni dei membri che definisce, ma specifica semplicemente i membri che devono essere forniti dalle classi o dai tipi struct che la implementano.An interface does not provide implementations of the members it defines—it merely specifies the members that must be supplied by classes or structs that implement the interface.
  • EnumerazioniEnums
    • Un tipo enum è un tipo valore distinto con un set di costanti denominate.An enum type is a distinct value type with a set of named constants.
  • DelegatiDelegates
    • Un tipo delegato rappresenta riferimenti ai metodi con un elenco di parametri e un tipo restituito particolari.A delegate type represents references to methods with a particular parameter list and return type. I delegati consentono di trattare i metodi come entità che è possibile assegnare a variabili e passare come parametri.Delegates make it possible to treat methods as entities that can be assigned to variables and passed as parameters. I delegati sono simili al concetto di puntatori a funzione disponibili in altri linguaggi. A differenza dei puntatori a funzione, tuttavia, i delegati sono orientati agli oggetti e indipendenti dai tipi.Delegates are similar to the concept of function pointers found in some other languages, but unlike function pointers, delegates are object-oriented and type-safe.
  • AttributiAttributes
    • Gli attributi consentono ai programmi di specificare informazioni dichiarative aggiuntive sui tipi, i membri e altre entità.Attributes enable programs to specify additional declarative information about types, members, and other entities.