C# データ型
C# では、変数は以下のいくつかの型に分けられます:
- 値型(Value types)
- 参照型(Reference types)
- ポインタ型(Pointer types)
値型(Value types)
値型の変数は直接値を割り当てることができます。これらはクラスからSystem.ValueType派生しています。
値型はデータを直接含みます。例えばint、char、float、それらはそれぞれ数値、文字、浮動小数点数を格納します。型を宣言すると、intシステムは値を格納するためにメモリを割り当てます。
次の表は、C# 2010 で使用可能な値型の一覧です:
| 型 | 説明 | 範囲 | 既定値 |
|---|---|---|---|
| bool | ブール値 | True または False | False |
| byte | 8 ビット符号なし整数 | 0 から 255 | 0 |
| char | 16 ビット Unicode 文字 | U+0000 から U+ffff | '\0' |
| decimal | 128 ビットの高精度10進値、有効桁数 28-29 | (-7.9 x 1028から 7.9 x 1028) / 100 から 28 | 0.0M |
| double | 64 ビット倍精度浮動小数点型 | (+/-)5.0 x 10-324から (+/-)1.7 x 10308 | 0.0D |
| float | 32 ビット単精度浮動小数点型 | -3.4 x 1038から + 3.4 x 1038 | 0.0F |
| int | 32 ビット符号付き整数型 | -2,147,483,648 から 2,147,483,647 | 0 |
| long | 64 ビット符号付き整数型 | -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 | 0L |
| sbyte | 8 ビット符号付き整数型 | -128 から 127 | 0 |
| short | 16 ビット符号付き整数型 | -32,768 から 32,767 | 0 |
| uint | 32 ビット符号なし整数型 | 0 から 4,294,967,295 | 0 |
| ulong | 64 ビット符号なし整数型 | 0 から 18,446,744,073,709,551,615 | 0 |
| ushort | 16 ビット符号なし整数型 | 0 から 65,535 | 0 |
型または変数の特定プラットフォームでの正確なサイズを取得するには、sizeofメソッドを使用します。式sizeof(type)オブジェクトまたは型の保存サイズをバイト単位で生成します。以下に任意のマシンでのint型の保存サイズを取得する例を示します:
例
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;
ポインタ型については、「安全でないコード」の章で説明します。
その他の拡張