カテゴリ: C# 更新日: 2025/11/19

C#のメソッドの可視性を使い分けるポイント!初心者にもわかるアクセス修飾子の基本

C#のメソッドの可視性(public/private/protected)を使い分けるポイント
C#のメソッドの可視性(public/private/protected)を使い分けるポイント

先生と生徒の会話形式で理解しよう

生徒

「C#でメソッドを作るときに、publicとかprivateとか付けるのを見たんですが、何ですか?」

先生

「それは“可視性”や“アクセス修飾子”と呼ばれるもので、メソッドをどこから使えるかを決める大切なキーワードです。」

生徒

「どんな種類があって、どう使い分けるんですか?」

先生

「いいですね!それでは、C#のアクセス修飾子について基礎から見ていきましょう。」

1. アクセス修飾子とは?

1. アクセス修飾子とは?
1. アクセス修飾子とは?

C#のアクセス修飾子(英語では Access Modifier)とは、メソッド変数クラスが、どこから使えるのか(アクセスできるのか)を決めるためのキーワードです。プログラムの安全性や使いやすさを保つために、とても重要なルールです。

代表的なアクセス修飾子は以下の3つです。

  • public(パブリック)
  • private(プライベート)
  • protected(プロテクテッド)

2. public(パブリック)とは?

2. public(パブリック)とは?
2. public(パブリック)とは?

publicを付けると、そのメソッドはどこからでも呼び出せるようになります。他のクラスや他のファイルからもアクセス可能です。

たとえば、ゲームの中でキャラクターがジャンプする機能を、他のクラスからも使いたいときなどに使います。


public class Player
{
    public void Jump()
    {
        Console.WriteLine("ジャンプしました!");
    }
}

ジャンプしました!

このようにpublicがついていると、外部から自由に呼び出すことができます。

3. private(プライベート)とは?

3. private(プライベート)とは?
3. private(プライベート)とは?

privateは、そのクラスの中でしか使えないメソッドや変数につけます。他のクラスや外からは一切呼び出せません。

たとえば、「内部でしか使わない処理」など、外部に見せたくない機能に使います。


public class Player
{
    public void Move()
    {
        Run();
    }

    private void Run()
    {
        Console.WriteLine("走っています!");
    }
}

走っています!

Run()メソッドはprivateなので、外部から呼び出すことはできません。Move()メソッドの中でだけ使われます。

4. protected(プロテクテッド)とは?

4. protected(プロテクテッド)とは?
4. protected(プロテクテッド)とは?

protectedは、そのクラス自身と、そのクラスを継承したサブクラス(子クラス)だけが使えるようにするアクセス修飾子です。

親クラスで定義した機能を、子クラスで使いたいときに便利です。


public class Animal
{
    protected void Breathe()
    {
        Console.WriteLine("呼吸しています。");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Breathe();
        Console.WriteLine("ワンワン!");
    }
}

呼吸しています。
ワンワン!

Breathe()メソッドはprotectedなので、親クラスのAnimalの外からは呼び出せませんが、Dogクラスの中では使えます。

5. アクセス修飾子を使い分けるポイント

5. アクセス修飾子を使い分けるポイント
5. アクセス修飾子を使い分けるポイント

アクセス修飾子は、どの機能を「誰に使わせるか」を決めるためのルールです。適切に使い分けることで、安全で整理されたコードが書けるようになります。

  • public: 他のクラスや外部にも使ってほしいとき
  • private: 自分のクラスの中だけで使えばよいとき
  • protected: 自分と子クラスだけに使わせたいとき

例えば、家のドアにたとえると、

  • public:誰でも玄関から入れるように開放している状態
  • private:自分の部屋だけ鍵をかけて入れないようにしている状態
  • protected:家族(子クラス)だけが入れる部屋

このようにイメージすると覚えやすくなります。

6. アクセス修飾子を省略するとどうなる?

6. アクセス修飾子を省略するとどうなる?
6. アクセス修飾子を省略するとどうなる?

アクセス修飾子を何も書かずにメソッドを定義した場合、クラス内ではprivateが適用されます。つまり、外部からはアクセスできなくなります。


class Sample
{
    void SayHello()
    {
        Console.WriteLine("こんにちは!");
    }
}

こんにちは!

このSayHello()メソッドは、明示的にprivateと書かなくても、デフォルトでprivateになります。

7. メソッドの安全性と再利用性を高めるコツ

7. メソッドの安全性と再利用性を高めるコツ
7. メソッドの安全性と再利用性を高めるコツ

メソッドの可視性を正しく設定することで、意図しない使われ方を防げます。たとえば、privateにしておくことで、間違って外部から呼び出してしまうことを防ぎ、プログラムの不具合を減らすことができます。

また、publicにするメソッドは、「このメソッドは外部に見せてもよい、使わせてもよい」と考えられるものに限定しましょう。

これはプログラムの設計の考え方にもつながる、大事なポイントです。

まとめ

まとめ
まとめ

C#のメソッドに付ける可視性、つまりアクセス修飾子の役割について、ここまでの内容を踏まえてあらためて深く振り返っていきます。プログラムの構造を整理し、安全に保ちながら用途に応じたメソッド設計を行うためには、public、private、protectedといった基本的な可視性を正しく理解し、状況に合わせて選び取る力がとても重要です。特に初心者の段階では、どのメソッドにどの修飾子を付けるべきか迷いがちですが、実際にはそれぞれの修飾子が持つ意味を押さえておくことで自然と判断できるようになります。 publicは外部から自由にアクセスさせたい機能に使います。アプリケーション全体の入口になる処理や、クラスの提供機能として公開したい処理などに適しています。たとえばゲームのキャラクタークラスにジャンプ機能を設ける場合、そのメソッドがpublicになっていると、他のクラスからその機能を呼び出してキャラクターを動かすことができます。これは再利用性が高く、外部に提供する明確なインターフェイスとして役立ちます。 一方、privateは外部に見せる必要のない内部処理だけをまとめたいときに使います。クラスの内部でのみ使用される補助的なメソッドや、値計算のための内部ロジックを隠すことで、誤って外部から呼ばれることを防ぎ、コードの安全性や可読性を保ちます。メソッドの可視性を間違えると、クラス内部の情報や仕組みが必要以上に露出してしまい、後々の修正や拡張で不具合に繋がりやすくなるため、privateの扱いはとても重要です。 protectedは継承を使う場合に必須の考え方です。親クラスにある機能を子クラスにだけ継承して使わせたいときに役立ちます。動物クラスに呼吸メソッドを用意し、犬クラスや猫クラスで共通の動作として呼び出すといった構造が典型的です。protectedを使うことで親子関係のあるクラス間では機能を共有しつつ、それ以外には公開しないという柔軟な設計が可能となります。 また、アクセス修飾子を何も付けなかったときにどうなるのかも大切なポイントでした。C#ではメソッドの可視性を省略した場合、自動的にprivateとして扱われます。この仕様を知っておくと、意図せず外部に公開してしまう事故を防げます。可視性を定義することはプログラムの品質に直結する大事な工程であり、毎回意識して使い分けることが習慣として身についていきます。 さらに、メソッドの可視性を意識することは、設計の段階から機能の公開範囲を考える習慣にもつながります。クラスの外に見せるべきなのか、内部だけで使うべきなのか、継承関係にある子クラスだけが触れればよいのか。これらを整理することで、自然と使いやすいクラス構造が出来上がり、拡張にも強いプログラム設計を実現できます。 ここでは最後に、アクセス修飾子を使い分けるシンプルなサンプルコードをまとめておきます。

サンプルプログラムまとめ


public class Character
{
    public void Action()
    {
        Jump();
        Shout();
    }

    private void Jump()
    {
        Console.WriteLine("ジャンプしたよ!");
    }

    protected void Shout()
    {
        Console.WriteLine("よし、がんばるぞ!");
    }
}

public class Hero : Character
{
    public void PowerUp()
    {
        Shout();
    }
}

このコードでは、publicのActionメソッドが外部からの呼び出しに対応し、privateのJumpメソッドが内部処理に限定され、protectedのShoutメソッドが継承先のHeroクラスで利用されています。それぞれの役割が明確で、コードの見通しも良くなります。こうした構造を意識して組み立てることで、安全性、拡張性、再利用性すべてを高めることができ、初心者の段階から身につけておくべき重要なポイントとなります。

先生と生徒の振り返り会話

生徒

「public、private、protectedの違いがだいぶわかってきた気がします!でも実際にコードを書くと迷いそうです。」

先生

「最初は迷って当然ですよ。大事なのは“誰に使わせたいメソッドなのか”を考えることです。それが決まれば自ずと修飾子の選択も明確になります。」

生徒

「なるほど、用途を考えて決めればいいんですね。privateは隠す、publicは公開する、protectedは子クラス専用…という感じですね。」

先生

「その理解でばっちりです。設計の意図を意識しながらアクセス修飾子を選ぶと、自然と読みやすくて安全なコードになりますよ。」

生徒

「今日学んだことを意識して、クラス設計の練習をしてみます!」

カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.4
Java&Spring記事人気No4
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方