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

C#のカプセル化とは?初心者にもわかるprivate・publicの使い方と意味

C#のカプセル化とは?private・publicの役割と使いどころ
C#のカプセル化とは?private・publicの役割と使いどころ

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

生徒

「C#のクラスとかオブジェクトで“カプセル化”って聞いたけど、何のことかわかりません…」

先生

「“カプセル化”は、データの安全性を保ちつつ、使いやすく整理するための大事な考え方ですよ。」

生徒

「どうして“カプセル”なんて名前なんですか?」

先生

「いい質問ですね。薬のカプセルと同じで、“中身を隠して、必要なものだけ見せる”という意味なんです。では、わかりやすく説明していきましょう!」

1. カプセル化とは?初心者でもイメージしやすい考え方

1. カプセル化とは?初心者でもイメージしやすい考え方
1. カプセル化とは?初心者でもイメージしやすい考え方

C#(シーシャープ)のカプセル化とは、「データ(変数)や処理(メソッド)を、外部から見えないように隠して、安全に使えるようにする技術」のことです。日常生活でいうと、「財布にお金を入れて、他の人から見えないようにする」のと似ています。

財布の中身(=データ)をむやみに他人に見せたり触らせたりしないことで、安全を守れます。それと同じように、プログラムでも大事なデータは隠しておくのが基本です。

2. privateとpublicとは?アクセス修飾子の役割

2. privateとpublicとは?アクセス修飾子の役割
2. privateとpublicとは?アクセス修飾子の役割

C#では、アクセス修飾子(あくせすしゅうしょくし)という仕組みを使って、「どこからアクセスできるか」を決めます。代表的なのが、private(プライベート)とpublic(パブリック)です。

  • private(プライベート):そのクラスの中だけで使えるようにする
  • public(パブリック):どこからでもアクセスできるようにする

つまり、privateは「隠す」、publicは「見せる」ためのキーワードです。

3. カプセル化の基本コード例(財布のたとえ)

3. カプセル化の基本コード例(財布のたとえ)
3. カプセル化の基本コード例(財布のたとえ)

実際にC#で書いてみましょう。以下のコードは、“お財布”クラスを作って、中身のお金をカプセル化しています。


class Wallet
{
    private int money = 0;

    public void AddMoney(int amount)
    {
        if (amount > 0)
        {
            money += amount;
        }
    }

    public int GetMoney()
    {
        return money;
    }
}

この例では、moneyという変数はprivateなので、クラスの外からは直接見えません。

お金を追加したいときはAddMoneyメソッドを通じて追加し、中身を確認したいときはGetMoneyで取り出します。

4. クラスの外から使ってみよう

4. クラスの外から使ってみよう
4. クラスの外から使ってみよう

先ほどのWalletクラスを実際に使うコードがこちらです。


class Program
{
    static void Main()
    {
        Wallet myWallet = new Wallet();
        myWallet.AddMoney(5000);
        Console.WriteLine("現在の所持金:" + myWallet.GetMoney() + "円");
    }
}

現在の所持金:5000円

このように、直接moneyに触れずに、安全にデータを扱えます。

5. なぜ直接アクセスさせないのか?

5. なぜ直接アクセスさせないのか?
5. なぜ直接アクセスさせないのか?

もしmoneypublicにしてしまうと、こんな危険が生まれます。


Wallet myWallet = new Wallet();
myWallet.money = -10000; // マイナス金額にできてしまう!

こんなふうに、不正な値や予期しない変更がされる可能性があるため、privateで守るのが重要です。

6. C#のプロパティ(Property)で安全にアクセス

6. C#のプロパティ(Property)で安全にアクセス
6. C#のプロパティ(Property)で安全にアクセス

C#では、カプセル化をもっと便利にする「プロパティ(property)」という機能もあります。プロパティを使うと、getsetを使って、アクセスの制限と安全な値の管理ができます。


class Wallet
{
    private int money;

    public int Money
    {
        get { return money; }
        set
        {
            if (value >= 0)
            {
                money = value;
            }
        }
    }
}

この書き方なら、マイナスの値が設定されないようにコントロールしながら、Moneyプロパティ経由で値の取得・変更ができます。

7. カプセル化でコードの安全性と使いやすさがアップ

7. カプセル化でコードの安全性と使いやすさがアップ
7. カプセル化でコードの安全性と使いやすさがアップ

C#のカプセル化は、変数やメソッドを必要な範囲だけに公開することで、安全で読みやすいプログラムを作るための大切な考え方です。

特にprivatepublicの使い分けを意識することで、「誰が」「何を」操作できるかを明確にでき、バグやトラブルの原因を減らすことができます。

初心者のうちは「なぜ隠すの?」と思うかもしれませんが、大規模なプログラムになればなるほど、カプセル化のありがたみが実感できるようになります。

まとめ

まとめ
まとめ

C#におけるカプセル化の考え方は、プログラムの安全性と保守性を高めるうえで非常に大切です。今回の記事では、privatepublicというアクセス修飾子を使って、データを守りながら操作する方法を学びました。クラス内部にある変数に直接触れず、間接的に操作することで、予期しないバグや不正な値の混入を防げるようになります。

特に初心者がつまずきやすいのが、「なぜ変数をprivateにするのか?」という点です。これは単なる制限ではなく、「その変数がどう使われるべきか」という設計の意図を明確にするための仕組みでもあります。たとえば、財布の中身をむやみに他人に触らせないように、お金の変数も勝手に書き換えられないようにする必要があります。

また、C#ではプロパティ(Property)を使って、安全に変数へアクセスする仕組みが提供されています。これにより、コードが読みやすくなり、意図しない使い方も防止できます。getsetの中にバリデーションロジックを書くこともできるため、現実の制約をそのままコードで表現できるのも大きな利点です。

カプセル化はオブジェクト指向プログラミングの三大要素(カプセル化・継承・ポリモーフィズム)のひとつであり、コードの再利用性や信頼性を高めるために不可欠な概念です。将来的に複数人で開発するプロジェクトに参加することを考えると、この基本をしっかりと理解しておくことが、トラブルの少ない開発へとつながります。

最後に、学んだ知識を元にもう少し発展的なコード例も紹介しておきます。これはWalletクラスを拡張して、出金機能も含めた例です。


class Wallet
{
    private int money;

    public int Money
    {
        get { return money; }
        set
        {
            if (value >= 0)
            {
                money = value;
            }
        }
    }

    public bool Withdraw(int amount)
    {
        if (amount > 0 && amount <= money)
        {
            money -= amount;
            return true;
        }
        return false;
    }
}

このように、安全な条件をつけたうえで処理を許可する設計にすれば、システムの安定性が格段に向上します。コードが少しずつ複雑になっても、基本的な設計原則に従えば、トラブルを未然に防ぐことができます。

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

生徒

「カプセル化って最初は難しく感じたけど、“財布の中身を隠す”ってたとえでイメージがつかめました!」

先生

「そうですね。プログラムの中でも、“必要な情報だけを外に見せる”という設計はとても重要なんです。」

生徒

「変数をprivateにして、publicなメソッドやプロパティでコントロールする感じですよね?」

先生

「そのとおり!そして、値を制限したい場合は、プロパティのsetの中に条件を入れて、自由すぎるアクセスを防げるようにするともっと良いですよ。」

生徒

「なるほど~。他人に財布をいじられないようにするって考えたら、すごく納得です!」

先生

「これからも“設計の意図をコードで表す”という視点を大事にしていきましょうね。」

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

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

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

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演算子の違いと使い方