2014-01-18 115 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

你的代碼是荒謬的。首先,它們都是子功能而非功能。函數的目的是能夠調用它包含的可重用代碼。由於參數的原因,你將無法調用'button1_Click.Anim'。接下來,在動畫中沒有代碼也不是Click的一部分(所以它們是相同的)。您可能想要的是將'Anim'移動到其他地方,以便您可以從此Click事件或其他點擊中調用它,或者因爲代碼邏輯需要它。 – Plutonix

回答

3

它是不可能在VB.NET一個完全成熟的嵌套函數定義。語言不支持它看起來很像嵌套函數多行lambda表達式:

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

有雖然有些顯着的差異:

  • 不能有Handles條款。
  • 不能是ImplementsOverrides
  • lambda的實例被命名,而不是Sub定義。
  • 在這種情況下,anim實際上是一個代表而不是一個函數。
+0

是嗎?我們不能在帶有句柄的子句中使用句柄子句嗎?即時通訊只是一個noobie編程的東西.. –

+0

@ yoyieyoyie你不能做一個子句柄內的另一個子時期。該語言只設置爲處理真實/外部函數定義的子句 – JaredPar

+0

@yoyieyoyie:你想達到什麼目的?你需要開始思考這個方向。所以你的第一個問題是**不是你可以做**,或者**你怎麼做**,但是爲什麼你需要做**。一旦你清楚了,請更新你的問題,提供更多信息。 – Neolisk

相關問題