将子例程作为参数传递给另一个子例程

时间:2015-11-22 09:18:21

标签: c# vb.net

我写了一个从访问数据库表创建excel文件的子程序。 我传递给sub一些参数,所以我可以重用它为我的项目中的任何访问表。

我想添加另一个参数,但我无法弄清楚如何做到这一点:我需要我创建的每个excel文件都有不同的夏季工作表,所以为了做到这一点,我需要传递一个不同的子作为参数(就像他们在Jquery中一样)。所以我的问题是如何将子例程作为参数传递给另一个子例程? ExportToExcelFromAccess()子将执行保存excel文件之前传递的子。

标记C#,我假设在C#中传递方法与VB

非常相似
Public Sub ExportToExcelFromAccess(ByVal accessFilePath As String, ByVal accesspassword As String, ByVal AccessFileTable As String, ByVal exWbNameForTempFolder As String, ByVal xlWsName As String, ByVal promtTheUserBeofore As Boolean, Optional ByVal columnsNames() As String = Nothing)

' doing stuff

end sub

2 个答案:

答案 0 :(得分:1)

为了完全按照你的要求你可以使用lambda表达式:

Dim myAction As Action() = Sub() WriteYouLogicHereToCreateTheWorksheet()

可以在您的导出方法中使用

Sub ExportToExcelFromAccess(ByVal accessFilePath As String, createAction As Action(), ...)
    createAction()
End Sub

ExportToExcelFromAccess(filePath, myAction)

更惯用的方法是通过继承/接口使用多态:

Public Interface IWorksheetCreator
    Sub CreateWorksheet()
End Interface

Public Class MyWorksheetCreator Implements IWorksheetCreator
    Sub CreateWorksheet() Implements IWorksheetCreator.CreateWorksheet
        WriteYouLogicHereToCreateTheWorksheet()
    End Sub
End Class

Sub ExportToExcelFromAccess(ByVal accessFilePath As String, _ 
   createAction As IWorksheetCreator)
    createAction.CreateWorksheet()
End Sub

'Create an instance of the class holding your desired logic
Dim myAction As New MyWorksheetCreator()
ExportToExcelFromAccess(filePath, myAction)

答案 1 :(得分:-1)

您的ExportToExcelFromAccess可能有一个Func或Action参数。

另一种选择可能是使用代表。