Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Public Shared Sub e controlli HTML
Forum - C# / VB.NET - Public Shared Sub e controlli HTML

Avatar
dylan666 (Normal User)
Pro


Messaggi: 117
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 17:14
Venerdì, 15/06/2018
Ciao a tutti e grazie per l'aiuto che vorrete darmi.
Non posto tutto il mio codice perchè penso che mi sto perdendo in un bicchiere d'acqua ma se serve lo metto.

Ho una pagina in aspx con un panel
Codice sorgente - presumibilmente Plain Text

  1. <asp:Panel ID="PanelLink" Visible="false" runat="server">



Vorrei farlo apparire con questa sub:

Codice sorgente - presumibilmente VB.NET

  1. Public Sub MostraLink()
  2.      PanelLink.Visible = True
  3. End Sub



Devo però richiamare Call MostraLink() da un'altra sub chiamata Prova() che è dichiarata come "Public Shared Sub".
Ma segna la Call in rosso (errore BC30369) a meno che non modifichi pure MostraLink() in  "Public Shared Sub".
Se lo faccio peò l'errore lo segna su  PanelLink.Visible = True

Come ne esco? 8-|

Ultima modifica effettuata da dylan666 il 15/06/2018 alle 17:28
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2020
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 23:02
Sabato, 16/06/2018
Spero stai trollando...
Da quando esiste lo shared sub?

Lo shared va applicato su funzioni o su proprietà non su void.

Credo che devi prima capire bene la questione.


http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...


PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 0:36
Domenica, 17/06/2018
Testo quotato

Postato originariamente da Thejuster:
Da quando esiste lo shared sub?

Lo shared va applicato su funzioni o su proprietà non su void.



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

  1. Class SomeClass
  2.     Public a As Integer
  3.     Sub printA()
  4.         Console.WriteLine(a)
  5.     End Sub
  6.     Shared Sub sharedPrintA()
  7.         Console.WriteLine(a) 'non compila - non posso riferirmi ad a, perchè non è shared
  8.     End Sub
  9. End Class
  10.  
  11. 'altrove
  12. Dim myObject1 As MyClass = new MyClass()
  13. Dim myObject2 As MyClass = new MyClass()
  14. myObject1.a = 5
  15. myObject2.a = 6
  16. myObject1.printA() 'stampa 5
  17. myObject2.printA() 'stampa 6
  18. 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?

PM Quote