004.2. [★]アクセス修飾子とは

過去のブログのアーカイブ
この記事は前身のブログのアーカイブを引き継いだものです. 画像が正しく表示できないなど,コンテンツの表示に問題がある恐れがあります.

クラスを扱っていく時に大事になるのがアクセス修飾子、これは主にセキュリティ・バグを抑えるためにあります。

この記事はオブジェクト指向についてある程度理解している人向けです。
プログラミング初心者向けの記事ではないので、プログラミング初心者の方はむしろ読まないほうがいいです。

アクセス修飾子とは

アクセス修飾子は、そのメソッドやクラスなどのメンバーがどこからならアクセスできるのかを定義します。
大雑把に分けてpublicとinternal,privateにわかれます。まずはその比較表を見てみましょう

同じクラスから 同じプログラムから プログラムの外から
public
internal ×
private × ×

publicをつければどこからでもアクセスできます。言い換えれば、序盤はpublicをつけておけば間違いないです。

privateについて

まずはprivateの説明です。同じクラス内からのみアクセスできます。

public class A
{
    private static int Value = 10;
    public void Test()
    {
        Console.WriteLione(A.Value);
        // アクセスできる
    }
}
public class B
{
    public void Test()
    {
        Console.WriteLine(A.Value);
        // アクセスできない
    }
}

このように、クラスの外からはアクセスできないですが、同じクラスからならアクセスできます。
privateはクラスの中からのみ使うもの。そしてクラスの外からは使わせたくない、または使う必要のないものに設定します。

internalについて

internalは同じプログラムからならどこからでもアクセスできます。

public class A
{
    internal static int Value = 10;
    public void Test()
    {
        Console.WriteLione(A.Value);
        // アクセスできる
    }
}
public class B
{
    public void Test()
    {
        Console.WriteLine(A.Value);
        // アクセスできる
    }
}

プログラムを書いてコンパイルした後も外からアクセスされる恐れがあります。なので、外からアクセスされることを目的に作ってない場合は、基本的にinternalかprivateを設定することになります。

publicについて

逆に外からアクセスされるのを目的に作る場合はpublicをつけることになります。
また今後出てきますが、ライブラリを作成する時なんかによく使いますね。
ただ、外から使われたくないものもありますよね。セキュリティに関わることならなおさらです。その時はinternal以下のアクセス修飾子をつけるように心がけましょう

まとめ

privateは同じクラスからのみ
internalは同じプログラムからのみ
publicはどこからでもアクセスできる
publicつけておけば間違いはないけど、セキュリティ面では問題がある