クラス・インスタンス・継承 (3/6)
作成:2013-08-10 10:38
更新:2013-08-10 10:38
更新:2013-08-10 10:38
■アクセス修飾子について
今回作成したMyObjectを見てみると、フィールドやメソッドの定義の前に「public」というものが付けられていますね。これは、実は重要なのです。このpublicというのをすべて削除すると、MyObjectインスタンスを作っても、その中のフィールドやメソッドが使えなくなってしまいます。
このpublicという単語は「アクセス修飾子」と呼ばれるものなのです。これは、そのフィールドやメソッドが「どの範囲でアクセス可能か」を指定するものです。
クラスや、その中にあるフィールドやメソッドは、すべてどこからでも使えるというわけではありません。アクセス修飾子をつけることで、どの範囲内で利用できるかを指定することができるのです。用意されている修飾子には以下の様なものがあります。
public――もっとも幅広いアクセスが可能なものです。すべてのものから利用可能です。
internal――これは同じアセンブル内のものからアクセス可能です。要するに、「作成しているプログラムの中では全部使える」と考えてよいでしょう。
protected――そのクラスおよびその派生クラス(そのクラスをもとに作られたもの)でのみ利用可能です。
private――クラス内(インスタンス内)でのみ使えます。外部からは一切使えません。
クラスなどは、アクセス修飾子を省略するとinternalとして扱われます。またクラス内にあるメンバ(フィールドやメソッドなど)については、アクセス修飾子を省略するとprivateとして扱われます。先ほどpublicを削除するとMainでnew MyObjectしてもフィールドやメソッドが使えなくなってしまいましたが、これも「privateになり、インスタンスの外部から一切呼び出せなくなった」ためだったのです。
(なお、protectedでは「派生クラス」という言葉が使われていますが、これは次の「継承」というものの説明で触れる予定です)
このpublicという単語は「アクセス修飾子」と呼ばれるものなのです。これは、そのフィールドやメソッドが「どの範囲でアクセス可能か」を指定するものです。
クラスや、その中にあるフィールドやメソッドは、すべてどこからでも使えるというわけではありません。アクセス修飾子をつけることで、どの範囲内で利用できるかを指定することができるのです。用意されている修飾子には以下の様なものがあります。
public――もっとも幅広いアクセスが可能なものです。すべてのものから利用可能です。
internal――これは同じアセンブル内のものからアクセス可能です。要するに、「作成しているプログラムの中では全部使える」と考えてよいでしょう。
protected――そのクラスおよびその派生クラス(そのクラスをもとに作られたもの)でのみ利用可能です。
private――クラス内(インスタンス内)でのみ使えます。外部からは一切使えません。
クラスなどは、アクセス修飾子を省略するとinternalとして扱われます。またクラス内にあるメンバ(フィールドやメソッドなど)については、アクセス修飾子を省略するとprivateとして扱われます。先ほどpublicを削除するとMainでnew MyObjectしてもフィールドやメソッドが使えなくなってしまいましたが、これも「privateになり、インスタンスの外部から一切呼び出せなくなった」ためだったのです。
(なお、protectedでは「派生クラス」という言葉が使われていますが、これは次の「継承」というものの説明で触れる予定です)
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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); } } }
※関連コンテンツ