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を基にしている
  • ユーザー定義クラス・インターフェース
    • 開発者が作成するクラスやインターフェースも参照型

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#の型システムを理解することで、適切なデータ型を選択し、パフォーマンスの最適化やメモリ管理を効率的に行うことができます。

C#

Posted by hidepon