
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.");
}
}上記の例では、publicFieldとPublicMethodは、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: クラス内部からのアクセス
}
}上記の例では、privateFieldとPrivateMethodは、MyClassの内部でのみ使用できます。AccessPrivateメソッドは、MyClassの内部からprivateFieldとPrivateMethodにアクセスする例を示しています。
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: 派生クラスからのアクセス
}
}上記の例では、protectedFieldとProtectedMethodは、MyBaseClassとMyDerivedClassからアクセスできます。MyDerivedClassのAccessProtectedメソッドは、MyBaseClassのprotectedメンバーにアクセスする例を示しています。
参考リンク
まとめ
C#のアクセス修飾子(public, private, protected)は、クラスやメンバーのアクセス範囲を制御し、カプセル化を促進するために不可欠です。publicはどこからでもアクセス可能、privateはクラス内部のみアクセス可能、protectedはクラス自身と派生クラスからアクセス可能です。これらの修飾子を適切に使用することで、コードの安全性と保守性を高めることができます。これらのアクセス修飾子を理解し、適切に使いこなすことで、より堅牢で保守性の高いC#アプリケーションを開発できるようになります。

