VB.NET2005です。
関数func_A、func_B、func_C、func_D、func_E…があります。
これらを処理モード(intSyoriMode)の内容により、
呼んだり呼ばなかったりします。
登録した関数配列?的なもので、その配列の数分ループさせたいのですが、
そんなことは出来ますか?
-------------------------------------------------------------
(例)
■intSyoriMode=1のときは、
関数配列にfunc_A、func_C、func_Dを登録し、この3つの関数を実行します。
■intSyoriMode=2のときは、
関数配列にfunc_B、func_D、func_Eを登録し、この3つの関数を実行します。
-------------------------------------------------------------
このような分岐が大量にありますので、関数配列的なことが出来るので
あれば、そうしたいのです。
もちろん地道に条件を記述すれば目的は果たせますが。
関数配列といいますか、そもそも関数を変数で呼び出すことはできるのでしょうか。
教えて下さい。
何卒よろしくお願い申し上げます。
呼びたい各関数の引数と戻り値の型が同じであるならできるでしょう。
呼びたい関数と同じ引数型、同じ戻り値型のデリゲート型を宣言して、その配列を作ればよいです。
例えば、各関数が Integer を引数に取り Integer を返すものならば、
' 名前はもっと適切なものにしてくださいな
Delegate Sub FunctionDelegate( ByVal arg As Integer ) As Integer
Dim delegates(3) As FunctionDelegate
delegates(0) = func_A
delegates(1) = func_A
delegates(2) = func_A
For i As Integer = 0 To 2
delegates(i)(10)
Next i
みたいな感じで。
# VB.NET の配列宣言の書き方ってしっくりこないなぁ…
# 構文が間違えていたらごめんなさいね。
早速のレスありがとうございました。
Delegate Function FunctionDelegate( ByVal arg As Integer ) As Integer
Dim delegates(3) As FunctionDelegate
delegates(0) = AddressOf func_A
delegates(1) = AddressOf func_B
delegates(2) = AddressOf func_C
For i As Integer = 0 To 2
delegates(i)(10)
Next i
といった感じで実現出来ました。
ありがとうございました。
あ、そっか。AddressOf が要るんだ。
いや、普段 VB やってないもので。もうしわけない。
ついでに書くと:
> Dim delegates(3) As FunctionDelegate
VB の場合、(3) は配列の個数ではなく、インデックスの最大値を
意味するので、0〜2 を使う場合は Dim delegates(2) As FunctionDelegate です。