Il Sub in VB è una funzione che non ritorna alcun valore, e può essere shared (cioè statica, della classe e non di un'istanza) - c'è un esempio proprio alla fine della pagina della guida che hai linkato. Nell'ultimo listato, all'interno di Class2, c'è uno Shared Sub Hello(), e poco dopo viene mostrato come lo si può invocare, cioè con Class2.Hello() (se non fosse shared, invece, servirebbe avere un'istanza della classe, ad es. (new Class2()).Hello()).
Questo ovviamente implica che un metodo Shared, non essendo legato a nessuna istanza della classe in cui è contenuto, non possa fare riferimento ad alcun membro (campo, proprietà, funzione, ecc) che non sia a sua volta Shared.
Se la memoria per la sintassi di VB non mi inganna:
Codice sorgente - presumibilmente VB.NET |
Class SomeClass Public a As Integer Sub printA() Console.WriteLine(a) End Sub Shared Sub sharedPrintA() Console.WriteLine(a) 'non compila - non posso riferirmi ad a, perchè non è shared End Sub End Class 'altrove Dim myObject1 As MyClass = new MyClass() Dim myObject2 As MyClass = new MyClass() myObject1.a = 5 myObject2.a = 6 myObject1.printA() 'stampa 5 myObject2.printA() 'stampa 6 MyClass.sharedPrintA() ' non ha senso - il metodo è della classe, non di una sua specifica istanza (es. myobject1 o myobject2), quale a dovrebbe stampare
|
Riguardo al problema del thread: non ricordo quasi nulla di ASP.NET ma probabilmente i vari elementi della pagina diventano dei membri della classe ad essa associata, come il campo a dell'esempio. Quindi, comunque la si giri, non è possibile accedervi da uno Shared Sub.
Quindi: per quale motivo Prova() è dichiarata come Shared?