アクセス修飾子を使いこなそう!C#での使い方を具体例で解説

プログラミング

C#でアクセス修飾子を使うことは重要です。アクセス修飾子を適切に使うことで、コードの安全性と可読性を高めることができます。例えば、private 修飾子を使うことで、重要なデータが外部から直接操作されることを防ぎ、プログラムの一貫性を保つことができます。また、public 修飾子を適切に使うことで、必要な部分だけを他のクラスに公開し、クラス間の依存関係を整理することでコードの可読性が向上します。このようにして、バグの発生を減らし、メンテナンスをしやすくする効果があります。例えば、private 修飾子を使うことで、外部から直接データにアクセスされるのを防ぎ、不正な操作からデータを保護できます。また、public 修飾子を適切に使うことで、必要な部分だけを公開し、他のクラスとの適切なインターフェースを維持することができます。このブログ記事では、C#で使用される主なアクセス修飾子—publicprivateprotectedの使い方とその具体例について解説します。

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

アクセス修飾子は、クラスやメソッド、プロパティなどのメンバーに対して、外部からのアクセスレベルを制御するためのキーワードです。アクセス修飾子を使うことで、メンバーが他のコードからどのようにアクセスされるかを決めることができます。C#でよく使われるアクセス修飾子は次のとおりです:

  • public: 全てのクラスからアクセス可能
  • private: 宣言されたクラス内からのみアクセス可能
  • protected: 宣言されたクラスとその派生クラスからのみアクセス可能

2. public の使い方

public 修飾子は、メンバーに対するアクセスを他のクラスからも許可したい場合に使います。例えば、他のクラスが情報を参照したり設定したりする必要があるときに適切です。典型的なケースとして、アプリケーション全体で利用する設定情報や、ユーザーから入力されたデータを他のモジュールで使用する必要がある場合に public を使用します。特に、外部のクライアントコードから操作する必要があるプロパティやメソッドを公開するために使用します。例えば、以下のように、LibraryBook クラスの Title プロパティを public にすることで、他のクラスからも自由にアクセスできます。

public class LibraryBook
{
    public string Title { get; set; }
    public string Author { get; set; }

    public void DisplayInfo()
    {
        Console.WriteLine($"Title: {Title}, Author: {Author}");
    }
}

// 使用例
var book = new LibraryBook();
book.Title = "C# Programming";
book.Author = "John Doe";
book.DisplayInfo();  // 出力: Title: C# Programming, Author: John Doe

ここでは、TitleAuthor プロパティが public であるため、インスタンスから自由に設定や取得が可能です。

3. private の使い方

private 修飾子は、外部からアクセスさせたくないデータやメソッドに使用します。例えば、ユーザーのパスワード、クレジットカード情報、または内部計算用の変数など、外部から直接操作されるとセキュリティ上のリスクがあるデータを保護するために使います。また、システム設定やログファイルへのアクセスを制御する場合にも使用します。クラス内でのみ使用するデータを守ることができ、安全性を高める役割を果たします。

public class SafeBox
{
    private string password;
    private decimal money;

    public SafeBox(string initialPassword)
    {
        password = initialPassword;
        money = 0;
    }

    public void Deposit(decimal amount)
    {
        if (amount > 0)
        {
            money += amount;
        }
    }

    public bool Withdraw(decimal amount, string enteredPassword)
    {
        if (enteredPassword == password && amount <= money)
        {
            money -= amount;
            return true;
        }
        return false;
    }

    public void ShowBalance()
    {
        Console.WriteLine($"Current balance: {money}");
    }
}

// 使用例
SafeBox safeBox = new SafeBox("secure123");
safeBox.Deposit(500);
if (safeBox.Withdraw(200, "secure123"))
{
    Console.WriteLine("Withdrawal successful.");
}
safeBox.ShowBalance();  // 出力: Current balance: 300

passwordmoney フィールドは private に設定されているため、クラス外から直接変更することはできません。このようにして、不正な操作からデータを保護できます。

4. protected の使い方

protected 修飾子は、基底クラスとその派生クラスからアクセス可能なメンバーを定義します。例えば、「動物クラスを基にした犬クラス」のように、基底クラスから派生したクラスで共通の動作やデータを共有する場合に使用します。この修飾子は、継承関係にあるクラスの間でのみデータを共有したい場合に役立ちます。典型的な例として、動物クラスに「音を出す」メソッドを protected として定義し、派生クラス(例えば犬や猫)でそのメソッドを使い、それぞれ特有の動作(例えば「ワン」と鳴く、または「ニャー」と鳴く)を追加する、といった使い方があります。

public class Vehicle
{
    protected int speed;

    public Vehicle()
    {
        speed = 0;
    }

    protected void Accelerate(int increment)
    {
        speed += increment;
        Console.WriteLine($"Speed increased to {speed} km/h");
    }
}

public class Car : Vehicle
{
    public void Drive()
    {
        Accelerate(20);
        Console.WriteLine("The car is now driving.");
    }
}

// 使用例
var car = new Car();
car.Drive();  // 出力: Speed increased to 20 km/h
              //        The car is now driving.

speed フィールドと Accelerate メソッドは protected に設定されているため、Vehicle クラスから継承された Car クラス内で呼び出すことができますが、Car クラスの外から直接呼び出すことはできません。

5. まとめ

アクセス修飾子は、クラスのメンバーがどの範囲でアクセス可能であるかを制御する重要な要素です。適切にアクセス修飾子を設定することで、外部からの不正なアクセスを防ぎ、データの一貫性と安全性を保つことができます。また、コードの可読性を向上させ、メンテナンスを容易にするため、複雑なプロジェクトにおいても開発がスムーズになります。適切なアクセス修飾子を使うことで、プログラムのセキュリティと構造を改善し、バグの発生を防ぐことができます。

  • public はどこからでもアクセス可能。
  • private はクラス内からのみアクセス可能。
  • protected は継承されたクラスからアクセス可能。

それぞれのアクセス修飾子を状況に応じて使い分けることで、より安全でメンテナンスしやすいコードを書くことができます。

ぜひ実際のコードにアクセス修飾子を使ってみて、効果を実感してください!

コメント

タイトルとURLをコピーしました