静的メンバの話

これまで、クラスを様々な角度からお話をしてきました。

今回はクラスの話の中でもクラスの機能について話をして行こうと思います。
 
今までこのブログで紹介したクラスはそこから作成したオブジェクトごとに情報を保持しでいました。つまり、オブジェクトごとにメンバのかかわりはありません。
これをまとめると、
「オブジェクト依存」と言い換えられるのではないでしょうか。
ここまでの話から、勘の言い方はここまでの話でピンと来たかもしれませんね。
 
オブジェクトごとにデータを持つのではなく、クラスが値を保持、処理したいときがあると思います。と、いうことはつまり、
「クラス全体に関連付けられる」といえると思います。
 
それでは、グローバル変数を使えばいいのではないか、といわれそうですが、オブジェクト指向のプログラム言語ではナンセンスですね。
 
それを解決するために用意されている機能として、静的フィールドや静的メソッドがあげられます。オブジェクトごとにコピーされることなく、常に一つしかないメンバと言い換えられるかもしれませんね。
 
さて、実際に、静的メンバ(静的フィールド・メソッドの総称)を使用する時は何をすればよいのしょうか?
静的と位置付けたいメンバの先頭(修飾子)にstaticとつけるだけです。
 
 それでは、実際に静的メソッドを使用してみましょう。
※しつこいようですが、「アイツ」がやってきます。
        {
    //フィールド
    double weight;
    double height;
 
    //静的フィールド
    public static string binomialName;
 
    //メソッド
    public string cry()
    {
        return "にゃ~";
    }
    public double Weight
    {
        get { return weight; }
        set { if (value > 0)weight = value; }
    }
    public double Height
    {
        get { return height; }
        set { if (value > 0)height = value; }
    }
    public void eat()
    {
        weight += 0.1;
        height += 00.1;
    }
    public void run()
    {
        weight -= 0.1;
    }
}

これでどうでしょうか?

おなじみのCatクラスに学名を表すbinomialNameを追加してみました。

で、実際にこれをどう使用するかといいますと。

Cat Tama = new Cat();
Tama.Height = 72.7;
Tama.Weight = 3.5;
Cat.binomialName = "Felis silvestris catus";

と、使います。

フォーマットとしては、

クラス名.静的フィールドの名前

で呼び出します。

 

他にも

//静的メソッド
public static string Description()
{
    return "学名は"+binomialName+"です";
}

をつけると、説明文とともに利用できます。

ここで、ポイントは、静的メソッドは通常のフィールドは利用できません。

静的メソッドで利用できるフィールドは静的フィールドのみです。

 

結構クラスの話をしてきたと思うのですが、まだまだ続きます。

でも、今回はこれにて解散!

ではでは~