C#をつつく13ーコンストラクタ。うっかりミスを防ごう。
チッチッチチッチッチチッチッチチッチッチチッチッチチッチッチ
継承?残念、まだやることがあるよ。 前回の最後のサンプルプログラムの一部を見てみよう。
class Program
{
static void Main( string[ ] args ) {
Bird b = new Bird( );
b.Name = "インドリ";
b.Age = 29;
b.Talk( );
b.Name = "ドリィちゃん";
b.Age = -20;
b.Talk( );
Console.WriteLine(
"ドリィちゃん、ボクと同じ年齢なんだね♪" );
}
}
どう?何か気付かない?もっとおかしな点を狭めてみてみよう。Bird b = new Bird( ); b.Name = "インドリ"; b.Age = 29; b.Name = "ドリィちゃん"; b.Age = -20;一々名前と年齢を指定するなんて凄く面倒だよね。
だから・・・
Bird b = new Bird( "インドリ", 29 );って変数を作る際に指定できれば便利だし、 名前と年齢の値の指定忘れを防げるよね。 勿論、プログラム言語を作った偉い人はその方法を用意しているよ。
それがコンストラクタなんだ。
では、さっそくコンストラクタを作ってみよう。
public class Bird
{
private string m_Name;
public string Name {
get { return m_Name; }
set { m_Name = value; }
}
private int m_Age;
public int Age {
get { return m_Age; }
set {
if ( value > 0 ) m_Age = value;
}
}
//コンストラクタ
public Bird( string name, int age ) {
this.Name = name;
this.Age = age;
}
public void Talk( ) {
Console.WriteLine( "ワタシハ{0}。年は{1}だよ。",
this.m_Name, this.m_Age );
}
}
Birdクラスのコードをこう変えてコンパイルしてみよう。すると・・・引数を '0' 個指定できる、メソッド 'Bird' のオーバーロードはありません。
とエラーが出るよね。これでいいんだ。 こうすることにより名前と年齢を指定し忘れる事がなくなるピヨ。 鳥頭のボクには最適な機能だね。こうすると使用するプログラムは次の様になるよ。
class Program
{
static void Main( string[ ] args ) {
//簡単だ
Bird b = new Bird( "インドリ", 29);
b.Talk( );
b.Name = "ドリィちゃん";
b.Age = -20;
b.Talk( );
Console.WriteLine(
"ドリィちゃん、ボクと同じ年齢なんだね♪" );
}
}
コンストラクタの部分はこれでお終い。でもひとつ注意があるピヨ。それは・・・コンストラクタは必要最低限定義しよう ということピヨ。コンストラクタを覚えたての頃は嬉しくて「よーし全部のプロパティを指定できるコンストラクタを作るぞ!」 と思ってしまうかもしれない。だけど、コンストラクタはあくまでも 絶対必要なものだけを指定するものなんだ。 注意してね。