英語で読む

次の方法で共有


ValueType クラス

定義

値型の基本クラスを提供します。

public abstract class ValueType
[System.Serializable]
public abstract class ValueType
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class ValueType
継承
ValueType
派生
属性

注釈

ValueType は、Object の仮想メソッドを、値型のより適切な実装でオーバーライドします。 ValueTypeから継承する Enumも参照してください。

データ型は、値型と参照型に分割されます。 値型は、スタック割り当てまたは構造体内でインラインで割り当てられます。 参照型はヒープ割り当てです。 参照型と値型の両方が、最終的な基底クラス Objectから派生します。 値型がオブジェクトのように動作する必要がある場合は、値型を参照オブジェクトのように見せるラッパーがヒープに割り当てられ、値型の値がコピーされます。 ラッパーは、値型が含まれていることをシステムが認識できるようにマークされます。 このプロセスはボックス化と呼ばれ、逆のプロセスはボックス化解除と呼ばれます。 ボックス化とボックス化解除を使用すると、任意の型をオブジェクトとして扱えます。

ValueType は値型の暗黙的な基底クラスですが、ValueType から直接継承するクラスを作成することはできません。 代わりに、個々のコンパイラは、値型の作成をサポートする言語キーワードまたはコンストラクト (C# の struct や Visual Basic の ...End StructureStructureなど) を提供します。

.NET Framework の値型の基底クラスとして機能する以外に、ValueType 構造体は通常、コードで直接使用されません。 ただし、メソッド呼び出しのパラメーターとして使用して、すべてのオブジェクトではなく、可能な引数を値型に制限したり、メソッドがさまざまな値型を処理できるようにしたりできます。 次の例は、ValueType が参照型をメソッドに渡さないようにする方法を示しています。 Utility という名前のクラスを定義します。このクラスには、引数が数値かどうかを示す IsNumericという 4 つのメソッドが含まれています。IsInteger。引数が整数かどうかを示します。IsFloat。引数が浮動小数点数であるかどうかを示します。と Compare。2 つの数値の関係を示します。 いずれの場合も、メソッド パラメーターは ValueType型であり、参照型はメソッドに渡されません。

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 クラスのメソッドの呼び出しを示しています。

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

こちらもご覧ください