Tipi valore (Riferimenti per C#)Value types (C# Reference)

Esistono due tipi di tipi valore:There are two kinds of value types:

Funzionalità principali dei tipi valoreMain features of value types

Una variabile di un tipo valore contiene un valore del tipo.A variable of a value type contains a value of the type. Ad esempio, una variabile del tipo int potrebbe contenere il valore 42.For example, a variable of the int type might contain the value 42. Questo comportamento è diverso rispetto a una variabile di un tipo riferimento, che contiene un riferimento a un'istanza del tipo, noto anche come oggetto.This differs from a variable of a reference type, which contains a reference to an instance of the type, also known as an object. Quando si assegna un nuovo valore a una variabile di un tipo valore, viene copiato quel valore.When you assign a new value to a variable of a value type, that value is copied. Quando si assegna un nuovo valore a una variabile di un tipo riferimento, viene copiato il riferimento, non l'oggetto stesso.When you assign a new value to a variable of a reference type, the reference is copied, not the object itself.

Tutti i tipi valore sono derivati in modo implicito da System.ValueType.All value types are derived implicitly from the System.ValueType.

A differenza dei tipi riferimento, non è possibile derivare un nuovo tipo da un tipo valore.Unlike with reference types, you cannot derive a new type from a value type. Tuttavia, come i tipi riferimento, gli struct possono implementare interfacce.However, like reference types, structs can implement interfaces.

Le variabili del tipo valore non possono essere null per impostazione predefinita.Value type variables cannot be null by default. Tuttavia, le variabili dei tipi valore Nullable corrispondenti possono essere null.However, variables of the corresponding nullable value types can be null.

Ogni tipo valore ha un costruttore senza parametri implicito che inizializza il valore predefinito del tipo.Each value type has an implicit parameterless constructor that initializes the default value of that type. Per informazioni sui valori predefiniti dei tipi valore, vedere Tabella dei valori predefiniti.For information about default values of value types, see Default values table.

Tipi sempliciSimple types

I tipi semplici sono un set di tipi struct predefiniti forniti da C# e comprendono i tipi seguenti:The simple types are a set of predefined struct types provided by C# and comprise the following types:

I tipi semplici sono identificati tramite parole chiave, le quali sono in realtà semplicemente degli alias dei tipi struct predefiniti nello spazio dei nomi System.The simple types are identified through keywords, but these keywords are simply aliases for predefined struct types in the System namespace. Ad esempio, int è un alias di System.Int32.For example, int is an alias of System.Int32. Per un elenco completo degli alias, vedere Tabella dei tipi incorporati.For a complete list of aliases, see Built-in types table.

I tipi semplici si differenziano da altri tipi struct in quanto permettono alcune operazioni aggiuntive:The simple types differ from other struct types in that they permit certain additional operations:

  • I tipi semplici possono essere inizializzati mediante valori letterali.Simple types can be initialized by using literals. Ad esempio, 'A' è un valore letterale del tipo char e 2001 è un valore letterale del tipo int.For example, 'A' is a literal of the type char and 2001 is a literal of the type int.

  • È possibile dichiarare costanti dei tipi semplici con la parola chiave const.You can declare constants of the simple types with the const keyword. Non sono ammesse costanti di altri tipi struct.It's not possible to have constants of other struct types.

  • Le espressioni costanti, in cui tutti gli operandi sono costanti di tipo semplice, vengono valutate in fase di compilazione.Constant expressions, whose operands are all simple type constants, are evaluated at compile time.

Per altre informazioni, vedere la sezione Tipi semplici nella specifica del linguaggio C#.For more information, see the Simple types section of the C# language specification.

Inizializzazione dei tipi valoreInitializing value types

Le variabili locali in C# devono essere inizializzate prima di poter essere usate.Local variables in C# must be initialized before they are used. È ad esempio possibile dichiarare una variabile locale senza inizializzazione, come nell'esempio seguente:For example, you might declare a local variable without initialization as in the following example:

int myInt;

Non è possibile usarla prima di averla inizializzata.You cannot use it before you initialize it. È possibile inizializzarla mediante l'istruzione seguente:You can initialize it using the following statement:

myInt = new int();  // Invoke parameterless constructor for int type.

Questa istruzione è equivalente all'istruzione seguente:This statement is equivalent to the following statement:

myInt = 0;         // Assign an initial value, 0 in this example.

Naturalmente, è possibile inserire la dichiarazione e l'inizializzazione nella stessa istruzione, come negli esempi seguenti:You can, of course, have the declaration and the initialization in the same statement as in the following examples:

int myInt = new int();

- oppure -–or–

int myInt = 0;

Usando l'operatore new, viene chiamato il costruttore senza parametri del tipo specifico e viene assegnato il valore predefinito alla variabile.Using the new operator calls the parameterless constructor of the specific type and assigns the default value to the variable. Nell'esempio precedente il costruttore senza parametri ha assegnato il valore 0 a myInt.In the preceding example, the parameterless constructor assigned the value 0 to myInt. Per altre informazioni sui valori assegnati chiamando i costruttori senza parametri, vedere Tabella dei valori predefiniti.For more information about values assigned by calling parameterless constructors, see Default values table.

Con i tipi definiti dall'utente, usare new per richiamare il costruttore senza parametri.With user-defined types, use new to invoke the parameterless constructor. Ad esempio, l'istruzione seguente richiama il costruttore senza parametri dello struct Point:For example, the following statement invokes the parameterless constructor of the Point struct:

var p = new Point(); // Invoke parameterless constructor for the struct.

Dopo questa chiamata, lo struct viene considerato definitivamente assegnato, ovvero tutti i relativi membri sono inizializzati sui valori predefiniti.After this call, the struct is considered to be definitely assigned; that is, all its members are initialized to their default values.

Per altre informazioni sull'operatore new, vedere new.For more information about the new operator, see new.

Per informazioni sulla formattazione dell'output dei tipi numerici, vedere Tabella di formattazione dei risultati numerici.For information about formatting the output of numeric types, see Formatting numeric results table.

Vedere ancheSee also