2014-01-18 6 views
0

Возможно ли иметь функцию внутри функции?Возможно ли иметь функцию внутри функции?

Что-то вроде этого:

Public Class Form1 
    Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click 
     Sub anim() Handles form2.Shown 
      Me.Refresh() 
      Do Until Me.Location.X = 350 
       form2.Location = New Point(Me.Location.X + 1, 250) 
       ' System.Threading.Thread.Sleep(0.5) 
      Loop 
      form2.close() 
     End Sub 
    End Sub 
End Class 
+2

Ваш код является бессмысленным. Во-первых, они не являются функциями Subs. Назначение функции состоит в том, чтобы иметь возможность ссылаться на повторно используемый код, который он содержит. Вы не сможете вызвать 'button1_Click.Anim' частично из-за параметров. Далее, в аниматоре нет кода, который также не является частью Click (поэтому они одинаковы). То, что вы PROBABLY хотите, - это переместить 'Anim' в другое место, чтобы вы могли вызывать его из этого события Click или других кликов или потому, что это требует логика кода. – Plutonix

ответ

1

Можно иметь функцию внутри функции, называется лямбда-выражения.

В вашем случае, однако, мне непонятно, как это может быть полезно.

3

Это не представляется возможным, чтобы иметь полноценную вложенную определение функции в VB.NET. Язык поддерживает многоканальный лямбда-выражения, которые очень похожи на вложенные функции:

Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click 
    Dim anim = 
    Sub() 
     Me.Refresh() 
     ... 
    End Sub 
End Sub 

Есть некоторые заметные различия, хотя:

  • не может иметь пункт Handles.
  • Не может быть Implements или Overrides.
  • Экземпляр лямбда назван, а не определение Sub.
  • В этом случае anim фактически является делегатом, а не функцией.
+0

так? мы не можем сделать sub с выражением handles внутри sub с предложением handles? im просто noobie в программировании. –

+0

@yoyieyoyie вы не можете сделать sub с ручками внутри другого вспомогательного периода. Язык настраивается только для того, чтобы делать инструкции для определения реальных/внешних функций. – JaredPar

+0

@yoyieyoyie: Чего вы пытаетесь достичь? Вы должны начать думать в этом направлении. Итак, ваш первый вопрос - это не то, что вы можете сделать **, или ** как ** вы можете это сделать **, но почему ** вам нужно это сделать. После того, как вы это поняли, обновите свой вопрос с дополнительной информацией. – Neolisk

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