【Aモデル録 フェーズ1 C#基礎】
―「触っていい場所/ダメな場所」を決める柵―
👉 アクセス修飾子とは、「そのメンバーを、どこから触っていいか」を決めるルールです。
これを 明示的に決めるための言葉。
あなたは、もう何度も見ています。
public class Dog
{
public void Bark() { }
}
この public、
意味を知らずに使ってきたはず。
今日は、ここをちゃんと回収します。
いきなり本質です。
プログラムは、こう壊れます。
👉 原因の多くは「触らせすぎ」。
そこで C# は、
「ここまではOK、ここから先はダメ」
を決める仕組みを用意しました。
それが、
アクセス修飾子。
👉 どこからでも使っていい
class Dog
{
public void Bark() { }
}Dog d = new Dog();
d.Bark(); // OK
👉 全部OK
👉 このクラスの中からしか使えない
👉 内部専用
privateの時は、場合によって挙動が変わります。
private class Dog
{
}
❌ Main からは new できません
理由:
Dog という名前自体が見えない👉 コンパイルエラー
class Dog
{
private Dog() { }
}Dog d = new Dog(); // ❌ ここでエラー(newできない)
理由:
👉 インスタンス生成ができない
※ これは「new が禁止されている」状態
class Dog
{
private int age;
}Dog d = new Dog(); // OK
✅ インスタンス生成はできる
ただし:
d.age; // ❌ エラー
👉 「生まれるのはOK、触るのはNG」
| private にしたもの | new できる? | 理由 |
|---|---|---|
| クラス | ❌ | 存在自体が見えない |
| コンストラクタ | ❌ | 生まれ方が封じられる |
| メンバー | ✅ | 生まれるのは別問題 |
class Logger
{
private Logger() { }
}
👉 意味:
ここから、
という、ひとつ上の段階にたどり着いたとき、自然につながります。
※ 今は 「伏線」 で十分です。
ここが設計ポイントです。
👉 使い方として保証する部分
👉 中身の都合
触っていい → public
触るな危険 → private
👉 privateを外部から触ることは、
中がどんな作りになっているか、ユーザーが、機械を分解して見ているようなもの
❌ = 危険!
ここまで来たあなたなら、これが言えます。
👉 別の軸の話
static でも private はあるし、
インスタンスでも public はある。
ただし、今の段階では、
「そういう組み合わせが可能である」のを知っておくだけ
で大丈夫です。
❌ public = とりあえず付ける
❌ private = 使わないもの
→ 違う
👉 private は
「外から触らせないために、積極的に使う」。
迷ったら private
必要になったら、
そのとき public にする。
👉 その逆にしておくと、あとで戻せない
アクセス修飾子は、
プログラムを「壊れにくくする」ための知恵です。
書けるようになる前に、
守り方を知っている。
これ、かなり良い順序の覚え方です。