C# データ型

C# では、変数は以下のいくつかの型に分けられます:

  • 値型(Value types)
  • 参照型(Reference types)
  • ポインタ型(Pointer types)

値型(Value types)

値型の変数は直接値を割り当てることができます。これらはクラスからSystem.ValueType派生しています。

値型はデータを直接含みます。例えばint、char、float、それらはそれぞれ数値、文字、浮動小数点数を格納します。型を宣言すると、intシステムは値を格納するためにメモリを割り当てます。

次の表は、C# 2010 で使用可能な値型の一覧です:

型説明範囲既定値
boolブール値True または FalseFalse
byte8 ビット符号なし整数0 から 2550
char16 ビット Unicode 文字U+0000 から U+ffff'\0'
decimal128 ビットの高精度10進値、有効桁数 28-29(-7.9 x 1028から 7.9 x 1028) / 100 から 28 0.0M
double64 ビット倍精度浮動小数点型(+/-)5.0 x 10-324から (+/-)1.7 x 103080.0D
float32 ビット単精度浮動小数点型-3.4 x 1038から + 3.4 x 10380.0F
int32 ビット符号付き整数型-2,147,483,648 から 2,147,483,6470
long64 ビット符号付き整数型-9,223,372,036,854,775,808 から 9,223,372,036,854,775,8070L
sbyte8 ビット符号付き整数型-128 から 1270
short16 ビット符号付き整数型-32,768 から 32,7670
uint32 ビット符号なし整数型0 から 4,294,967,2950
ulong64 ビット符号なし整数型0 から 18,446,744,073,709,551,6150
ushort16 ビット符号なし整数型0 から 65,5350

型または変数の特定プラットフォームでの正確なサイズを取得するには、sizeofメソッドを使用します。式sizeof(type)オブジェクトまたは型の保存サイズをバイト単位で生成します。以下に任意のマシンでのint型の保存サイズを取得する例を示します:

例

using System;

namespace DataTypeApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Console.WriteLine("Size of int: {0}", sizeof(int));
         Console.ReadLine();
      }
   }
}

上記のコードがコンパイルおよび実行されると、次の結果が生成されます:

Size of int: 4

参照型(Reference types)

参照型には、変数に格納された実際のデータは含まれませんが、変数への参照が含まれます。

言い換えれば、それらはメモリ位置を指します。複数の変数を使用する場合、参照型は1つのメモリ位置を指すことができます。メモリ位置のデータが1つの変数によって変更されると、他の変数も自動的にこの値の変更を反映します。組み込みの参照型は次のとおりです:object、dynamicとstring。

オブジェクト(Object)型

オブジェクト(Object)型は、C# 共通型システム(Common Type System - CTS)におけるすべてのデータ型の最終的な基底クラスです。Object は System.Object クラスの別名です。したがって、オブジェクト(Object)型には、他の任意の型(値型、参照型、定義済み型、ユーザー定義型)の値を割り当てることができます。ただし、値を割り当てる前に、型変換を行う必要があります。

値型がオブジェクト型に変換される場合、これはボックス化と呼ばれます。一方、オブジェクト型が値型に変換される場合、これはボックス化解除。

object obj;
obj = 100; // 这是装箱

動的(Dynamic)型

動的データ型変数には、任意の型の値を格納できます。これらの変数の型チェックは実行時に行われます。

動的型を宣言する構文:

dynamic <variable_name> = value;

例:

dynamic d = 20;

動的型はオブジェクト型に似ていますが、オブジェクト型変数の型チェックはコンパイル時に行われ、動的型変数の型チェックは実行時に行われます。

文字列(String)型

文字列(String)型を使用すると、変数に任意の文字列値を割り当てることができます。文字列(String)型は System.String クラスの別名です。これはオブジェクト(Object)型から派生しています。文字列(String)型の値は、引用符と @引用符の2つの形式で割り当てることができます。

例:

String str = "example.com";

@引用符文字列:

@"example.com";

C# string 文字列の前には @(「逐語的文字列」と呼ばれる)を付けることができ、エスケープ文字(\)を通常の文字として扱います。例:

string str = @"C:\Windows";

次と同等です:

string str = "C:\\Windows";

@ 文字列は任意の場所で改行でき、改行文字とインデントのスペースは文字列の長さに含まれます。

string str = @"<script type=""text/javascript"">
    <!--
    -->
</script>";

ユーザー定義の参照型には、class、interface、delegate があります。これらの型については後の章で説明します。

ポインタ型(Pointer types)

ポインタ型変数は、別の型のメモリアドレスを格納します。C# のポインタは、C または C++ のポインタと同じ機能を持ちます。

ポインタ型を宣言する構文:

type* identifier;

例:

char* cptr;
int* iptr;

ポインタ型については、「安全でないコード」の章で説明します。

その他の拡張