Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

ValueType-Klasse

Stellt die Basisklasse für Werttypen bereit.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

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

Der ValueType-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsValueTypeInitialisiert eine neue Instanz der ValueType-Klasse.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsEqualsGibt an, ob diese Instanz und ein angegebenes Objekt gleich sind. (Überschreibt Object.Equals(Object).)
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetHashCodeGibt den Hashcode für diese Instanz zurück. (Überschreibt Object.GetHashCode().)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeUnterstützt von XNA FrameworkToStringGibt den voll qualifizierten Typnamen dieser Instanz zurück. (Überschreibt Object.ToString().)

In XNA Framework 3.0 wird dieser Member von Object geerbt.ToString().
Zum Seitenanfang

ValueType überschreibt die virtuellen Methoden von Object mit für Werttypen besser geeignete Implementierungen. Siehe auch Enum. Diese erbt von ValueType.

Datentypen werden in Werttypen und Referenztypen unterteilt. Werttypen werden entweder Stapeln oder inline in einer Struktur zugewiesen. Referenztypen werden Heaps zugewiesen. Verweis- und Werttypen werden von der letztendlichen Basisklasse Object abgeleitet. In Fällen, in denen ein Werttyp wie ein Objekt verwendet werden muss, wird im Heap ein Wrapper reserviert, der den Werttyp als Verweisobjekt darstellt. Anschließend wird der Werttyp in den Wrapper kopiert. Der Wrapper wird markiert, sodass das System erkennt, dass dieser einen Werttyp enthält. Dieser Vorgang wird als Boxing und der umgekehrte Vorgang wird als Unboxing bezeichnet. Boxing und Unboxing ermöglichen, dass jeder Typ als ein Objekt behandelt werden kann.

Obwohl ValueType die implizite Basisklasse für Werttypen ist, können Sie keine Klasse erstellen, die von ValueType erbt. Stattdessen stellen einzelne Compiler ein Schlüsselwort, oder das Konstrukt (wie struct in C# und Structure...End Structure im Visual Basic) in der Wertschöpfung zu unterstützen werden.

Die ValueType-Struktur dient zwar als Basisklasse für Werttypen in der .NET Framework, wird aber im Allgemeinen nicht direkt in Code verwendet. Es kann jedoch als Parameter in Methodenaufrufen verwendet werden, um mögliche Argumente auf Werttypen statt auf alle Objekte zu beschränken oder einer Methode zu erlauben, eine Reihe von verschiedenen Werttypen zu behandeln. Im folgenden Beispiel wird veranschaulicht, wie ValueType verhindert, dass Verweistypen an Methoden übergeben werden. Eine Klasse mit dem Namen Utility wird definiert, die vier Methoden enthält: IsNumeric, die angibt, ob das Argument eine Zahl ist; IsInteger, die angibt, ob das Argument eine ganze Zahl ist; IsFloat, die angibt, ob das Argument eine Gleitkommazahl ist und Compare, die die Beziehung zwischen zwei numerischen Werten angibt. In jedem Fall haben die Methodenparameter den Typ ValueType, und es wird verhindert, dass Verweistypen an die Methoden übergeben werden.


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("value1 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)
   {
      if ( ! (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))
            return false;
      else
         return true;
   }
}


Im folgenden Beispiel werden Aufrufe der Methoden der Utility-Klasse veranschaulicht.


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


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft