Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Specifica che uno o più elementi di programmazione dichiarati sono associati a una classe o a una struttura di grandi dimensioni e non a un'istanza specifica della classe o della struttura.
Quando usare condivisi
La condivisione di un membro di una classe o di una struttura lo rende disponibile per ogni istanza, anziché non condivisa, in cui ogni istanza mantiene la propria copia. La condivisione è utile, ad esempio, se il valore di una variabile si applica all'intera applicazione. Se si dichiara che tale variabile deve essere Shared, tutte le istanze accedono alla stessa posizione di archiviazione e, se un'istanza modifica il valore della variabile, tutte le istanze accedono al valore aggiornato.
La condivisione non modifica il livello di accesso di un membro. Ad esempio, un membro di classe può essere condiviso e privato (accessibile solo dall'interno della classe) o non condiviso e pubblico. Per altre informazioni, vedere Livelli di accesso in Visual Basic.
Regole
Contesto dichiarazione. È possibile usare
Sharedsolo a livello di modulo. Ciò significa che il contesto di dichiarazione per unSharedelemento deve essere una classe o una struttura e non può essere un file di origine, uno spazio dei nomi o una routine.Modificatori combinati. Non è possibile specificare
Sharedinsieme a Override, Overridable, NotOverridable, MustOverride o Static nella stessa dichiarazione.Accedere. È possibile accedere a un elemento condiviso qualificandolo con il nome della classe o della struttura, non con il nome della variabile di un'istanza specifica della relativa classe o struttura. Non è nemmeno necessario creare un'istanza di una classe o di una struttura per accedere ai relativi membri condivisi.
Nell'esempio seguente viene chiamata la routine IsNaN condivisa esposta dalla Double struttura .
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")Condivisione implicita. Non è possibile usare il
Sharedmodificatore in un'istruzione Const, ma le costanti vengono condivise in modo implicito. Analogamente, non è possibile dichiarare un membro di un modulo o un'interfaccia comeShared, ma sono condivisi in modo implicito.
Comportamento
Immagazzinamento. Una variabile o un evento condiviso viene archiviato in memoria una sola volta, indipendentemente dal numero o da poche istanze create dalla relativa classe o struttura. Analogamente, una routine o una proprietà condivisa contiene un solo set di variabili locali.
Accesso tramite una variabile di istanza. È possibile accedere a un elemento condiviso qualificandolo con il nome di una variabile che contiene un'istanza specifica della relativa classe o struttura. Anche se in genere funziona come previsto, il compilatore genera un messaggio di avviso e rende l'accesso tramite la classe o il nome della struttura anziché la variabile.
Accesso tramite un'espressione di istanza. Se si accede a un elemento condiviso tramite un'espressione che restituisce un'istanza della relativa classe o struttura, il compilatore effettua l'accesso tramite la classe o il nome della struttura anziché valutare l'espressione. Questo accesso produce risultati imprevisti se si intende che l'espressione esegua altre azioni e restituisca l'istanza. Nell'esempio seguente viene illustrata questa situazione.
Sub Main() ' The following line is the preferred way to access Total. ShareTotal.Total = 10 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of through ' the variable instanceVar. This works as expected and adds ' 100 to Total. Dim instanceVar As New ShareTotal instanceVar.Total += 100 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of calling ' ReturnClass(). This adds 1000 to total but does not work as ' expected, because the WriteLine in ReturnClass() does not run. Console.WriteLine("Value of total is " & CStr(ShareTotal.Total)) ReturnClass().Total += 1000 End Sub Public Function ReturnClass() As ShareTotal Console.WriteLine("Function ReturnClass() called") Return New ShareTotal End Function Public Class ShareTotal Public Shared Property Total As Integer End ClassNell'esempio precedente il compilatore genera un messaggio di avviso entrambe le volte in cui il codice accede alla proprietà
Totalcondivisa tramite un'istanza di . In ogni caso, rende l'accesso direttamente tramite la classeShareTotale non usa alcuna istanza. Nel caso della chiamata prevista alla routineReturnClass, ciò significa che non genera nemmeno una chiamata aReturnClass, quindi l'azione aggiuntiva di visualizzazione di "Function ReturnClass() chiamata" non viene eseguita.
Il Shared modificatore può essere usato in questi contesti:
- Istruzione Dim
- Dichiarazione Evento
- Dichiarazione di Funzione
- Dichiarazione dell'Operatore
- Dichiarazione di proprietà
- Dichiarazione Sub