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

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

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

Re[2]: メソッド内の実行コードを引数にて指定する方法


(過去ログ 163 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■94244 / inTopicNo.1)  メソッド内の実行コードを引数にて指定する方法
  
□投稿者/ 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)


引用返信 編集キー/
■94245 / inTopicNo.2)  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)
引用返信 編集キー/
■94246 / inTopicNo.3)  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
引用返信 編集キー/
■94247 / inTopicNo.4)  Re[2]: メソッド内の実行コードを引数にて指定する方法
□投稿者/ Mira (4回)-(2020/03/26(Thu) 14:40:36)
ありがとうございます

ラムダ式挑戦してみます
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -