■クラス class
クラスとは大雑把に言うと
データと、それを処理するメソッドが集まったものです。
処理(関数)は必ずクラスのメンバーとして記述されるので
クラスの存在は必要不可欠です。
では例として生徒1人分のデータを保持し
それを処理するクラスのサンプルコードを書いてみます。
【クラスの例】
class Student
{
// メンバ変数
private string name; // 名前
private int height; // 身長
// メンバ関数
public void Put()
{
Console.WriteLine("名前={0} 身長={1}", name, height );
}
}
【実行結果】
名前=yamada 身長=160
名前を保持するstring型と
身長を保持するint型をメンバーとして持ち、
名前と身長を出力する Put関数
を持っているクラスの例です。
メンバ変数やメンバ関数の頭に
private、public、といった修飾子が付いています。
publicと修飾されたメンバは、
クラスの外から参照可能です。
逆にprivateと修飾されたメンバは、
そのクラス内でのみ参照可能となります。
【アクセス修飾子を理解するためのサンプルコード】
using System;
namespace Sample
{
class Student
{
// メンバ変数
private string name; // 名前
private int height; // 身長
// メンバ関数
public void Put()
{
Console.WriteLine("名前={0} 身長={1}", name, height );
}
}
class Class1
{
static void Main(string[] args)
{
Student yamada = new Student();
// privateなメンバであるnameの値をクラス外から変更できません
// yamada.name = "yamada";
// publicなメンバであるPut関数を呼び出すことは可能です
yamada.Put();
}
}
}
【実行結果】
名前= 身長=0
名前と身長を格納していないので
このような実行結果となります。
初期化していないクラスのメンバ変数には
それぞれの型の既定値が入ります。
上記クラスは、そのままでは役に立ちません。
名前や身長といったメンバはprivateなので
クラスを利用する側で値を設定することができないからです。
ではなぜprivateなのかについては言わずもがなですが
せっかくクラス内にカプセル化したものをpublicとして公開すると
外部から好き勝手に内容を変更されてしまうためです。
そこで、メンバに初期値を設定する手段として
コンストラクタを用意して
名前や身長の初期値を設定できるようにしてみます。
コンストラクタとは
クラスのインスタンスを生成したときに
最初に実行される特殊なメンバ関数のことです。
【デフォルトコンストラクタを持ったクラスのサンプルコード】
using System;
namespace Sample
{
class Student
{
// メンバ変数
private string name; // 名前
private int height; // 身長
// メンバ関数
public void Put()
{
Console.WriteLine("名前={0} 身長={1}", name, height );
}
// デフォルトコンストラクタ
public Student()
{
name = "yamada";
height = 160;
}
}
class Class1
{
static void Main(string[] args)
{
Student stu = new Student();
stu.Put();
}
}
}
【実行結果】
名前=yamada 身長=160
これで、名前と身長の初期値が設定され、出力もできました。
Studentクラスのインスタンスを作ると
名前と身長の初期値がコンストラクタで設定されます。
【補足】
コンストラクタの修飾子はpublicと宣言します。
そうしないと、外部から呼び出せないからです。
仮にこれをprivateとしてもクラスを定義することはできますが
クラスのインスタンスを作成できません。
コンストラクタがprivateでは
それを呼び出すことができないからです。
デフォルトコンストラクタはパラメータを持ちません。
そのため、このままでは
クラスのインスタンスを作成する側から
名前や身長といったメンバ変数に
任意の初期値を与えることができません。
これを解決するのが
パラメータを持ったユーザ定義のコンストラクタです。
【ユーザ定義のパラメータを持つコンストラクタのサンプルコード】
using System;
namespace Sample
{
class Student
{
// メンバ変数
private string name; // 名前
private int height; // 身長
// メンバ関数
public void Put()
{
Console.WriteLine("名前={0} 身長={1}", name, height );
}
// ユーザ定義の引数を持つコンストラクタ
public Student(string n, int h)
{
name = n;
height = h;
}
}
class Class1
{
static void Main(string[] args)
{
// コンストラクタに引数で初期値を与えています。
Student stu = new Student("yamata", 160);
stu.Put();
}
}
}
【実行結果】
名前=yamada 身長=160
コンストラクタが引数を持つところに注目してください。
newでStudentクラスのインスタンスを作る時に
コンストラクタに名前と身長の初期値をパラメータとして与えています。
Copyright © 2008.07 - shougo suzaki
|