2010-08-20 12 views
1

je reçois cette erreur: 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.Appel d'autres fonctions à partir d'un partage (ou statique) fonction

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 

Je sais qu'il a quelque chose à voir avec le fait que la première fonction est partagée et la deuxième fonction devrait probablement être Public aussi bien mais je ne comprends pas complètement la raison derrière cela. Probablement pas pertinent mais j'appelle la méthode web à partir de certains javascript.

Répondre

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 

ou

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 

Si elle doit être partagée, puis aller avec le premier. Si vous pouvez initialiser l'objet premier, ou si vous appelez de l'intérieur de la même classe, aller avec le second.

Comme vous l'avez dit, le WEBMETHOD doit être partagée (statique). Dans ce cas, les méthodes que vous appelez depuis la méthode web doivent également être partagées.

EDIT:

une autre option serait de créer une catégorie distincte pour "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

D'après ce que j'ai lu WebMethods doivent être partagés. Est-ce ma seule option? – Radu

+0

J'ai modifié. Fondamentalement, oui c'est votre seule option. L'erreur est très claire. En raison de la nature même d'une méthode « shareed », les méthodes étant appelées à partir de la méthode commune doit également être partagée. –

+0

J'ai fait une autre édition. Dans mon édition, vous remarquerez que je crée une instance de la classe 'Utilities' pour que je puisse appeler le public (mais pas partagée) méthode' GetValues'. –