目次

概要

機能別索引&概要。 C# で使える型とそのメンバーの一覧を先に示しておきます。

大まかに分類すると以下の通り。

C# の型の種類。
組み込み型 ユーザー定義型 他の型から合成する型
値型 単純型 構造体

列挙型
Null 許容型
参照型 文字列型

オブジェクト型
クラス

インターフェイス

デリゲート
配列
その他 ポインター
縦軸分類
  • 値型: 値をスタックに確保。代入時にはコピーが作られる。継承不可。

  • 参照型: 値をヒープに確保。代入時には参照を渡すだけ。

参考: 「値型と参照型」「[雑記] スタックとヒープ

横軸分類
  • 組み込み型: プログラミング言語にあらかじめ組み込まれている変数の型 →「組込み型

  • ユーザー定義型: プログラマーが自由に作ることができる型(後述)

  • 他の型から合成する型: ある型TからT[]T?などというような書き方で「合成」して作る型(後述)

ユーザー定義型

C# のユーザー定義型一覧。
説明
クラス いわゆる複合型。 最も基本的なユーザー定義型 →「クラス
構造体 同じく、複合型。 クラスとの違いは値型であること →「値型と参照型
インターフェイス 抽象メンバーだけを持つ(要するに、型の規約(contract)だけを定める)型 →「インターフェース
列挙型 特定の値だけを取ることができる型 →「列挙型
デリゲート いわゆる fist-class 関数。 メソッドを参照するための型 →「デリゲート

クラスとインターフェイスと構造体の3つは非常によく似ていて、いずれも次節「クラス、インターフェイス、構造体のメンバー」で説明する「メンバー」を持てます。 違いは以下の通りです。

  • クラスは参照型で、構造体は値型になります(参考:「値型と参照型」)。

  • 構造体は継承(参考:「継承」)ができません

  • インターフェイスはデータ メンバーを持てず、関数メンバーも実装を持てません(全て abstract(参考:「抽象メソッド、抽象クラス」)扱い)

  • クラスは多重継承できませんが、インターフェイスなら複数継承(実装)することができます。

他の型から合成する型

C# における他の型から合成する型一覧。
説明
配列 複数のデータをひとまとめにして扱うための型 →「配列
Null 許容型 値型でも null(無効な値)を認めたい場合に使います →「Nullable 型
ポインター C# では、基本的にポインター(メモリのアドレスを数値として扱う)を禁止していますが、 unsafe コンテキスト内でのみポインターを利用可能です →「unsafe

クラス、インターフェイス、構造体のメンバー

データ メンバー

データを表すメンバー。

C# のクラスのデータ メンバー一覧
メンバー 説明
フィールド ユーザー定義型の内部に持つべきデータを格納するための変数 →「データの構造化」「クラス
定数 ユーザー定義型に関連付けられた定数 →「定数

インターフェイスはデータ メンバーを持てません。

関数メンバー

何らかの処理を行うメンバー。

C# のクラスの関数メンバー一覧
メンバー 説明
メソッド 普通に関数らしい使い方をする関数メンバー →「関数
コンストラクター 初期化処理 →「コンストラクター
デストラクター 破棄処理 →「デストラクター
プロパティ いわゆるアクセサーを構文化したもの。 クラス外からはフィールド的に、 クラス内からはメソッド的に使える/作れるメンバー →「プロパティ
インデクサー 一種の「引数付きプロパティ」。 配列のように、インデックスを指定して要素を読み書きするためのメンバー →「インデクサー
イベント いわゆるオブザーバー パターンを構文化したもの。 イベント ハンドラーの登録口を自動生成します →「イベント
演算子 ユーザー定義型向けに演算子をオーバーロードできます →「演算子のオーバーロード

このうち、デストラクターはクラスのみ、コンストラクターと演算子はクラスと構造体(インターフェイス以外)のみで定義できます。

特殊なメソッド

メソッドに関しては、いくつか特殊な機能を持つものもあります。

特殊なメソッド一覧
メソッド 説明
イテレーター ブロック データの列挙(IEnumerable の実装)を簡素化します →「イテレーター
拡張メソッド 既存の型に後からメソッドを追加(したかのように見せかけます)。静的メソッドをインスタンス メソッドと同様の構文で呼び出せるようにします →「拡張メソッド
部分メソッド 開発ツールとの連携用 →「クラスの分割定義
非同期メソッド 非同期処理を簡素化します →「非同期メソッド

メンバーのアクセス レベル

メンバーにアクセス可能な範囲を制御するためのアクセス修飾子。

C# のアクセス修飾子一覧
アクセス修飾子 説明
public どこからでもアクセス可能。
protected その型、もしくは、派生クラス内からのみアクセス可能 (ファミリー スコープ(family scope))。
internal アセンブリ内からのみアクセス可能 (アセンブリ スコープ(assembly scope))。
protected internal protected かつ internal。 その型、派生クラス、もしくは、アセンブリ内からのみアクセス可能。
private その型の中からのみアクセス可能。

クラスなどの型は、名前空間直下やグローバル スコープ中で定義できますが、 この場合、public もしくは internal のみが指定可能です。 この場合、アクセス修飾子を省略すると internal 扱いになります。

クラス内では全てのアクセス修飾子が利用可能です。 この場合、省略すると private 扱いになります。

更新履歴

ブログ