C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

メソッド内の実行コードを引数にて指定する方法 /Mira (20/03/26(Thu) 14:13) #94244
Re[1]: メソッド内の実行コードを引数にて指定する方法 /魔界の仮面弁士 (20/03/26(Thu) 14:29) #94246
Re[1]: メソッド内の実行コードを引数にて指定する方法 /Hongliang (20/03/26(Thu) 14:24) #94245
  └ Re[2]: メソッド内の実行コードを引数にて指定する方法 /Mira (20/03/26(Thu) 14:40) #94247 解決済み


親記事 / ▼[ 94246 ] ▼[ 94245 ]
■94244 / 親階層)  メソッド内の実行コードを引数にて指定する方法
□投稿者/ Mira (3回)-(2020/03/26(Thu) 14:13:35)

分類:[.NET 全般] 

こんにちは
タイトルの技法について教えてください

メソッド内の一部のコードを呼び出し時に指定するような技法があったと記憶していますが
名称がわからず検索うまくできません

イメージ
Private Function Sample(コードを引き渡す型) As Integer
   Dim A as Integer = 1
   Dim B as Integer = 2
   Dim C as Integer = 3

   可変部分のコード

   Return C
End Sub

呼び出し
Sample(C=A+B)
Sample(C=A-B)


[ □ Tree ] 返信 編集キー/

▲[ 94244 ] / 返信無し
■94246 / 1階層)  Re[1]: メソッド内の実行コードを引数にて指定する方法
□投稿者/ 魔界の仮面弁士 (2646回)-(2020/03/26(Thu) 14:29:42)
No94244 (Mira さん) に返信
> メソッド内の一部のコードを呼び出し時に指定するような技法があったと記憶していますが
> 名称がわからず検索うまくできません

デリゲート、イベント、ラムダ式、式木、字句解析などの手段があります。


Sub Main()
  Dim C1 As Integer = Sample("A+B")
  Dim C2 As Integer = Sample("A-B")
End Sub

Function Sample(Expression As String) As Integer
  Dim A As Integer = 1
  Dim B As Integer = 2
  Dim tbl As New DataTable()
  tbl.Columns.Add("A", GetType(Integer))
  tbl.Columns.Add("B", GetType(Integer))
  tbl.Columns.Add("C", GetType(Integer), Expression)
  tbl.Rows.Add(A, B).AcceptChanges()
  Return CInt(tbl.Rows(0)!C)
End Function

------------

Function Sample(Proc As Func(Of Integer, Integer, Integer)) As Integer
  Dim A As Integer = 1
  Dim B As Integer = 2
  Return Proc(A, B)
End Function


Sub Main()
  Dim C1 As Integer = Sample(Function(x, y) x + y)
  Dim C2 As Integer = Sample(Function(x, y) x - y)
End Sub
[ 親 94244 / □ Tree ] 返信 編集キー/

▲[ 94244 ] / ▼[ 94247 ]
■94245 / 1階層)  Re[1]: メソッド内の実行コードを引数にて指定する方法
□投稿者/ Hongliang (976回)-(2020/03/26(Thu) 14:24:37)
ラムダ式とデリゲート…のことでしょうか?

' Func(Of Integer, Integer, Integer)はInteger2つを引数にとりIntegerを返すデリゲート
Function Sample(method As Func(Of Integer, Integer, Integer)) As Integer
Return method(1, 2)
End Function

' Function/Subで始まるのがラムダ式
' a, bの型はSampleの引数がFunc(Of Integer, Integer, Integer)であることから推論される
Dim c As Integer
c = Sample(Function(a, b) a + b)
c = Sample(Function(a, b) a - b)
[ 親 94244 / □ Tree ] 返信 編集キー/

▲[ 94245 ] / 返信無し
■94247 / 2階層)  Re[2]: メソッド内の実行コードを引数にて指定する方法
□投稿者/ Mira (4回)-(2020/03/26(Thu) 14:40:36)
ありがとうございます

ラムダ式挑戦してみます
解決済み
[ 親 94244 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -