Вызов других функций из общей (или статической) функции - PullRequest
1 голос
/ 20 августа 2010

Я получаю эту ошибку: 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

Я знаю, что это как-то связано с тем, что первая функция является общей, а вторая функция, вероятно, также должна быть Public, но я неЯ не совсем понимаю причину этого.Вероятно, не имеет значения, но я вызываю веб-метод из некоторого JavaScript.

1 Ответ

4 голосов
/ 20 августа 2010
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, также должны быть общими.

EDIT :

альтернативным вариантом будет создание отдельного класса для «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
...