Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe ValueType

 

Data di pubblicazione: ottobre 2016

Fornisce la classe base per i tipi di valore.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.ValueType
    System.Enum

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class ValueType

NomeDescrizione
System_CAPS_protmethodValueType()

Inizializza una nuova istanza della classe ValueType.

NomeDescrizione
System_CAPS_pubmethodEquals(Object)

Indica se questa istanza e un oggetto specificato sono uguali.(Esegue l'override di Object.Equals(Object).)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetHashCode()

Restituisce il codice hash per questa istanza. (Esegue l'override di Object.GetHashCode().)

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodToString()

Restituisce il nome completo del tipo di questa istanza.(Esegue l'override di Object.ToString().)

ValueType esegue l'override dei metodi virtuali da Object con implementazioni più appropriate per i tipi di valore. Vedere anche Enum, che eredita da ValueType.

Tipi di dati vengono suddivisi in tipi di valore e tipi di riferimento. Tipi di valore sono allocati inline in una struttura o allocato dallo stack. Tipi di riferimento sono allocate dall'heap. Tipi di riferimento e di valore sono derivati dalla classe base finale Object. Nei casi in cui è necessario che un tipo di valore si comporta come un oggetto, un wrapper che rende il tipo di valore come un oggetto di riferimento viene allocato nell'heap e il valore del tipo di valore viene copiato. Il wrapper è contrassegnato in modo da informare il sistema che contiene un tipo di valore. Questo processo è noto come conversione boxing, e il processo è noto come conversione unboxing. Conversione boxing e unboxing consentire qualsiasi tipo di essere considerato come un oggetto.

Anche se ValueType è la classe base implicita per i tipi di valore, non è possibile creare una classe che eredita da ValueType direttamente. Al contrario, i singoli compilatori forniscono una parola chiave language o creare (ad esempio struct in c# e Structure...End Structure in Visual Basic) per supportare la creazione di tipi di valore.

A parte che funge da classe base per i tipi di valore in .NET Framework, il ValueType struttura non viene in genere utilizzata direttamente nel codice. Tuttavia, può essere utilizzato come parametro nelle chiamate al metodo per limitare i possibili argomenti ai tipi di valore anziché tutti gli oggetti o per consentire a un metodo per gestire un numero di tipi di valore diverso. Nell'esempio seguente viene illustrato come ValueType impedisce che i tipi di riferimento passati a metodi. Definisce una classe denominata Utility che contiene quattro metodi: IsNumeric, che indica se il relativo argomento è un numero; IsInteger, che indica se il relativo argomento è un intero; IsFloat, che indica se il relativo argomento è un numero a virgola mobile e Compare, che indica la relazione tra due valori numerici. In ogni caso, i parametri del metodo sono di tipo ValueType, ai tipi di riferimento vengono impediti passati ai metodi.

using System;
using System.Numerics;


public class Utility
{
   public enum NumericRelationship {
      GreaterThan = 1, 
      EqualTo = 0,
      LessThan = -1
   };

   public static NumericRelationship Compare(ValueType value1, ValueType value2)
   {
      if (! IsNumeric(value1)) 
         throw new ArgumentException("value1 is not a number.");
      else if (! IsNumeric(value2))
         throw new ArgumentException("value2 is not a number.");

      // Use BigInteger as common integral type
      if (IsInteger(value1) && IsInteger(value2)) {
         BigInteger bigint1 = (BigInteger) value1;
         BigInteger bigint2 = (BigInteger) value2;
         return (NumericRelationship) BigInteger.Compare(bigint1, bigint2);
      }
      // At least one value is floating point; use Double.
      else {
         Double dbl1 = 0;
         Double dbl2 = 0;
         try {
            dbl1 = Convert.ToDouble(value1);
         }
         catch (OverflowException) {
            Console.WriteLine("value1 is outside the range of a Double.");
         }
         try {
            dbl2 = Convert.ToDouble(value2);
         }
         catch (OverflowException) {
            Console.WriteLine("value2 is outside the range of a Double.");
         }
         return (NumericRelationship) dbl1.CompareTo(dbl2);
      }
   }

   public static bool IsInteger(ValueType value)
   {         
      return (value is SByte || value is Int16 || value is Int32 
              || value is Int64 || value is Byte || value is UInt16  
              || value is UInt32 || value is UInt64 
              || value is BigInteger); 
   }

   public static bool IsFloat(ValueType value) 
   {         
      return (value is float | value is double | value is Decimal);
   }

   public static bool IsNumeric(ValueType value)
   {
      return (value is Byte ||
              value is Int16 ||
              value is Int32 ||
              value is Int64 ||
              value is SByte ||
              value is UInt16 ||
              value is UInt32 ||
              value is UInt64 ||
              value is BigInteger ||
              value is Decimal ||
              value is Double ||
              value is Single);
   }
}

Nell'esempio seguente sono illustrate le chiamate ai metodi della Utility classe.

public class Example
{
   public static void Main()
   {
      Console.WriteLine(Utility.IsNumeric(12));
      Console.WriteLine(Utility.IsNumeric(true));
      Console.WriteLine(Utility.IsNumeric('c'));
      Console.WriteLine(Utility.IsNumeric(new DateTime(2012, 1, 1)));
      Console.WriteLine(Utility.IsInteger(12.2));
      Console.WriteLine(Utility.IsInteger(123456789));
      Console.WriteLine(Utility.IsFloat(true));
      Console.WriteLine(Utility.IsFloat(12.2));
      Console.WriteLine(Utility.IsFloat(12));
      Console.WriteLine("{0} {1} {2}", 12.1, Utility.Compare(12.1, 12), 12);
   }
}
// The example displays the following output:
//       True
//       False
//       False
//       False
//       False
//       True
//       False
//       True
//       False
//       12.1 GreaterThan 12

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: