C#のアクセス修飾子(public, private, protected)の解説

先生

C#のアクセス修飾子、分かってるつもり?public, private, protectedの違いをしっかり理解して、コードをレベルアップさせよう!

C# アクセス修飾子とは?基本を理解しよう

C#におけるアクセス修飾子は、クラスやそのメンバー(フィールド、メソッドなど)のアクセス範囲を制御するためのキーワードです。適切なアクセス修飾子を使用することで、カプセル化を促進し、コードの安全性と保守性を高めることができます。C#には、public, private, protected, internal, protected internal の5つの主要なアクセス修飾子があります。この記事では、public, private, protectedの3つに焦点を当てて解説します。

これらの修飾子は、コードの可読性と保守性を向上させる上で非常に重要です。適切に使用することで、外部からの不正なアクセスを防ぎ、プログラムの安定性を保つことができます。

public: どこからでもアクセス可能

publicアクセス修飾子は、最も広いアクセス範囲を持ちます。publicとして宣言されたメンバーは、クラスの内部、外部、派生クラスなど、どこからでもアクセスできます。

public class MyClass
{
    public int publicField;

    public void PublicMethod()
    {
        Console.WriteLine("Public method called.");
    }
}

上記の例では、publicFieldPublicMethodは、MyClassのインスタンスを作成したすべての場所からアクセスできます。

private: クラス内部からのみアクセス可能

privateアクセス修飾子は、最も制限の厳しいアクセス範囲を持ちます。privateとして宣言されたメンバーは、そのメンバーが宣言されたクラスの内部からのみアクセスできます。派生クラスや外部のクラスからはアクセスできません。

public class MyClass
{
    private int privateField;

    private void PrivateMethod()
    {
        Console.WriteLine("Private method called.");
    }

    public void AccessPrivate()
    {
        privateField = 10; // OK: クラス内部からのアクセス
        PrivateMethod();   // OK: クラス内部からのアクセス
    }
}

上記の例では、privateFieldPrivateMethodは、MyClassの内部でのみ使用できます。AccessPrivateメソッドは、MyClassの内部からprivateFieldPrivateMethodにアクセスする例を示しています。

protected: クラス自身と派生クラスからアクセス可能

protectedアクセス修飾子は、宣言されたクラス自身、およびそのクラスから派生したクラスからアクセスできます。外部のクラスからはアクセスできません。

public class MyBaseClass
{
    protected int protectedField;

    protected void ProtectedMethod()
    {
        Console.WriteLine("Protected method called.");
    }
}

public class MyDerivedClass : MyBaseClass
{
    public void AccessProtected()
    {
        protectedField = 20; // OK: 派生クラスからのアクセス
        ProtectedMethod();   // OK: 派生クラスからのアクセス
    }
}

上記の例では、protectedFieldProtectedMethodは、MyBaseClassMyDerivedClassからアクセスできます。MyDerivedClassAccessProtectedメソッドは、MyBaseClassprotectedメンバーにアクセスする例を示しています。

参考リンク

まとめ

C#のアクセス修飾子(public, private, protected)は、クラスやメンバーのアクセス範囲を制御し、カプセル化を促進するために不可欠です。publicはどこからでもアクセス可能、privateはクラス内部のみアクセス可能、protectedはクラス自身と派生クラスからアクセス可能です。これらの修飾子を適切に使用することで、コードの安全性と保守性を高めることができます。これらのアクセス修飾子を理解し、適切に使いこなすことで、より堅牢で保守性の高いC#アプリケーションを開発できるようになります。