閱讀英文

共用方式為


ValueType 類別

定義

提供實值型別的基類。

C#
public abstract class ValueType
C#
[System.Serializable]
public abstract class ValueType
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class ValueType
繼承
ValueType
衍生
屬性

備註

ValueType 會覆寫來自 Object 的虛擬方法,並針對實值型別使用更適當的實作。 另請參閱 Enum,其繼承自 ValueType

數據類型會分成實值型別和參考型別。 實值型別是堆疊配置的,或是在 結構中內嵌配置。 參考類型是堆積配置的。 參考和實值型別都是衍生自最終基類 Object。 如果實值型別的行為與對象類似,使實值型別看起來像在堆積上配置參考對象的包裝函式,而實值型別的值會複製到其中。 包裝函式會標示為讓系統知道它包含實值型別。 此程式稱為 Boxing,而反向進程稱為 Unboxing。 Boxing 和 unboxing 允許將任何類型視為 物件。

雖然 ValueType 是實值型別的隱含基類,但您無法建立直接繼承自 ValueType 的類別。 相反地,個別編譯程式會提供語言關鍵詞或建構(例如 C# 中的 struct 和 visual Basic 中的 Structure...End Structure),以支援建立實值型別。

除了做為 .NET Framework 中實值型別的基類之外,ValueType 結構通常不會直接用於程式代碼中。 不過,它可以做為方法呼叫中的參數,將可能自變數限制為實值型別,而不是所有物件,或允許方法處理數個不同的實值型別。 下列範例說明 ValueType 如何防止參考型別傳遞至方法。 它會定義名為 Utility 的類別,其中包含四種方法:IsNumeric,指出其自變數是否為數位;IsInteger,指出其自變數是否為整數;IsFloat,指出其自變數是否為浮點數;和 Compare,表示兩個數值之間的關聯性。 在每個案例中,方法參數的類型為 ValueType,而且無法將參考型別傳遞至方法。

C#
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);
   }
}

下列範例說明對 Utility 類別方法的呼叫。

C#
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

建構函式

ValueType()

初始化 ValueType 類別的新實例。

方法

Equals(Object)

指出這個實例和指定的物件是否相等。

GetHashCode()

傳回這個實例的哈希碼。

GetType()

取得目前實例的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
ToString()

傳回這個實例的完整型別名稱。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

另請參閱