組み込み型

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型デフォルト値
sbyte8ビット符号付き整数-128 ~ 127System.SByte0
byte8ビット符号なし整数0 ~ 255System.Byte0
short16ビット符号付き整数-32768 ~ 32767System.Int160
ushort16ビット符号なし整数0 ~ 65535System.UInt160
int32ビット符号付き整数-2147483648 ~ 2147483647System.Int320
uint32ビット符号なし整数0 ~ 4294967295System.UInt320
long64ビット符号付き整数-9223372036854775808 ~ 9223372036854775807System.Int640
ulong64ビット符号なし整数0 ~ 18446744073709551615System.UInt640
float単精度浮動小数点1.5×10⁻⁴⁵ ~ 3.4×10³⁸System.Single0.0f
double倍精度浮動小数点5×10⁻³²⁴ ~ 1.7×10³⁰⁸System.Double0.0d
bool真偽型true / falseSystem.Booleanfalse
charUnicode文字U+0000 ~ U+FFFFSystem.Char\x0000(ヌル文字)
decimal高精度10進数(有効数字28桁)±1.0×10⁻²⁸ ~ ±7.9×10²⁸System.Decimal0m

事前定義 非単純型一覧

C#キーワード説明対応.NET型
object単純値型を含むすべての型の基底クラスSystem.Object
string0文字以上のUnicode文字で構成される文字列System.String
dynamic動的言語アセンブリと連携する動的型固定の.NET型に対応しない

intSystem.Int32stringSystem.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)

  1. object:すべての型のルート基底クラス。すべての値型・参照型が派生し、ボックス化の中核を担う;
  2. string:特殊な参照型で文字列は不変。空文字列""は正当なデフォルトインスタンス;
  3. 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)

組み込み型

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です