Я пишу функцию, которая принимает внешнюю процедуру Sub и запускает ее определенное количество раз на основе переменных в содержащемся классе. Как передать Sub devs в качестве параметров в VB.NET? Или что это альтернативный способ сделать это? (UPDATE: это для класса таймера для приложения WPF, которое я буду использовать в моей игре «Понг», которую я создаю. Новый метод должен принять вспомогательную процедуру как параметр, а затем он сообщает другому подкатегорию Run()
для выполнения этого подпрограммы процедура каждые x миллисекунд)Как передать подпроцедуру как аргумент VB.NET
ответ
Вы можете объявить свой метод (Sub
) как принимающий параметр Action Delegate
. Это позволяет передать адрес метода ничтожного (HelloWorld
) в качестве параметра:
Private Sub DoSomething(a As Action)
' pick a random number 1-5
Dim v = RNG.Next(1, 6)
' call whatever v times
For n As Int32 = 0 To v
a()
Next
End Sub
Private Sub HelloWorld()
Console.WriteLine("Null Spark says 'Hello, World!'")
End Sub
Назвать это будет просто:
DoSomething(AddressOf HelloWorld)
В MSDN примечаний, Action
инкапсулирует метод, который не имеет никаких параметров и не возвращает значение. Для включения параметров используйте Action(of T)
(см. Следующий); для возврата значения (используйте функцию), используйте Func
, see this example
При наличии PARAMS участвующего использования Action(Of T)
. Вы также можете объявлять переменные, как Action Delegates
, которые могут сделать код более удобным для чтения:
Private HelloAction As Action(Of Int32)
Тогда где-то, как форма нагрузки:
HelloAction = AddressOf HelloWorld
...
Private Sub DoSomething(a As Action(Of Int32))
Dim v = RNG.Next(1, 6)
For n As Int32 = 0 To v
a(n) ' pass the int param
Next
End Sub
В этом случае HelloWorld
будет:
Private Sub HelloWorld(x As Integer)
Большое спасибо :) Это, честно говоря, ОГРОМНАЯ помощь для меня. –
- 1. Как передать аргумент AndroidTestCase?
- 2. как передать аргумент процессу
- 3. Как передать аргумент EventHandler
- 4. Как передать аргумент innerHTML?
- 5. Как передать аргумент декораторам?
- 6. Как передать аргумент ScheduledThreadPoolExecutor?
- 7. Как передать этот аргумент?
- 8. как передать аргумент datetime.timedelta
- 9. Как передать аргумент?
- 10. Как передать аргумент функции
- 11. Как передать аргумент Marionette.CompositeView
- 12. Как передать аргумент rails
- 13. Как передать аргумент битмапа?
- 14. Как передать аргумент String?
- 15. ASP.NET Click Event Handle - Как передать аргумент в VB.NET?
- 16. как передать аргумент в другой аргумент
- 17. Как передать аргумент метода getter?
- 18. Как передать аргумент скрипту оболочки
- 19. Как передать аргумент в Java
- 20. Как передать аргумент модулю TypeScript?
- 21. Как передать аргумент плагину Clang?
- 22. Как передать аргумент в конструкторе?
- 23. Как передать аргумент в глотку?
- 24. Как передать аргумент в propertyChange?
- 25. Как передать аргумент Монго Script
- 26. Как передать аргумент в функции?
- 27. Как передать аргумент переменной instanceof?
- 28. Как передать аргумент в call_user_func
- 29. Как передать аргумент в Async.RunSynchronously?
- 30. Как передать аргумент с requestAnimationFrame?
Цикл, как правило, используется для обработки чего-то несколько раз, но вы на самом деле не очень много для нас. –
Вы ищете [Action Delegate] (https://msdn.microsoft.com/en-us/library/system.action (v = vs.110) .aspx). Существует также делегат 'Func' для случаев, когда метод возвращает что-то [как показано здесь] (http://stackoverflow.com/a/33571567/1070452) – Plutonix
Я знаю, что мне нужно использовать цикл здесь, но мне нужно передать в пользовательской подпроцедуре. Таким образом, вызов этой функции будет loopCommandBasedOnUnAccessibleData (printHelloWorld()), и он будет печатать «Hello World» переменную # раз –