libro
www.tuyano.com
初心者のためのC#プログラミング入門

クラス・インスタンス・継承 (3/6)

作成:2013-08-10 10:38
更新:2013-08-10 10:38

■アクセス修飾子について

今回作成したMyObjectを見てみると、フィールドやメソッドの定義の前に「public」というものが付けられていますね。これは、実は重要なのです。このpublicというのをすべて削除すると、MyObjectインスタンスを作っても、その中のフィールドやメソッドが使えなくなってしまいます。

このpublicという単語は「アクセス修飾子」と呼ばれるものなのです。これは、そのフィールドやメソッドが「どの範囲でアクセス可能か」を指定するものです。

クラスや、その中にあるフィールドやメソッドは、すべてどこからでも使えるというわけではありません。アクセス修飾子をつけることで、どの範囲内で利用できるかを指定することができるのです。用意されている修飾子には以下の様なものがあります。

public――もっとも幅広いアクセスが可能なものです。すべてのものから利用可能です。
internal――これは同じアセンブル内のものからアクセス可能です。要するに、「作成しているプログラムの中では全部使える」と考えてよいでしょう。
protected――そのクラスおよびその派生クラス(そのクラスをもとに作られたもの)でのみ利用可能です。
private――クラス内(インスタンス内)でのみ使えます。外部からは一切使えません。

クラスなどは、アクセス修飾子を省略するとinternalとして扱われます。またクラス内にあるメンバ(フィールドやメソッドなど)については、アクセス修飾子を省略するとprivateとして扱われます。先ほどpublicを削除するとMainnew MyObjectしてもフィールドやメソッドが使えなくなってしまいましたが、これも「privateになり、インスタンスの外部から一切呼び出せなくなった」ためだったのです。

(なお、protectedでは「派生クラス」という言葉が使われていますが、これは次の「継承」というものの説明で触れる予定です)

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

using System;

namespace myapp
{
    class Program
    {
        public static void Main(string[] args)
        {
            MyObject obj = new MyObject();
            obj.name = "つやの";
            obj.age = 123;
            obj.printData();
            Console.ReadKey(); // キーを押すまで待つ
        }
    }
    
    class MyObject
    {
        public string name = "(noname)";
        public int age = 0;
        
        public void printData()
        {
            Console.WriteLine("名前:{0}, 年齢:{1}歳", name, age);
        }
    }
}
※関連コンテンツ

「初心者のためのC#プログラミング入門」に戻る