メインメニューを開く

差分

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

2,969 バイト追加, 2019年7月22日 (月) 13:31
ページの作成:「標準で準備されているクラスも十分に便利なんだけど…メソッドを追加したいなぁなんて思ったことがあると思うんだ。標準…」
標準で準備されているクラスも十分に便利なんだけど…メソッドを追加したいなぁなんて思ったことがあると思うんだ。標準のクラスにメソッドを追加する方法があって、それを「拡張メソッド」っていうんだよ。その方法を紹介したいと思うんだ。

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

<source lang="csharp">
public static class DoubleEx
{

}
</source>

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

<source lang="csharp">
public static class DoubleEx
{
public static Double TwoPower(this Double Value)
{
return Value * Value;
}
}
</source>

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

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

<source lang="csharp">
private void Button_Click(object sender, RoutedEventArgs e)
{
Double hoge = 3;
MessageBox.Show(hoge.TwoPower().ToString());
}
</source>

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

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

<source lang="csharp">
public static class DoubleEx
{
public static Double Power(this Double Value, Int32 Param)
{
return Math.Pow(Value, Param);
}
}
</source>

これで、パラメーターが渡せるんだよ。使うときは、以下のようにしてね。
<source lang="csharp">
private void Button_Click(object sender, RoutedEventArgs e)
{
Double hoge = 3;
MessageBox.Show(hoge.Power(3).ToString());
}
</source>
これで、3×3×3=27が表示されるんだよ。

== 参考サイト ==
[http://ufcpp.net/study/csharp/sp3_extension.html 拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C]

[[Category:C♯]]