【C#】C#のデータ型完全ガイド - 基本から高度な型まで詳しく解説

PUBLISHED 2024-08-19

C#では、データを扱うためにさまざまな「データ型」が用意されています。それぞれのデータ型には役割があり、適切に使うことでプログラムの精度や効率が向上します。ここでは、基本的なデータ型から少し高度なデータ型まで、詳しくわかりやすく解説します。

この記事で学べること

  • 整数型(int, long, short, byte)の使い分け
  • 浮動小数点型(float, double, decimal)の精度と用途
  • 文字・文字列・真偽値の扱い方
  • 配列、列挙型、構造体などの複合データ型
  • クラス、インターフェース、デリゲートなどの参照型
  • 高度なデータ型(レコード、匿名型、ポインタ)

データ型の分類

C#のデータ型は大きく「値型」と「参照型」に分けられます。

分類特徴
値型変数に値そのものを格納int, double, bool, struct, enum
参照型変数にメモリアドレスを格納string, class, interface, delegate

基本的なデータ型

最初に、C#のプログラミングでよく使われる基本的なデータ型を紹介します。これらのデータ型は、数値や文字、真偽値など、プログラムの中で頻繁に使われるものです。

数値を扱うデータ型

整数型の比較

サイズ範囲用途例
byte8bit0 ~ 255色情報、小さな正の数
sbyte8bit-128 ~ 127小さな符号付き整数
short16bit-32,768 ~ 32,767小さな整数
ushort16bit0 ~ 65,535小さな正の整数
int32bit約±21億一般的な整数(最もよく使う)
uint32bit0 ~ 約42億正の整数のみ
long64bit約±9京大きな整数
ulong64bit0 ~ 約18京非常に大きな正の整数
int age = 25;              // 一般的な整数
long distance = 9876543210; // 大きな数値
short smallNumber = 32000;  // 小さな整数
byte colorValue = 255;      // バイト単位のデータ

小数を扱うデータ型

浮動小数点型の比較

サイズ精度用途サフィックス
float32bit約7桁グラフィックス、ゲームf
double64bit約15-16桁一般的な計算(デフォルト)d または省略可
decimal128bit約28-29桁金融計算、高精度が必要な場合m
float pi = 3.14f;                    // float型はサフィックス f が必要
double distance = 384400.0;          // 地球から月までの距離 (km)
decimal price = 19.99m;              // 金融計算にはdecimal型

注意: 金融計算では必ずdecimalを使用してください。floatdoubleは丸め誤差が発生する可能性があります。

真偽値を扱うデータ型

  • bool: true(真)か false(偽)という2つの値しか取らないデータ型です。条件分岐や論理演算に使います。

    bool isStudent = true;

文字と文字列を扱うデータ型

  • char: 単一の文字を表すデータ型です。例えば、'A''9' のように、1つの文字を扱います。

    char grade = 'A';
  • string: 複数の文字を連ねた文字列(テキスト)を扱います。例えば、名前やメッセージなどのテキストデータを保持するために使用します。

    string greeting = "Hello, World!";

日時を扱うデータ型

  • DateTime: 日付や時刻を表す型です。現在の日付や過去・未来の日付、時刻などを扱うときに使います。

    DateTime today = DateTime.Now;  // 現在の日付と時刻を取得
  • TimeSpan: 2つの日付や時刻の間隔を表します。たとえば、2時間30分のような時間の間隔を扱うことができます。

    TimeSpan duration = new TimeSpan(2, 30, 0);  // 2時間30分の時間差

データをまとめて扱う複合データ型

次に、複数の値やカスタムデータ型を扱うための便利な型を紹介します。これらの型を使うと、複数のデータをまとめて管理できます。

配列(複数のデータをまとめる)

配列は、同じ型のデータをまとめて管理するためのデータ型です。例えば、1つの配列に5つの整数をまとめて格納できます。

int[] numbers = { 1, 2, 3, 4, 5 };

名前付きの選択肢を定義する列挙型

列挙型は、決まった範囲内で選択肢を定義するために使います。例えば、曜日や季節のように、決まった選択肢を扱いたいときに便利です。

enum DaysOfWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }

自分でカスタムデータを定義する構造体

構造体は、複数のフィールドを持つカスタムデータ型です。値として扱われ、軽量で効率的です。座標や小さなデータセットを扱うときに便利です。

struct Point
{
    public int X;
    public int Y;
}

オブジェクトやクラスを扱う参照型

これらの型は、C#のオブジェクト指向プログラミング(OOP)の基本を成す型です。オブジェクトを使ってデータとそれに対する操作をまとめることができます。

クラス(オブジェクト指向プログラミングの基本)

クラスは、データ(プロパティ)と動作(メソッド)をまとめたオブジェクトを作成するための型です。クラスからは複数のオブジェクトを作成することができます。

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

インターフェース(メソッドやプロパティの契約)

インターフェースは、クラスや構造体が実装すべきメソッドやプロパティを定義します。これにより、異なるクラスが同じ操作を実行できるようになります。

interface IShape
{
    double CalculateArea();
}

デリゲート(メソッドへの参照)

デリゲートは、メソッドを他のメソッドに渡すことができる型です。イベント処理やコールバック関数でよく使用されます。

delegate void MessageHandler(string message);

より高度な場面で使うデータ型

これらの型は、より高度な操作やパフォーマンスを追求する場面で使われます。通常のプログラミングではあまり使わないかもしれませんが、特定のシナリオで役立ちます。

メモリ操作や特殊な用途に使う型

  1. ポインタ型 ポインタは、メモリのアドレスを直接扱うための型です。ただし、安全でないコード(アンセーフコード)として扱われます。

    unsafe
    {
        int* ptr = &someInteger;
    }
  2. 匿名型 匿名型は、名前を持たない一時的なデータ型で、LINQや簡易なデータ処理でよく使用されます。値を保持するだけの目的で使われます。

    var anonymous = new { Name = "John", Age = 30 };
  3. レコード型 レコード型は、イミュータブル(変更不可能)なデータ型で、データの不変性を保証しつつシンプルに定義できます。

    public record Person(string Name, int Age);

まとめ

C#には豊富なデータ型が用意されており、これらを適切に使い分けることで、効率的で型安全なプログラムを作成することができます。まずは基本的なデータ型から始めて、徐々に複合型や参照型を理解し、最終的には高度なデータ型や特殊な用途にまで理解を深めていきましょう。経験を積むことで、どのデータ型がどの場面で最適かが見えてきます。

ポイントの振り返り

カテゴリよく使う型特徴
整数int, long小数点のない数値
小数double, decimal小数点を含む数値
文字string, charテキストデータ
真偽値booltrue/false の2値
日時DateTime日付と時刻
コレクション配列, List複数データの管理
カスタム型class, struct独自のデータ構造

参考文献

CATEGORY
TAGS
円