C#データ型完全ガイド:値型、参照型、ポインタ型
C#の変数は、以下のタイプに分類されます。
- 値型
- 参照型
- ポインタ型
値型
値型変数には直接値を代入できます。これらは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 | 28-29桁の精度を持つ128ビット精密10進数値 | (-7.9×1028~7.9×1028)/100~28 | 0.0M |
| double | 64ビット倍精度浮動小数点型 | (±)5.0×10-324~(±)1.7×10308 | 0.0D |
| float | 32ビット単精度浮動小数点型 | -3.4×1038~+3.4×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型のサイズを取得する例です。
ライブデモ 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
参照型
参照型は、変数に格納されている実際のデータを含みませんが、変数への参照を含みます。
言い換えると、メモリ位置を参照します。複数の変数を使用して、参照型はメモリ位置を参照できます。メモリ位置のデータが変数の1つによって変更されると、他の変数は自動的にこの値の変化を反映します。組み込み参照型の例:object、dynamic、string。
Object型
Object型は、C# Common Type System(CTS)におけるすべてのデータ型の究極の基底クラスです。ObjectはSystem.Objectクラスのエイリアスです。オブジェクト型には、値型、参照型、事前定義型、ユーザー定義型など、他の型の値を代入できます。ただし、値を代入する前に型変換が必要です。
値型がオブジェクト型に変換されることをボクシングと呼び、逆にオブジェクト型が値型に変換されることをアンボクシングと呼びます。
object obj; obj = 100; // これはボクシング
Dynamic型
動的データ型の変数には、あらゆる型の値を格納できます。これらの型の変数の型チェックは実行時に行われます。
動的型の宣言構文は以下の通りです。
dynamic= value;
例えば、
dynamic d = 20;
動的型はオブジェクト型に似ていますが、オブジェクト型変数の型チェックはコンパイル時に行われるのに対し、動的型変数の型チェックは実行時に行われます。
String型
String型を使用すると、変数に任意の文字列値を代入できます。string型はSystem.Stringクラスのエイリアスです。オブジェクト型から派生しています。文字列型の値は、引用符付きと@引用符付きの2形式の文字列リテラルで代入できます。
例えば、
String str = "Tutorials Point";
@引用符付き文字列リテラルは以下のようになります。
@"Tutorials Point";
ユーザー定義参照型は、class、interface、delegateです。これらについては後の章で説明します。
ポインタ型
ポインタ型変数は、別の型のメモリアドレスを格納します。C#のポインタは、CやC++のポインタと同じ機能を持ちます。
ポインタ型の宣言構文は以下の通りです。
type* identifier;
例えば、
char* cptr; int* iptr;
ポインタ型については「アンセーフコード」の章で説明します。
C言語
- ファスナー用スロットドライブ4大タイプ:スロット・クロス・コインスロット・ハイトルク
- 熱電対の解説:種類、温度範囲、性能比較
- C# 変数とプリミティブデータ型:完全マスターガイド
- C#型変換完全ガイド:暗黙・明示的変換、Parse、Convertクラス
- C++データ型完全ガイド:基本型、修飾子、ベストプラクティス
- C言語データ型完全解説:int、float、charなど
- C++ char型をマスター:宣言、ASCII、変換テクニック
- Python データ型マスター: 実践ガイド
- Python 型変換とキャスト: 包括的ガイド
- Javaプリミティブデータ型:例付き完全ガイド
- Java型キャスト完全ガイド:拡大変換から縮小変換まで