2010-08-20 38 views
1

我得到這個錯誤:Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.從共享(或靜態)函數調用等功能

Partial Class _Default 
    Inherits System.Web.UI.Page 

    <WebMethod()> _ 
    Public Shared Function ParseData() As String 
     Dim value as string = GetValue() 
    End Function 

    Private Function GetValue() as String 
     Return "halp" 
    End Function 
End Class 

我知道它是與第一功能是共享的,第二個函數大概應該是這樣的事實公衆也是如此,但我不完全理解它背後的原因。可能不相關,但我從一些JavaScript調用Web方法。

回答

4
Partial Class _Default 
    Inherits System.Web.UI.Page 

    <WebMethod()> _ 
    Public Shared Function ParseData() As String 
     Dim value as string = GetValue() 
    End Function 

    Private Shared Function GetValue() as String 
     Return "halp" 
    End Function 
End Class 

Partial Class _Default 
    Inherits System.Web.UI.Page 

    <WebMethod()> _ 
    Public Function ParseData() As String 
     Dim value as string = GetValue() 
    End Function 

    Private Function GetValue() as String 
     Return "halp" 
    End Function 
End Class 

如果它必須是共享的,則與第一個去。如果你可以先初始化對象,或者如果你是從同一個類中調用它的話,那就去第二個。

正如您所指出的,Webmethod必須是Shared(靜態)。在這種情況下,您從webmethod調用的方法也必須共享。

編輯

另一種選擇是創建一個單獨的類「的GetValue」

Partial Class _Default 
    Inherits System.Web.UI.Page 

    <WebMethod()> _ 
    Public Shared Function ParseData() As String 
     Dim util As Utilities = New Utilities 
     Dim value as string = util.GetValue() 
    End Function 
End Class 

Public Class Utilities ''# Utilities is completely arbitrary, you can use whatever you like. 
    Public Function GetValue() as String 
     Return "halp" 
    End Function 
End Class 
+0

從我讀過的WebMethods必須共享。這是我唯一的選擇嗎? – Radu 2010-08-20 04:28:23

+0

我編輯過。基本上,是的,這是你唯一的選擇。錯誤非常明顯。由於「共享」方法的本質,也必須共享從共享方法調用的方法。 – 2010-08-20 04:31:44

+0

我做了另一個編輯。在我的編輯中,您會注意到我創建了'Utilities'類的實例,以便我可以調用Public(但不是Shared)'GetValues'方法。 – 2010-08-20 04:39:54