C#の型システムについて
目次
1. C#の型の分類

C#の型(データ型)は、大きく値型(Value Types)と参照型(Reference Types)の2種類に分類されます。
(1) 値型(Value Types)
特徴
- 変数に実際のデータが格納される(メモリ上のスタック領域に保存される)
- 代入時に値のコピーが作成される(値渡し)
- 数値型、ブール型、列挙型、構造体などが含まれる
主な値型の分類
- 列挙型(Enum)
System.Enum
を基に作られる- 例:
enum Color { Red, Green, Blue }
- 構造体(Struct)
- ユーザー定義の構造体も含まれる
- C#の組み込みの数値型も構造体
- 例:
System.Int32
,System.Boolean
(2) 参照型(Reference Types)
特徴
- 変数にはデータのアドレス(参照)が格納される(メモリ上のヒープ領域に保存される)
- 代入時に参照が渡される(参照渡し)
- 変更が元のオブジェクトに影響を与える
主な参照型の分類
System.Object
- C#におけるすべての型の基本クラス
System.ValueType
struct
を基に作られる型の基底クラス
- 文字列(
System.String
)- 文字列は参照型であるが、不変(immutable)という特徴がある
- 配列(
System.Array
)- C#の配列は
System.Array
を基にしている
- C#の配列は
- ユーザー定義クラス・インターフェース
- 開発者が作成するクラスやインターフェースも参照型
2. 型の継承関係
C#の型は、System.Object
を基底クラスとして継承関係を持ちます。
System.ValueType
は、System.Object
を継承しており、すべての値型の基底クラスです。- 列挙型(Enum) も
System.Enum
を基底クラスとする特殊な値型です。 - クラス(Class)やインターフェース(Interface) は
System.Object
を継承し、参照型として扱われます。
3. 値型と参照型の使い分け
- 値型
- 数値やブール値など、サイズが小さく変更が少ないデータ向け
- 例:
int
,float
,bool
- 参照型
- 変更の頻度が高く、データ量が大きいオブジェクト向け
- 例:
string
,class
,interface
4. まとめ
- 値型(Value Types) は、データ自体を保持し、スタックに格納される。
- 参照型(Reference Types) は、データのアドレスを保持し、ヒープに格納される。
System.Object
はすべての型の親クラスであり、C#の型の継承関係を理解する上で重要。
C#の型システムを理解することで、適切なデータ型を選択し、パフォーマンスの最適化やメモリ管理を効率的に行うことができます。
ディスカッション
コメント一覧
まだ、コメントがありません