カテゴリ: C# 更新日: 2026/01/05

C#のメソッドとクラスメンバーのアクセス修飾子まとめ

C#のメソッドとクラスメンバーのアクセス修飾子まとめ
C#のメソッドとクラスメンバーのアクセス修飾子まとめ

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

生徒

「C#では、クラスやメソッドって、ほかの場所から自由に使えるんですか?」

先生

「いい質問ですね。C#では『アクセス修飾子』という仕組みを使って、どこから使えるかを決めるんです。」

生徒

「アクセス修飾子?難しそう……どんな種類があるんですか?」

先生

「種類は多くありません。ひとつずつ見ていけば、すぐに理解できますよ。では基本から見ていきましょう!」

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

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

C#(シーシャープ)では、クラスやメソッド、変数などのクラスメンバーが「どこからアクセスできるか」を制御する仕組みがあります。それがアクセス修飾子です。アクセス修飾子を使うことで、プログラムの安全性や保守性を高めることができます。

たとえば、「この変数は外から触られたくない」「このメソッドはどこからでも使えるようにしたい」といったルールを決められるのです。

2. よく使うアクセス修飾子の一覧

2. よく使うアクセス修飾子の一覧
2. よく使うアクセス修飾子の一覧

C#では、以下のようなアクセス修飾子があります。

  • public(パブリック)…どこからでもアクセス可能
  • private(プライベート)…同じクラスの中からのみアクセス可能
  • protected(プロテクテッド)…同じクラスと継承したクラスからアクセス可能
  • internal(インターナル)…同じプロジェクト内からのみアクセス可能
  • protected internal…継承または同じプロジェクト内からアクセス可能
  • private protected…継承したクラスの中でも同じプロジェクト内からのみアクセス可能

3. 実際にコードでアクセス修飾子を確認しよう

3. 実際にコードでアクセス修飾子を確認しよう
3. 実際にコードでアクセス修飾子を確認しよう

次のサンプルコードでは、各アクセス修飾子がどう使われているかを見てみましょう。


public class MyClass
{
    public void PublicMethod()
    {
        Console.WriteLine("これはpublicメソッドです。");
    }

    private void PrivateMethod()
    {
        Console.WriteLine("これはprivateメソッドです。");
    }

    protected void ProtectedMethod()
    {
        Console.WriteLine("これはprotectedメソッドです。");
    }

    internal void InternalMethod()
    {
        Console.WriteLine("これはinternalメソッドです。");
    }

    protected internal void ProtectedInternalMethod()
    {
        Console.WriteLine("これはprotected internalメソッドです。");
    }

    private protected void PrivateProtectedMethod()
    {
        Console.WriteLine("これはprivate protectedメソッドです。");
    }
}

このように、同じクラスの中であればどの修飾子でも呼び出すことができますが、クラスの外や別プロジェクトから使えるかどうかは修飾子によって変わります。

4. publicとprivateの違いを身近な例で理解しよう

4. publicとprivateの違いを身近な例で理解しよう
4. publicとprivateの違いを身近な例で理解しよう

アクセス修飾子をイメージしやすくするために、「家の中」に例えてみましょう。

  • publicは「玄関」…誰でも入ってこれる場所
  • privateは「自分の部屋」…自分しか入れない場所
  • protectedは「家族だけが入れる部屋」
  • internalは「同じマンションの住人だけが入れる共有スペース」

このように、それぞれの修飾子が「誰に開かれているか」を表しています。

5. アクセス修飾子とメソッドの組み合わせ例

5. アクセス修飾子とメソッドの組み合わせ例
5. アクセス修飾子とメソッドの組み合わせ例

メソッドにアクセス修飾子を付けることで、そのメソッドがどこから呼び出せるのかが決まります。次のコードを見てみましょう。


public class Car
{
    public void StartEngine()
    {
        Console.WriteLine("エンジンを始動します。");
        CheckBattery();
    }

    private void CheckBattery()
    {
        Console.WriteLine("バッテリーをチェック中...");
    }
}

上記の例では、外部からはStartEngine()しか呼び出せません。CheckBattery()privateなので、Carクラスの中でしか使えません。


エンジンを始動します。
バッテリーをチェック中...

6. クラス自体のアクセス修飾子

6. クラス自体のアクセス修飾子
6. クラス自体のアクセス修飾子

実は、クラスにもアクセス修飾子を付けることができます。ただし、トップレベルのクラス(=ファイルの中で直接定義されるクラス)にはpublicまたはinternalしか使えません。


public class MyPublicClass
{
    // どこからでも使えるクラス
}

internal class MyInternalClass
{
    // 同じプロジェクト内だけで使えるクラス
}

これにより、クラスそのものが外部から使えるかどうかを制御できます。

7. どの修飾子を使えばいいの?

7. どの修飾子を使えばいいの?
7. どの修飾子を使えばいいの?

迷ったときは、次のような考え方がおすすめです。

  • 基本はprivateにして、必要なものだけpublicにする
  • 外部に公開したいメソッドだけpublicにする
  • 内部でしか使わないヘルパーメソッドはprivateにする
  • ライブラリやクラス設計で拡張を意識するならprotectedinternalを使う

すべてをpublicにすると、安全性が下がってしまうので注意が必要です。

まとめ

まとめ
まとめ

C#のアクセス修飾子は、クラスやメソッド、フィールドの使われ方を正しく整理し、プログラムを安全に運用するための大切な仕組みです。今回の記事では、public、private、protected、internalといった基本的なアクセス修飾子がどのように働くのかを理解し、実際のコードでどのように使い分けるのかを丁寧に確認しました。アクセス修飾子を正しく設定することで、意図しない場所からクラスメンバーが参照されることを防ぎ、プログラム全体の見通しが良くなります。メソッドの公開範囲を適切に絞ることで、ほかのクラスや外部コードに依存しすぎない、安定したオブジェクト指向設計が実現できます。とくに初心者のうちは、ついすべてをpublicにしてしまいがちですが、privateを基本にし、必要な部分だけpublicやprotectedとして公開していく流れを意識すると、自然と読みやすいコードへと近づきます。

アクセス修飾子は、単なる制限ではなく「よりよい設計を支えるための道具」です。たとえばライブラリや共通クラスを作るときには、internalを使ってプロジェクト内だけにアクセス範囲を絞り、protectedを使って継承関係の中だけで利用できるように調整するなど、クラスをどう使ってほしいかに応じて柔軟に使い分けることができます。また、private protectedのように複合的な制御を行う修飾子も存在し、継承とプロジェクト構成の両方を考慮した設計が可能になります。これらは実務でのクラス設計にも直結しており、適切なアクセス範囲を決めることがそのまま拡張性や保守性の高さにつながることを理解しておくと、より深いレベルでC#を扱えるようになります。

以下に、アクセス修飾子の利用イメージを整理するためのサンプルコードを示します。クラスメンバーの公開範囲をどのように設計するかによって、外部から呼べるメソッド、内部のみに隠しておきたい処理、継承時に公開したい機能が明確になります。特にヘルパーメソッドをprivateとして隠し、外部に公開するメソッドだけをpublicにする設計は、非常に実用性が高いパターンです。


public class UserService
{
    public void CreateUser()
    {
        Console.WriteLine("ユーザーを作成します。");
        ValidateInput();
        SaveDatabase();
    }

    private void ValidateInput()
    {
        Console.WriteLine("入力値を検証しています。");
    }

    private protected void SaveDatabase()
    {
        Console.WriteLine("データベースに保存中...");
    }

    protected internal void LogAction()
    {
        Console.WriteLine("操作ログを記録しました。");
    }
}

この例では、CreateUserは外部から呼び出して操作できるメソッドであり、入力検証は外部に公開する必要がないためprivateに、データ保存は継承クラスからの利用も考慮してprivate protectedに設定しています。さらに、ログ処理は同一プロジェクト内や継承関係で使えるようにprotected internal にしています。このような工夫を重ねることで、クラスの責任範囲を自然に整理でき、プログラムの安定性を維持できます。またアクセス修飾子を意識する習慣を身につけることで、「どこから使われるべき機能なのか」を自分で説明できるコードを書く力も育っていきます。

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

生徒

「アクセス修飾子ってただのルールだと思っていましたが、クラスを守るための大事な仕組みなんですね。」

先生

「そのとおりです。どこから使ってほしいのかを明確にできると、クラスの設計がずっと安定しますよ。」

生徒

「publicばかり使っていたのを反省しました……これからはprivateを基本にして、必要な範囲だけ公開するようにしてみます。」

先生

「とても良い考え方ですね。プログラムが大きくなるほど、アクセス修飾子の役割が重要になります。少しずつ慣れていきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#のアクセス修飾子とは何ですか?

C#のアクセス修飾子とは、クラスやメソッド、変数などが「どこからアクセスできるか」を制御するための仕組みです。
カテゴリの一覧へ
新着記事
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#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.4
Java&Spring記事人気No4
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
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演算子の違いと使い方