C#アクセス修飾子完全解説:実例で理解するカプセル化の仕組み
C#におけるアクセス修飾子とは
アクセス修飾子(アクセス指定子)は、型と型メンバーの可視性を制御するキーワードであり、C#におけるカプセル化の基盤です。クラス、プロパティ、メソッドを参照できるコードを決定し、意図したプログラム部分のみが内部実装詳細と対話できるようにします。
C#には6つのアクセス修飾子があります:
- Private
- Public
- Protected
- Internal
- Protected Internal
- Private Protected
このチュートリアルでは以下を学びます:
- アクセス修飾子の概念と重要性
- Private、Public、Protected、Internal修飾子の詳細
- コンストラクタによるクラスフィールド初期化
Privateアクセス修飾子
メンバーをprivateでマークすると、その使用を包含クラスのみに制限します。外部コード(同じアセンブリ内の他クラスを含む)はprivateメンバーを参照できません。
Privateアクセス修飾子の例
Tutorial.csのSetTutorialを変更してこのルールを説明します。publicキーワードをprivateに変更:

次にProgram.csに切り替えます。コンパイラがSetTutorial呼び出しに赤い波線を表示し、この場所からメソッドにアクセスできないことを示します。

Publicアクセス修飾子
Publicメンバーは、包含型を参照できるあらゆるコードから可視です。アクセス修飾子を指定しないメンバーのデフォルトです。
Publicアクセス修飾子の例

SetTutorialがpublicで宣言されているため、Program.csからコンパイルエラーなしで呼び出せます。
Protectedアクセス修飾子
protectedメンバーは、自身のクラスと派生クラス内でのみアクセス可能です。このアクセスレベルは、再利用可能な基底クラスを作成しつつ、内部実装を保護するのに最適です。
Internalアクセス修飾子
Internalメンバーは、同じアセンブリ内のすべてのコードから可視ですが、他のアセンブリのコードからは不可視です。ライブラリコンポーネントをライブラリのコンシューマーのみに公開する場合に有用です。
C#コンストラクタ
コンストラクタはクラスの新しいインスタンスを初期化します。クラス名と同名で、戻り値の型を持たず、new使用時に自動的に呼び出されます。
- コンストラクタのデフォルトアクセスは、別途指定がない限り
public。 - コンストラクタは戻り値の型を宣言できない。
C#コンストラクタの例
Tutorialオブジェクト作成時にTutorialIDとTutorialNameのデフォルト値を設定するコンストラクタをデモンストレートします。
ステップ1) Tutorial.csにコンストラクタを追加:

コード解説
Tutorialと名付けられたメソッドがコンストラクタとして扱われ、インスタンス作成時に自動実行されます。- コンストラクタは
TutorialIDに0、TutorialNameに"Default"を割り当て、一貫した初期状態を保証。
Program.csでSetTutorial呼び出しを削除し、コンストラクタの振る舞いに焦点を当てます:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication {
class Tutorial {
public int TutorialID;
public string TutorialName;
public Tutorial() {
TutorialID = 0;
TutorialName = "Default";
}
public void SetTutorial(int pID, string pName) {
TutorialID = pID;
TutorialName = pName;
}
public string GetTutorial() {
return TutorialName;
}
static void Main(string[] args) {
Tutorial pTutor = new Tutorial();
Console.WriteLine(pTutor.GetTutorial());
Console.ReadKey();
}
}
}
コード解説
newキーワードでTutorialインスタンスを作成。GetTutorialメソッドがデフォルトのTutorialNameを取得し、Console.WriteLineで表示。
実行時、コンソールには以下が表示されます:
出力:

出力はコンストラクタが実行され、TutorialNameが"Default"で初期化されたことを確認します。
注: "Default"という値は外部コードではなく、コンストラクタ由来です。
まとめ
- アクセス修飾子はクラスメンバーの可視性を定義する。
privateはすべての外部コードからメンバーを隠蔽。publicは参照可能なあらゆるコードにメンバーを公開。protectedはクラスとその子孫にメンバーを制限。internalは現在のアセンブリ内に可視性を限定。- コンストラクタはオブジェクトインスタンス化時にフィールドを初期化。
C言語
- C# アクセス修飾子を理解する:public、private、protected、internal など
- C++ do-while文:構文、実践例、ネストしたループ
- C++ポインタをマスター:概念、例、実践的応用
- C++演算子オーバーロード:コード例付き実践ガイド
- C++関数を実例で徹底解説:基本から応用まで
- C#コレクション実践チュートリアル:実例で学ぶ柔軟なデータ管理
- Python str.count()マスター:文字と部分文字列のカウント実例集
- Python round()関数を実例で徹底解説
- Python map()関数をマスター:構文、例、ベストプラクティス
- Python timeit():実行時間測定の実例付きガイド
- Python list.count() 完全ガイド:実践例付きで徹底解説