2015-11-22 2 views
-1

Я написал подраздел, который создает файл excel из таблицы базы данных доступа. im передает некоторые параметры, чтобы я мог повторно использовать их для любой таблицы доступа в моем проекте.Передача подпрограммы как параметра в другую подпрограмму

Я хотел бы добавить еще один параметр, но я не могу понять, как это сделать: мне нужно, чтобы каждый файл excel, который я создаю, будет иметь различный рабочий лист, поэтому для этого мне нужно передать другой sub как параметр (как в JQuery). поэтому мой quastion - это как я могу перейти к подпрограмме к другой подпрограмме в качестве параметра? SubToExcelFromAccess() будет выполнять подчиненный, который был передан перед сохранением файла excel.

Tagged также 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

Для того, чтобы сделать именно то, что вы просили, вы можете использовать лямбда-выражение:

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

Большое спасибо, это именно то, что мне нужно. но в чем смысл идиоматики? (не удалось найти его в google translate), вы имеете в виду более профессиональный? – Jonathan

+0

С идеоматикой я имею в виду то, как вы обычно решаете конкретную проблему в языке/контексте/контексте. – PHeiberg

-1

Ваш ExportToExcelFromAccess может иметь параметр Func или действий.

Альтернативой может быть использование делегатов.

+1

Не являются делегатами 'Func' и' Action'? –

+0

Существуют варианты использования делегатов вместо Action или Funct. Например, DllImport. – bradbury9

Смежные вопросы