2015-11-22 35 views
-1

我编写了一个从访问数据库表创建excel文件的子文件。 即时传递给子一些参数,所以我可以重用它在我的项目中的任何访问表。将子例程作为参数传递给另一个子例程

我想添加另一个参数,但我无法弄清楚如何做到这一点:我需要每一个我创建的Excel文件将有不同的夏季工作表,所以为了做到这一点,我需要通过一个不同的sub作为参数(就像他们在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 

回答

1

为了你问什么你可以使用lambda表达式:

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

它可以在你的Export方法使用

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) 
+0

非常感谢你,那正是我需要的。但惯用语的含义是什么? (在谷歌翻译找不到它)你的意思是更专业? – Jonathan

+0

对于意识形态,我的意思是符合您通常如何解决语言/框架/环境中的特定问题。 – PHeiberg

-1

你ExportToExcelFromAccess可以有一个Func键或操作参数。

替代方案可以使用代表。

+1

是不是'Func'和'Action'委托? –

+0

有些用例必须使用代表而不是Action或Funct。例如,DllImport。 – bradbury9

相关问题