【Aモデル録 フェーズ1 C#基礎】

07-06:アクセス修飾子(public / private)

―「触っていい場所/ダメな場所」を決める柵―

一言で言うと

👉 アクセス修飾子とは、「そのメンバーを、どこから触っていいか」を決めるルールです。

これを 明示的に決めるための言葉。


まず、もう知っている形

あなたは、もう何度も見ています。

public class Dog
{
    public void Bark() { }
}

この public、
意味を知らずに使ってきたはず。

今日は、ここをちゃんと回収します。


なぜ、アクセス制限が必要なのか

いきなり本質です。

プログラムは、こう壊れます。

👉 原因の多くは「触らせすぎ」。

そこで C# は、

「ここまではOK、ここから先はダメ」

を決める仕組みを用意しました。

それが、
アクセス修飾子。


public(公開)

👉 どこからでも使っていい

class Dog
{
    public void Bark() { }
}
Dog d = new Dog();
d.Bark();   // OK

👉 全部OK


private(非公開)

👉 このクラスの中からしか使えない

👉 内部専用

privateの時は、場合によって挙動が変わります。

① クラス自体が private の場合

private class Dog
{
}

❌ Main からは new できません

理由:

👉 コンパイルエラー

② コンストラクタが private の場合(これがよくある混乱)

class Dog
{
    private Dog() { }
}
Dog d = new Dog();  // ❌ ここでエラー(newできない)

理由:

👉 インスタンス生成ができない

※ これは「new が禁止されている」状態

③ メンバー(変数・メソッド)が private の場合

class Dog
{
    private int age;
}
Dog d = new Dog(); // OK

✅ インスタンス生成はできる

ただし:

d.age; // ❌ エラー

👉 「生まれるのはOK、触るのはNG」


ここで整理(超大事)

private にしたもの new できる? 理由
クラス ❌ 存在自体が見えない
コンストラクタ ❌ 生まれ方が封じられる
メンバー ✅ 生まれるのは別問題

なぜ、privateに こんな設計があるのか(設計視点)

コンストラクタを private にする理由

class Logger
{
    private Logger() { }
}

👉 意味:

ここから、

という、ひとつ上の段階にたどり着いたとき、自然につながります。

※ 今は 「伏線」 で十分です。

Aモデル的・安全な理解


「じゃあ、何を public にするの?」

ここが設計ポイントです。

public にするもの

👉 使い方として保証する部分


private にするもの

👉 中身の都合


Aモデル的イメージ

触っていい → public
触るな危険 → private

👉 privateを外部から触ることは、

中がどんな作りになっているか、ユーザーが、機械を分解して見ているようなもの

 ❌ = 危険! 


static との関係(軽く接続)

ここまで来たあなたなら、これが言えます。

👉 別の軸の話

static でも private はあるし、
インスタンスでも public はある。

ただし、今の段階では、
「そういう組み合わせが可能である」のを知っておくだけ 
で大丈夫です。


よくある誤解

❌ public = とりあえず付ける
❌ private = 使わないもの

→ 違う

👉 private は
「外から触らせないために、積極的に使う」。


超重要な基本ルール(推奨)

迷ったら private

必要になったら、
そのとき public にする。

👉 その逆にしておくと、あとで戻せない


理解まとめ


最後に

アクセス修飾子は、
プログラムを「壊れにくくする」ための知恵です。

書けるようになる前に、
守り方を知っている。

これ、かなり良い順序の覚え方です。


構成と読み方|タイトル一覧

Top - はじめに|この忘備録と「Aモデル」について