C#のクラスやメソッドにアクセス修飾子を付けることで、プログラムの構造を整理し、安全性を高めることができます。本記事では、C#における主要なアクセス修飾子をわかりやすく解説し、それぞれの使い方と役割を具体例を交えて説明します。
アクセス修飾子とは?
アクセス修飾子とは、クラス、メソッド、プロパティなどのメンバーに対して「どこからアクセスできるか」を制御するためのキーワードです。適切に使用することで、データの隠蔽やコードの保守性向上が期待できます。
C#で利用できる主なアクセス修飾子は以下の5つです。
public
private
protected
internal
protected internal
クラスや構造体のメンバーについてはこの5種類全てを選べる一方で、トップ レベルの型には public, internal の2つのうちのどちらかだけが利用可能です。
各アクセス修飾子の特徴と使い方
public(公開)
public
は最もオープンなアクセス修飾子で、どこからでもアクセス可能です。
使用例
public class Example
{
public string Name { get; set; }
public void PrintName()
{
Console.WriteLine(Name);
}
}
- 使いどころ:
- 外部のコードから利用されるメソッドやプロパティに使用。
- APIやライブラリの公開メソッドなど。
private(非公開)
private
は、定義されたクラス内でのみアクセス可能です。他のクラスや外部からは直接触れられません。
使用例
public class Example
{
private int _id;
public void SetId(int id)
{
_id = id;
}
public int GetId()
{
return _id;
}
}
- 使いどころ:
- クラスの内部状態を保護したい場合。
- 外部に公開する必要がないデータやロジック。
protected
protected
は、定義されたクラスおよびその派生クラスでアクセス可能です。
使用例
public class BaseClass
{
protected string ProtectedProperty { get; set; }
}
public class DerivedClass : BaseClass
{
public void AccessProtectedProperty()
{
ProtectedProperty = "Accessible in derived class";
Console.WriteLine(ProtectedProperty);
}
}
- 使いどころ:
- 継承関係において、子クラスでのみ使わせたいメンバーに使用。
internal(アセンブリ内公開)
internal
は、同じアセンブリ(プロジェクト)内でのみアクセス可能です。
.netでクラスを追加した際にデフォルトで使用されるアクセス修飾子です。
使用例
internal class InternalClass
{
internal void DisplayMessage()
{
Console.WriteLine("This is an internal method.");
}
}
- 使いどころ:
- アプリケーション内でのみ利用されるクラスやメソッド。
- 外部公開しないライブラリのユーティリティメソッド。
protected internal
protected internal
は、同じアセンブリ内および派生クラスでアクセス可能な範囲を提供します。
使用例
public class BaseClass
{
protected internal void ProtectedInternalMethod()
{
Console.WriteLine("This is a protected internal method.");
}
}
public class DerivedClass : BaseClass
{
public void CallProtectedInternalMethod()
{
ProtectedInternalMethod();
}
}
- 使いどころ:
- アセンブリ内と継承関係のクラスに限定したアクセスを許可する場合。
アクセス修飾子の比較表
修飾子 | 同じクラス | 派生クラス | 同じアセンブリ | 外部(他アセンブリ) |
---|---|---|---|---|
public | ✅ | ✅ | ✅ | ✅ |
private | ✅ | ❌ | ❌ | ❌ |
protected | ✅ | ✅ | ❌ | ❌ |
internal | ✅ | ❌ | ✅ | ❌ |
protected internal | ✅ | ✅ | ✅ | ❌ |
アクセス修飾子の選び方
- データを隠したい →
private
を使用。 - 継承クラスで利用したい →
protected
を検討。 - プロジェクト内のみで使う機能 →
internal
を適用。 - どこでも使える汎用的な機能 →
public
を設定。
適切なアクセス修飾子を選ぶことで、コードの可読性やセキュリティが向上します。
基本は狭い範囲のアクセス修飾子を使用しておき、必要に応じて緩めるようにすることをお勧めします。
まとめ
C#のアクセス修飾子は、コードの保守性やセキュリティを高めるために重要な役割を果たします。本記事で紹介した各修飾子の特徴と使いどころを参考に、適切なアクセス制御を行いましょう。
コメント