標準のクラスにメソッドを追加する

提供: とある社畜の頭脳整理
ナビゲーションに移動 検索に移動

標準で準備されているクラスも十分に便利なんだけど…メソッドを追加したいなぁなんて思ったことがあると思うんだ。標準のクラスにメソッドを追加する方法があって、それを「拡張メソッド」っていうんだよ。その方法を紹介したいと思うんだ。

クラスの追加

今回はわかりやすくDoubleクラスにメソッドを追加してみようと思うんだ。まずは拡張メソッドを定義するためのクラスを追加するんだよ。クラス名は何でもいいんだ。でも少し修正が必要になるんだよ。拡張メソッドを定義するクラスは「static」じゃないといけないんだ。

public static class DoubleEx
{

}

メソッドの追加

いよいよ、メソッドを追加するよ。今回は2乗した値を返却するメソッドを追加してみるんだ。追加するメソッドも「static」で定義するんだよ。それと、引数がちょっと特殊な感じになるんだ。

public static class DoubleEx
{
    public static Double TwoPower(this Double Value)
    {
        return Value * Value;
    }
}

引数の一つ目に「this」を付けて、型と引数を定義するんだ。そうすると、引数(上記の場合は「Value」)にその自身のインスタンスがわたってくるんだよ。今回は2乗して返却したいので、引数(「Value」)を2乗して返却しているんだ。

メソッドの使用

メソッドの定義ができたので使ってみるよ。

private void Button_Click(object sender, RoutedEventArgs e)
{
    Double hoge = 3;
    MessageBox.Show(hoge.TwoPower().ToString());
}

こんな感じで実行すると…上記の場合はメッセージボックスに「9」って表示されるんだ。

引数を追加したい場合

上記の例だと2乗固定なんだけど…パラメーターで乗数を渡せたら汎用的に利用できるよね。そこで、引数を追加してみようと思うんだ。っていっても、すごく簡単で普通に引数を追加するだけなんだよ。

public static class DoubleEx
{
    public static Double Power(this Double Value, Int32 Param)
    {
        return Math.Pow(Value, Param);
    }
}

これで、パラメーターが渡せるんだよ。使うときは、以下のようにしてね。

private void Button_Click(object sender, RoutedEventArgs e)
{
    Double hoge = 3;
    MessageBox.Show(hoge.Power(3).ToString());
}

これで、3×3×3=27が表示されるんだよ。

参考サイト

拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C