C# には事前定義された組み込み型が16種類用意されており、単純型13種と非単純型3種に分かれます。すべての事前定義型の名前は小文字で記述するルールです。
graph TD
A[事前定義型] --> B[単純型]
A --> C[object]
A --> D[string]
A --> E[dynamic]
B --> F[非数値型]
B --> G[数値型]
F --> H[bool]
F --> I[char]
G --> J[整数型]
G --> K[浮動小数点型]
J --> L[8ビット]
J --> M[16ビット]
J --> N[32ビット]
J --> O[64ビット]
L --> P[sbyte]
L --> Q[byte]
M --> R[short]
M --> S[ushort]
N --> T[int]
N --> U[uint]
O --> V[long]
O --> W[ulong]
K --> X[decimal]
K --> Y[float]
K --> Z[double]
%% リーフノードを緑色に設定
style H fill:#90ee90
style I fill:#90ee90
style P fill:#90ee90
style Q fill:#90ee90
style R fill:#90ee90
style S fill:#90ee90
style T fill:#90ee90
style U fill:#90ee90
style V fill:#90ee90
style W fill:#90ee90
style X fill:#90ee90
style Y fill:#90ee90
style Z fill:#90ee90
style C fill:#90ee90
style D fill:#90ee90
style E fill:#90ee90単純型 13種
- 数値型(計11種) 整数8種:
sbyte/byte、short/ushort、int/uint、long/ulong;浮動小数点3種:float、double、decimal(decimalは金額計算など高精度演算専用) - 非数値型(計2種):
char(Unicode文字1文字)、bool(trueまたはfalseのみ保持)
特徴:C#では数値をそのまま真偽判定に使用できません。これはC/C++との大きな違いです。
非単純参照型 3種
string(文字の並び)、object(すべての型の基底クラス)、dynamic(動的言語との相互運用用)
C#型と.NET型の関係
すべての事前定義型は基盤となる.NET型に一対一で対応します。C#の型キーワードは.NET型の別名に過ぎないため、.NET本来のクラス名を直接記述してもコンパイルは通りますが、公式コーディング規約では推奨されていません。C#コードを記述する際は、.NETの完全クラス名ではなくC#の組み込みキーワードを優先して使いましょう。
事前定義 単純型一覧
| C#キーワード | 説明 | 値の範囲 | 対応.NET型 | デフォルト値 |
|---|---|---|---|---|
| sbyte | 8ビット符号付き整数 | -128 ~ 127 | System.SByte | 0 |
| byte | 8ビット符号なし整数 | 0 ~ 255 | System.Byte | 0 |
| short | 16ビット符号付き整数 | -32768 ~ 32767 | System.Int16 | 0 |
| ushort | 16ビット符号なし整数 | 0 ~ 65535 | System.UInt16 | 0 |
| int | 32ビット符号付き整数 | -2147483648 ~ 2147483647 | System.Int32 | 0 |
| uint | 32ビット符号なし整数 | 0 ~ 4294967295 | System.UInt32 | 0 |
| long | 64ビット符号付き整数 | -9223372036854775808 ~ 9223372036854775807 | System.Int64 | 0 |
| ulong | 64ビット符号なし整数 | 0 ~ 18446744073709551615 | System.UInt64 | 0 |
| float | 単精度浮動小数点 | 1.5×10⁻⁴⁵ ~ 3.4×10³⁸ | System.Single | 0.0f |
| double | 倍精度浮動小数点 | 5×10⁻³²⁴ ~ 1.7×10³⁰⁸ | System.Double | 0.0d |
| bool | 真偽型 | true / false | System.Boolean | false |
| char | Unicode文字 | U+0000 ~ U+FFFF | System.Char | \x0000(ヌル文字) |
| decimal | 高精度10進数(有効数字28桁) | ±1.0×10⁻²⁸ ~ ±7.9×10²⁸ | System.Decimal | 0m |
事前定義 非単純型一覧
| C#キーワード | 説明 | 対応.NET型 |
|---|---|---|
| object | 単純値型を含むすべての型の基底クラス | System.Object |
| string | 0文字以上のUnicode文字で構成される文字列 | System.String |
| dynamic | 動的言語アセンブリと連携する動的型 | 固定の.NET型に対応しない |
int = System.Int32、string = System.String は完全に等価で、コンパイラが自動的に相互に認識します;
コーディング規約ではC#キーワード(Int32ではなくint)の使用を強く推奨し、コード可読性を高めます。
単純型は値型(Value Type)とも呼ばれます
単一の値を保持し、スタックメモリに確保されます;
宣言時に明示的に値を代入しない場合、表に記載のデフォルト値が自動的に割り当てられます;
すべて直接 object を継承し、ボックス化・アンボックス化操作に対応します。(後述します)
整数型シリーズ
- 先頭に
uが付く型(uint/ushort/ulong/byte):符号なし、0以上の数値のみ格納可能; - sbyte/short/int/long:符号付き、正負の整数を保持できます。
浮動小数点型シリーズ
float:単精度、接尾辞f。精度は低いが演算が高速で、グラフィックスや3D計算に適します;double:倍精度、接尾辞d。リテラルの既定浮動小数点型で、汎用的な科学計算に使用;decimal:高精度10進数、接尾辞m。金融・通貨計算向けに設計され、浮動小数点の精度欠損が発生しません。
真偽型と文字型
bool:値は2種類のみ、数値との暗黙的型変換は許可されません;char:Unicode文字を1文字保持、内部的には16ビット符号なし整数として扱われます。
非単純型(参照型 Reference Type)
- object:すべての型のルート基底クラス。すべての値型・参照型が派生し、ボックス化の中核を担う;
- string:特殊な参照型で文字列は不変。空文字列
""は正当なデフォルトインスタンス; - dynamic:コンパイル時に型検証を行わず、実行時にメンバー解決。固定の.NET型に対応せず、Python/Rubyなど動的言語との連携に多用。コンパイル時の安全性を犠牲に柔軟性を得る。
static void Main(string[] args)
{
// 1. 8ビット整数
sbyte sByteNum = -60;
byte byteNum = 200;
// 2. 16ビット整数
short shortNum = -12000;
ushort uShortNum = 50000;
// 3. 32ビット整数
int intNum = -888888;
uint uIntNum = 3000000000U;
// 4. 64ビット整数
long longNum = -7000000000000L;
ulong uLongNum = 12000000000000000UL;
// 5. 浮動小数点型
float floatNum = 3.14f;
double doubleNum = 2.71828;
decimal decMoney = 999.99m;
// 6. 真偽型
bool flag = true;
// 7. Unicode文字
char ch = 'A';
// 8. 事前定義非単純型
object obj = 123;
string str = "FOXDEVELOP.COM";
dynamic dy = "jack";
}Code language: JavaScript (javascript)
組み込み型