【C#】C#のデータ型完全ガイド - 基本から高度な型まで詳しく解説
C#では、データを扱うためにさまざまな「データ型」が用意されています。それぞれのデータ型には役割があり、適切に使うことでプログラムの精度や効率が向上します。ここでは、基本的なデータ型から少し高度なデータ型まで、詳しくわかりやすく解説します。
この記事で学べること
- 整数型(int, long, short, byte)の使い分け
- 浮動小数点型(float, double, decimal)の精度と用途
- 文字・文字列・真偽値の扱い方
- 配列、列挙型、構造体などの複合データ型
- クラス、インターフェース、デリゲートなどの参照型
- 高度なデータ型(レコード、匿名型、ポインタ)
データ型の分類
C#のデータ型は大きく「値型」と「参照型」に分けられます。
| 分類 | 特徴 | 例 |
|---|---|---|
| 値型 | 変数に値そのものを格納 | int, double, bool, struct, enum |
| 参照型 | 変数にメモリアドレスを格納 | string, class, interface, delegate |
基本的なデータ型
最初に、C#のプログラミングでよく使われる基本的なデータ型を紹介します。これらのデータ型は、数値や文字、真偽値など、プログラムの中で頻繁に使われるものです。
数値を扱うデータ型
整数型の比較
| 型 | サイズ | 範囲 | 用途例 |
|---|---|---|---|
| byte | 8bit | 0 ~ 255 | 色情報、小さな正の数 |
| sbyte | 8bit | -128 ~ 127 | 小さな符号付き整数 |
| short | 16bit | -32,768 ~ 32,767 | 小さな整数 |
| ushort | 16bit | 0 ~ 65,535 | 小さな正の整数 |
| int | 32bit | 約±21億 | 一般的な整数(最もよく使う) |
| uint | 32bit | 0 ~ 約42億 | 正の整数のみ |
| long | 64bit | 約±9京 | 大きな整数 |
| ulong | 64bit | 0 ~ 約18京 | 非常に大きな正の整数 |
int age = 25; // 一般的な整数
long distance = 9876543210; // 大きな数値
short smallNumber = 32000; // 小さな整数
byte colorValue = 255; // バイト単位のデータ
小数を扱うデータ型
浮動小数点型の比較
| 型 | サイズ | 精度 | 用途 | サフィックス |
|---|---|---|---|---|
| float | 32bit | 約7桁 | グラフィックス、ゲーム | f |
| double | 64bit | 約15-16桁 | 一般的な計算(デフォルト) | d または省略可 |
| decimal | 128bit | 約28-29桁 | 金融計算、高精度が必要な場合 | m |
float pi = 3.14f; // float型はサフィックス f が必要
double distance = 384400.0; // 地球から月までの距離 (km)
decimal price = 19.99m; // 金融計算にはdecimal型
注意: 金融計算では必ずdecimalを使用してください。floatやdoubleは丸め誤差が発生する可能性があります。
真偽値を扱うデータ型
-
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);
より高度な場面で使うデータ型
これらの型は、より高度な操作やパフォーマンスを追求する場面で使われます。通常のプログラミングではあまり使わないかもしれませんが、特定のシナリオで役立ちます。
メモリ操作や特殊な用途に使う型
-
ポインタ型 ポインタは、メモリのアドレスを直接扱うための型です。ただし、安全でないコード(アンセーフコード)として扱われます。
unsafe { int* ptr = &someInteger; } -
匿名型 匿名型は、名前を持たない一時的なデータ型で、LINQや簡易なデータ処理でよく使用されます。値を保持するだけの目的で使われます。
var anonymous = new { Name = "John", Age = 30 }; -
レコード型 レコード型は、イミュータブル(変更不可能)なデータ型で、データの不変性を保証しつつシンプルに定義できます。
public record Person(string Name, int Age);
まとめ
C#には豊富なデータ型が用意されており、これらを適切に使い分けることで、効率的で型安全なプログラムを作成することができます。まずは基本的なデータ型から始めて、徐々に複合型や参照型を理解し、最終的には高度なデータ型や特殊な用途にまで理解を深めていきましょう。経験を積むことで、どのデータ型がどの場面で最適かが見えてきます。
ポイントの振り返り
| カテゴリ | よく使う型 | 特徴 |
|---|---|---|
| 整数 | int, long | 小数点のない数値 |
| 小数 | double, decimal | 小数点を含む数値 |
| 文字 | string, char | テキストデータ |
| 真偽値 | bool | true/false の2値 |
| 日時 | DateTime | 日付と時刻 |
| コレクション | 配列, List | 複数データの管理 |
| カスタム型 | class, struct | 独自のデータ構造 |
参考文献
Recommend
2024-08-19
【C#】C#のデータ型完全ガイド - 基本から高度な型まで詳しく解説
2024-08-21
【C#】信頼性の高いログ処理システムの設計と実装:バッファリング、リトライ、シャットダウン処理まで
2024-08-19
【C#】C#配列とコレクションを解説 - わかりやすい例で解説
2024-08-19
【C#】C#の基礎を解説 - 最初の「Hello, World」プログラム
2024-08-19
【C#】C#制御構文の基本 - 簡単に理解する条件分岐とループの使い方
2024-08-19
【C#】C#とは? - C#の歴史と、概要、具体的な開発事例を解説
2024-08-19
【C#】C#演算子ガイド - 基本から応用までわかりやすく解説