「標準のクラスにメソッドを追加する」の版間の差分

提供: とある社畜の頭脳整理
ナビゲーションに移動 検索に移動
(ページの作成:「標準で準備されているクラスも十分に便利なんだけど…メソッドを追加したいなぁなんて思ったことがあると思うんだ。標準…」)
 
 
(同じ利用者による、間の3版が非表示)
4行目: 4行目:
 
今回はわかりやすくDoubleクラスにメソッドを追加してみようと思うんだ。まずは拡張メソッドを定義するためのクラスを追加するんだよ。クラス名は何でもいいんだ。でも少し修正が必要になるんだよ。拡張メソッドを定義するクラスは「static」じゃないといけないんだ。
 
今回はわかりやすくDoubleクラスにメソッドを追加してみようと思うんだ。まずは拡張メソッドを定義するためのクラスを追加するんだよ。クラス名は何でもいいんだ。でも少し修正が必要になるんだよ。拡張メソッドを定義するクラスは「static」じゃないといけないんだ。
  
<source lang="csharp">
+
<syntaxhighlight lang="C#">
 
public static class DoubleEx
 
public static class DoubleEx
 
{
 
{
  
 
}
 
}
</source>
+
</syntaxhighlight>
  
 
== メソッドの追加 ==
 
== メソッドの追加 ==
 
いよいよ、メソッドを追加するよ。今回は2乗した値を返却するメソッドを追加してみるんだ。追加するメソッドも「static」で定義するんだよ。それと、引数がちょっと特殊な感じになるんだ。
 
いよいよ、メソッドを追加するよ。今回は2乗した値を返却するメソッドを追加してみるんだ。追加するメソッドも「static」で定義するんだよ。それと、引数がちょっと特殊な感じになるんだ。
  
<source lang="csharp">
+
<syntaxhighlight lang="C#">
 
public static class DoubleEx
 
public static class DoubleEx
 
{
 
{
22行目: 22行目:
 
     }
 
     }
 
}
 
}
</source>
+
</syntaxhighlight>
  
 
引数の一つ目に「this」を付けて、型と引数を定義するんだ。そうすると、引数(上記の場合は「Value」)にその自身のインスタンスがわたってくるんだよ。今回は2乗して返却したいので、引数(「Value」)を2乗して返却しているんだ。
 
引数の一つ目に「this」を付けて、型と引数を定義するんだ。そうすると、引数(上記の場合は「Value」)にその自身のインスタンスがわたってくるんだよ。今回は2乗して返却したいので、引数(「Value」)を2乗して返却しているんだ。
29行目: 29行目:
 
メソッドの定義ができたので使ってみるよ。
 
メソッドの定義ができたので使ってみるよ。
  
<source lang="csharp">
+
<syntaxhighlight lang="C#">
 
private void Button_Click(object sender, RoutedEventArgs e)
 
private void Button_Click(object sender, RoutedEventArgs e)
 
{
 
{
35行目: 35行目:
 
     MessageBox.Show(hoge.TwoPower().ToString());
 
     MessageBox.Show(hoge.TwoPower().ToString());
 
}
 
}
</source>
+
</syntaxhighlight>
  
 
こんな感じで実行すると…上記の場合はメッセージボックスに「9」って表示されるんだ。
 
こんな感じで実行すると…上記の場合はメッセージボックスに「9」って表示されるんだ。
42行目: 42行目:
 
上記の例だと2乗固定なんだけど…パラメーターで乗数を渡せたら汎用的に利用できるよね。そこで、引数を追加してみようと思うんだ。っていっても、すごく簡単で普通に引数を追加するだけなんだよ。
 
上記の例だと2乗固定なんだけど…パラメーターで乗数を渡せたら汎用的に利用できるよね。そこで、引数を追加してみようと思うんだ。っていっても、すごく簡単で普通に引数を追加するだけなんだよ。
  
<source lang="csharp">
+
<syntaxhighlight lang="C#">
 
public static class DoubleEx
 
public static class DoubleEx
 
{
 
{
50行目: 50行目:
 
     }
 
     }
 
}
 
}
</source>
+
</syntaxhighlight>
  
 
これで、パラメーターが渡せるんだよ。使うときは、以下のようにしてね。
 
これで、パラメーターが渡せるんだよ。使うときは、以下のようにしてね。
<source lang="csharp">
+
<syntaxhighlight lang="C#">
 
private void Button_Click(object sender, RoutedEventArgs e)
 
private void Button_Click(object sender, RoutedEventArgs e)
 
{
 
{
59行目: 59行目:
 
     MessageBox.Show(hoge.Power(3).ToString());
 
     MessageBox.Show(hoge.Power(3).ToString());
 
}
 
}
</source>
+
</syntaxhighlight>
 
これで、3×3×3=27が表示されるんだよ。
 
これで、3×3×3=27が表示されるんだよ。
  

2019年7月26日 (金) 16:51時点における最新版

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

クラスの追加

今回はわかりやすく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