2009-07-23 10 views

答えて

7

すべての構造体、列挙型およびネイティブ型は値型です。

実行時に、あなたは次のようにチェックすることができます完全にあなたの言語/ランタイムに依存

Type type = typeof(TypeName); 

if (type.IsValueType) 
{ 
    //... 
} 
+2

.net世界でのみ。 –

+0

非常に良い点:-) –

4

文字列は値型ではありません。ここで

は、最も一般的に使用さvalue typesのリストです:

  • ブール値(可能System.Boolean)
  • バイト(System.Byte)
  • CHAR(のSystem.Char)
  • 進( System.Decimal)
  • double(System.Double)
  • float(System.Single)
  • INT(可能System.Int32)
  • 長い(System.Int64)
  • sbyte(System.SByte)
  • 短い(のSystem.Int16)
  • UINT(可能System.UInt32)
  • ULONG(システム。これらのほかに可能System.DateTime

UInt64型)

  • USHORT(System.UInt16)
    • 列挙
    • すべての他のタイプは、参照型である構造体

    である任意のタイプである任意の種類は。

  • +0

    コメントを読んで、DateTimeは値の種類です。それはどういう意味ですか? DateTime dt = new DateTime ありがとう – odiseh

    +3

    特定の型にリテラルがあるかどうかは、値/参照型を混同していると思います。文字列には初期化に使用できる文字列リテラルがありますが、値型ではありません。 DateTimeにはリテラルはありませんが、値型です。つまり、関数にパラメータとしてDateTimeを渡すか、DateTime datetime1 = datetime2と書くと、両方のdatetimeが同じオブジェクトを参照するのではなく、実際に値がコピーされます。 –

    +0

    タルの話はまったく正しい。リテラルを取得するかしないかの選択は、完全に言語に依存します。値タイプではないものは、CLI自体によって定義されます。例えば、VBはDateTimeリテラルを持っています。リストやハッシュリテラル(boo、IronPython、IronRuby)を持つこともできますが、それらは依然として参照型です。 –

    関連する問題