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

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

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

■インスタンスの働きについて

ここで、クラスから作られる「インスタンス」というものがどういうものなのか、もう少し詳しく働きについて見ていくことにしましょう。

・なぜインスタンスが必要か?
クラスというのは、基本的にそのままで使うわけではありません。クラスをもとに、実際に操作する部品(←これがインスタンス)を作り、それを変数に入れて利用します。なぜそんなことをするか?といえば、同じ部品を複数使えるようにするためです。

例えば、「ウインドウ」のクラスがあったとしましょう。これが、「クラスをそのまま使う」という形だと、このウインドウクラス1つだけしか使えません。2枚のウインドウを表示したければ、2つクラスを用意しないといけません。

が、「クラスを元にインスタンスを作って操作する」というやり方なら、ウインドウのクラスから必要に応じていくつでもインスタンスを作り、何枚ものウインドウを表示させることができます。

このインスタンスの作成には、前述のようにnewという予約語を使います。その後に「new ○○();」というようにクラス名と引数の()を付けて記述することで、そのクラスのインスタンスを作成できます。(なお、ここでは引数は何も指定していませんが、引数を設定してnewするようなこともできます。これについては改めて……)

・フィールド/メソッドの呼び出し
obj.name = "つやの";
obj.age = 123;
obj.printData();
インスタンスを作成したら、その中のフィールドに値を設定したり、メソッドを呼び出したりしています。インスタンス内のフィールドやメソッドは、このように「○○.△△」といった具合に、インスタンスが保管されている変数名の後にドットを付け、その後にフィールド名やメソッドの呼び出しを記述します。これで、そのインスタンス内のフィールドの値を読み書きしたりメソッドを実行させたりできます。

・クラス内のフィールド/メソッドの指定
ここで、printDataメソッドの定義部分に目を向けてください。その中では、nameageといったフィールドが変数名を指定して使われています。このように、クラス内に定義されるメソッドなどの内部では、そのクラス内(正確には、そのクラスから作成されているインスタンス内)のフィールドやメソッドは、単に名前を指定するだけで利用することができます。

・インスタンスフィールド/インスタンスメソッド
インスタンスは、クラスをまるごとコピーして作られます。ということは、インスタンスごとにそれぞれフィールドも用意されている、すなわち「各インスタンスごとに値を保管できる」ということでもあります。つまり、フィールドというのは、基本的に「そのインスタンスで使う値を保管する」ためのものなのです。このため、一般的なフィールドを「インスタンスフィールド」と呼びます。

同様に、インスタンス内から呼び出して利用するメソッドのことを「インスタンスメソッド」と呼びます。

(※実は、クラスに値を保管する「クラスフィールド」や、クラスからメソッドを呼び出せる「クラスメソッド」といったものもあります。これらについては改めて触れる予定です)

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

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#プログラミング入門」に戻る