Visual Basic NET
Visual Basic NET
Questo argomento elenca i nomi delle funzionalità principali per ogni versione di Visual Basic, con descrizioni
dettagliate delle funzionalità nuove e migliorate nelle più recenti versioni del linguaggio.
Versione corrente
Visual Basic 16,9/Visual Studio 2019 versione 16,9
Per le nuove funzionalità, vedere Visual Basic 16,9.
È possibile scaricare la versione più recente di .NET SDK dalla pagina dei download di .NET.
Versioni precedenti
Visual Basic 16,0/Visual Studio 2019 versione 16,0
Per le nuove funzionalità, vedere Visual Basic 16,0.
Visual Basic 15,5/Visual Studio 2017 versione 15,5
Per le nuove funzionalità, vedere Visual Basic 15,5.
Visual Basic 15,3/Visual Studio 2017 versione 15,3
Per le nuove funzionalità, vedere Visual Basic 15,3.
Visual Basic 15/Visual Studio 2017
Per le nuove funzionalità, vedere Visual Basic 2017.
Visual Basic/Visual Studio 2015
Per le nuove funzionalità, vedere Visual Basic 14.
Visual Basic/Visual Studio 2013
Anteprime tecnologiche del .NET Compiler Platform ("Roslyn")
Visual Basic/Visual Studio 2012
Parole chiave Async e await , iteratori, attributi relativi alle informazioni sul chiamante
Visual Basic, Visual Studio 2010
Proprietà implementate automaticamente, inizializzatori di insieme, continuazione di riga implicita, elementi
dinamici, covarianza/controvarianza generica, accesso agli spazi dei nomi globali
Visual Basic/Visual Studio 2008
Language Integrated Query (LINQ), valori letterali XML, inferenza del tipo di variabile locale, inizializzatori di
oggetto, tipi anonimi, metodi di estensione, inferenza del tipo var locale, espressioni lambda, operatore if ,
metodi parziali, tipi di valore nullable
Visual Basic/Visual Studio 2005
Tipo My e tipi di helper (accesso all'app, al computer, al file system, alla rete)
Visual Basic/Visual Studio .NET 2003
Operatori di scorrimento bit, dichiarazione di variabile del ciclo
Visual Basic/Visual Studio .NET 2002
Prima versione di Visual Basic .NET
Visual Basic 16,9
Visual Basic 16,9 Abilita il consumo di proprietà solo init.
Si noti che in questo caso i valori a virgola mobile vengono troncati anziché arrotondati.
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Visual Basic 15
Tuple
Le tuple sono una semplice struttura dei dati che viene solitamente usata per restituire più valori da una singola
chiamata al metodo. In genere, per restituire più valori da un metodo, è necessario eseguire una delle operazioni
seguenti:
Definire un tipo personalizzato ( Class o Structure ). Si tratta di una soluzione complicata.
Definire uno o più parametri ByRef e restituire un valore dal metodo.
Grazie al supporto per tuple di Visual Basic è possibile definire rapidamente una tupla, assegnare
facoltativamente nomi semantici ai rispettivi valori e recuperare rapidamente i relativi valori. L'esempio
seguente esegue il wrapping di una chiamata al metodo TryParse e restituisce una tupla.
Imports System.Globalization
A questo punto è possibile chiamare il metodo e gestire la tupla restituita con codice simile al seguente.
Per altre informazioni, vedere la sezione dedicata alle assegnazioni di valori letterali dei tipi di dati Byte, Integer,
Long, Short, SByte, UInteger, ULong e UShort.
Suppor to per i valori restituiti di riferimento C#
A partire dalla versione 7.0, C# supporta i valori di riferimento restituiti. Pertanto, quando la chiamata al metodo
riceve un valore di riferimento restituito, lo può modificare. Visual Basic non consente di creare metodi con
valori di riferimento restituiti, ma consente di usare e modificare tali valori.
Ad esempio, la classe Sentence seguente scritta in C# include un metodo FindNext che rileva la parola
successiva in una frase che inizia con una sottostringa specificata. La stringa viene restituita come valore di
riferimento restituito. Una variabile Boolean passata dal riferimento al metodo indica se la ricerca ha avuto esito
positivo. Ciò significa che, oltre a leggere il valore restituito, il chiamante può anche modificarlo e tale modifica
viene riflessa nella Sentence classe.
using System;
return stringToReturn.Trim();
}
}
In parole semplici, è possibile modificare la parola trovata nella frase usando un codice simile al seguente. Si
noti che non si sta assegnando un valore al metodo, ma all'espressione che il metodo restituisce, ovvero il
valore di riferimento restituito.
Esiste tuttavia un problema con questo codice. Se non viene trovata una corrispondenza, il metodo restituisce la
prima parola. L'esempio non esamina il valore dell'argomento Boolean per determinare se viene trovata una
corrispondenza. Modifica quindi la prima parola se non esiste corrispondenza. Nell'esempio seguente questo
problema viene risolto sostituendo la prima parola con la parola stessa se non esiste corrispondenza.
Una soluzione migliore consiste nell'usare un metodo helper al quale il riferimento passa il valore di riferimento
restituito. Il metodo helper può quindi modificare l'argomento passato dal riferimento. Nell'esempio seguente
viene eseguita questa operazione.
Module Example
Public Sub Main()
Dim sentence As New Sentence("A time to see the world is now.")
Dim found = False
Dim returns = RefHelper(sentence.FindNext("A", found), "A good", found)
Console.WriteLine(sentence.GetSentence())
End Sub
Visual Basic 14
NameOf
È possibile ottenere il nome di stringa non qualificato di un tipo o di un membro, da usare in un messaggio di
errore senza definire una stringa a livello di codice. In questo modo il codice sarà corretto anche durante il
refactoring. Questa funzionalità è utile anche per l'associazione di collegamenti MVC (Modello-Vista-Controller)
e la generazione di eventi di modifica di proprietà.
Interpolazione di stringhe
È possibile usare espressioni di interpolazione di stringhe per costruire stringhe. Un'espressione di stringa
interpolata è simile a una stringa di modello che contiene espressioni. In relazione agli argomenti, è più facile
comprendere una stringa interpolata che la formattazione composita.
Indicizzazione e accesso ai membri condizionali null
È possibile verificare la presenza di valori null con una sintassi molto leggera prima di eseguire un'operazione di
accesso ai membri ( ?. ) o di indice ( ?[] ). Questi operatori consentono di scrivere meno codice per gestire i
controlli null, soprattutto per l'ordinamento decrescente delle strutture di dati. Se l'operando di sinistra o il
riferimento a un oggetto è null, le operazioni restituiscono null.
Valori letterali stringa a più righe
I valori letterali stringa possono contenere sequenze di nuove righe. Non è più necessario usare
<xml><![CDATA[...text with newlines...]]></xml>.Value come soluzione alternativa.
Commenti
È possibile inserire commenti dopo le continuazioni di riga implicita, all'interno delle espressioni
dell'inizializzatore e tra i termini delle espressioni LINQ.
Risoluzione dei nomi completi più intelligente
In precedenza, con un codice come Threading.Thread.Sleep(1000) , Visual Basic cercava lo spazio dei nomi
"Threading", individuava un'ambiguità tra System.Threading e System.Windows.Threading e quindi segnalava
un errore. Visual Basic ora prende in considerazione entrambi gli spazi dei nomi possibili. Se si visualizza l'elenco
di completamento, l'editor di Visual Studio elenca i membri di entrambi i tipi in questo elenco.
Valori letterali data anno-primo
I valori letterali data possono avere il formato aaaa-mm-gg, #2015-03-17 16:10 PM# .
Proprietà dell'interfaccia ReadOnly
È possibile implementare proprietà dell'interfaccia readonly usando una proprietà readonly. L'interfaccia
garantisce la funzionalità minima e le classi di implementazione non smettono di consentire l'impostazione della
proprietà.
Non <expr> typeof <type>
Per una maggiore leggibilità del codice, ora è possibile usare TypeOf con IsNot .
Avviso #Disable <ID> e #Enable avviso <ID>
È possibile disabilitare e abilitare avvisi specifici per le aree all'interno di un file di origine.
Miglioramenti dei commenti in formato documentazione XML
Quando si scrivono commenti ai documenti, si accede a Smart Editor e al supporto per la compilazione per la
convalida di nomi di parametro, la corretta gestione di crefs (generics, operatori e così via), la colorazione e il
refactoring.
Definizioni di interfacce e moduli parziali
Oltre a classi e struct, è possibile dichiarare interfacce e moduli parziali.
#Region direttive all'interno di corpi del metodo
È possibile inserire delimitatori #Region...#End Region in qualsiasi punto di un file, nelle funzioni o nei corpi delle
funzioni.
Le definizioni delle sostituzioni sono overload impliciti
Se si aggiunge il modificatore Overrides a una definizione, il compilatore aggiunge in modo implicito
Overloads . In questo modo è possibile digitare meno codice nella maggior parte dei casi.
CObj consentito negli argomenti degli attributi
Il compilatore generava un errore indicante che CObj(...), se usato nelle costruzioni degli attributi, non era una
costante.
Dichiarazione e utilizzo di metodi ambigui da interfacce diverse
In precedenza il codice seguente restituiva errori che impedivano di dichiarare IMock o di chiamare GetDetails
(se questi erano stati dichiarati in c#):
Interface ICustomer
Sub GetDetails(x As Integer)
End Interface
Interface ITime
Sub GetDetails(x As String)
End Interface
Ora il compilatore userà le normali regole di risoluzione dell'overload per scegliere l'oggetto GetDetails più
appropriato da chiamare ed è possibile dichiarare le relazioni tre le interfacce in Visual Basic, come quelle
mostrate nell'esempio.
Vedi anche
Novità di Visual Studio 2017
Novità di Visual Studio 2019
Informazioni sulle modifiche di rilievo nel
compilatore di Visual Basic
02/11/2020 • 2 minutes to read • Edit Online
Il team Roslyn gestisce un elenco di modifiche di rilievo nei compilatori C# e Visual Basic. Per informazioni sulle
modifiche, vedere questi collegamenti nel repository GitHub:
Modifiche di rilievo in VS2019 Update 1 e versioni successive rispetto a VS2019
Modifiche di rilievo rispetto a VS2017 (VB 15)
Modifiche di rilievo in Roslyn 3,0 (VS2019) da Roslyn 2. * (VS2017)
Modifiche di rilievo in Roslyn 1,0 (VS2015) dal compilatore C# nativo (VS2013 e precedenti).
Membri enum in conflitto
Introduzione a Visual Basic
06/03/2021 • 2 minutes to read • Edit Online
Questa sezione della documentazione fornisce informazioni introduttive per lo sviluppo di applicazione di Visual
Basic.
Informazioni aggiuntive
Novità di Visual Basic Elenca le nuove funzionalità in ognuna delle versioni di Visual Basic .NET.
Risorse aggiuntive per i programmatori di Visual Basic Viene fornito un elenco di siti Web e newsgroup
che consentono di trovare le risposte ai problemi più comuni.
Vedi anche
Ottenere Visual Basic Fornisce collegamenti di download per le versioni di Visual Studio fornite con
supporto Visual Basic, incluse le versioni gratuite.
Programmazione orientata ad oggetti Include collegamenti a pagine introduttive sulla programmazione
orientata a oggetti e che descrivono la creazione di oggetti personalizzati e l'uso degli oggetti per
semplificare la scrittura del codice.
Esempi Include collegamenti a codice di esempio in Visual Basic.
Procedure dettagliate Include un elenco delle pagine della Guida con dimostrazioni dei vari aspetti del
linguaggio Visual Basic.
Opzioni di feedback per Visual Studio Viene illustrato come ricevere supporto e inviare commenti e
suggerimenti.
Visual Studio Include collegamenti alla documentazione di Visual Studio.
C# Vengono forniti i collegamenti alla documentazione relativa allo sviluppo di applicazioni con Visual
C#.
Visual C++ Include collegamenti alla documentazione di Visual C++.
Sviluppo per Office e SharePoint Informazioni sull'uso di Microsoft Office e Visual Studio come parte di
un'applicazione aziendale.
Risorse aggiuntive
06/03/2021 • 2 minutes to read • Edit Online
Nei siti Web seguenti è disponibile materiale sussidiario per trovare la soluzione ai problemi comuni.
Risorse Microsoft
Sul Web
URL DESC RIZ IO N E
Progettazione del linguaggio Visual Basic .NET Repository ufficiale per la progettazione del linguaggio Visual
Basic .NET su GitHub.
Blog del team di Microsoft Visual Basic Viene fornito l'accesso al blog del team di Visual Basic.
Esempi di codice
URL DESC RIZ IO N E
Esempi nella documentazione di Visual Basic Contiene gli esempi usati nell'intera documentazione di
Visual Basic e .NET.
Forum
URL DESC RIZ IO N E
Video e webcast
URL DESC RIZ IO N E
Supporto
URL DESC RIZ IO N E
supporto tecnico Microsoft È possibile accedere agli articoli di Microsoft Knowledge Base
(KB), a download e ad aggiornamenti, a servizi di supporto
su Web e ad altri servizi.
Vedi anche
Introduzione a Visual Basic
Opzioni per commenti e suggerimenti in Visual Studio
Sviluppo di applicazioni con Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
In questa sezione viene illustrata la documentazione su concetti che riguardano il linguaggio Visual Basic.
Sezioni correlate
Guida per programmatori Visual Basic
Illustra gli elementi fondamentali di programmazione con Visual Basic.
Riferimenti al linguaggio Visual Basic
Contiene la documentazione di riferimento per il linguaggio Visual Basic.
Programmazione in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Questa sezione discute le attività di programmazione da approfondire per la creazione di un'applicazione Visual
Basic.
Vedi anche
Funzionalità del linguaggio Visual Basic
Concetti di programmazione
raccolte
Sviluppo di applicazioni con Visual Basic
Accesso alle risorse del computer (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
L'oggetto My.Computer è uno dei tre oggetti principali di My e permette l'accesso a informazioni e funzionalità
usate di frequente. My.Computer specifica metodi, proprietà ed eventi per l'accesso al computer in cui è eseguita
l'applicazione. Gli oggetti includono:
Audio
Appunti (ClipboardProxy)
Clock
FileSystem
Info
Keyboard
Mouse
Network
Ports
Registro di sistema (RegistryProxy)
Questa sezione contiene argomenti che descrivono come registrare le informazioni provenienti dall'applicazione
usando l'oggetto My.Application.Log o My.Log . Viene anche spiegato come estendere le funzionalità di
registrazione dell'applicazione.
L'oggetto Log fornisce i metodi per scrivere le informazioni sui listener di log dell'applicazione, mentre la
proprietà avanzata TraceSource dell'oggetto Log fornisce informazioni di configurazione dettagliate. L'oggetto
Log può essere configurato dal file di configurazione dell'applicazione.
L'oggetto è disponibile solo per le applicazioni ASP.NET. Per le applicazioni client, usare
My.Log
My.Application.Log . Per altre informazioni, vedere Log.
Attività
A VEDERE
Scrivere le informazioni sugli eventi nei log dell'applicazione. Procedura: Scrivere messaggi di log
Scrivere le informazioni di traccia nei log dell'applicazione Procedura: Registrare messaggi all'avvio o all'arresto
all'avvio e alla chiusura dell'applicazione. dell'applicazione
Configurare My.Application.Log per scrivere le Procedura: Scrivere informazioni sugli eventi in un file di
informazioni in un file di testo. testo
Configurare My.Application.Log per scrivere le Procedura: Scrivere nel log eventi di un'applicazione
informazioni in un log eventi.
Modificare la posizione in cui My.Application.Log scrive le Procedura dettagliata: Modifica della posizione di
informazioni. inserimento delle informazioni con My.Application.Log
Determinare la posizione in cui My.Application.Log scrive Procedura dettagliata: Individuazione della posizione di
le informazioni. inserimento delle informazioni con My.Application.Log
Creare un listener di log personalizzato per Procedura dettagliata: Creazione di listener di log
My.Application.Log . personalizzati
Vedi anche
Microsoft.VisualBasic.Logging.Log
Utilizzo dei log applicazione
Risoluzione dei problemi: Listener di log
Accesso ai dati utente (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Questa sezione contiene argomenti relativi all'oggetto My.User e alle attività che tale oggetto consente di
eseguire.
L'oggetto My.User consente di accedere alle informazioni sull'utente connesso restituendo un oggetto in grado
di implementare l'interfaccia IPrincipal.
Attività
A VEDERE
Vedere anche
User
Accesso ai form di un'applicazione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
L'oggetto My.Forms rappresenta un modo semplice di accedere a un'istanza di ogni Windows Form dichiarato
nel progetto dell'applicazione. È anche possibile usare le proprietà dell'oggetto My.Application per visualizzare
la schermata iniziale e il modulo principale dell'applicazione e per ottenere un elenco dei moduli aperti
dell'applicazione.
Attività
La tabella seguente elenca esempi che illustrano come accedere ai moduli di un'applicazione.
A VEDERE
Vedi anche
OpenForms
SplashScreen
Oggetto My.Forms
Accesso ai servizi Web dell'applicazione (Visual
Basic)
05/03/2021 • 2 minutes to read • Edit Online
L'oggetto My.WebServices fornisce un'istanza di ogni servizio Web a cui si fa riferimento nel progetto corrente.
Ogni istanza viene creata su richiesta. È possibile accedere a questi servizi Web tramite le proprietà dell'oggetto
My.WebServices . Il nome della proprietà è uguale al nome del servizio Web a cui la proprietà accede. Qualsiasi
classe che eredita da SoapHttpClientProtocol è un servizio Web.
Attività
La tabella seguente presenta i modi possibili per accedere ai servizi Web a cui fa riferimento un'applicazione.
A VEDERE
Chiamare un servizio Web in modo asincrono e gestire un Procedura: Chiamare un servizio Web in modo asincrono
evento quando quest'ultimo viene completato
Vedi anche
Oggetto My.WebServices
Procedura: chiamare un servizio Web in modo
asincrono (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Questo esempio associa un gestore a un evento gestore asincrono di un servizio Web in modo che possa
recuperare il risultato di una chiamata di metodo sincrono. L'esempio usa il servizio Web
DemoTemperatureService disponibile all'indirizzo http://www.xmethods.net .
Quando in un progetto si fa riferimento a un servizio Web nell'ambiente di sviluppo integrato (IDE, Integrated
Development Environment) di Visual Studio, questo viene aggiunto all'oggetto My.WebServices e l'IDE genera
una classe proxy del client per accedere a un servizio Web specifico
La classe proxy consente di chiamare i metodi del servizio Web in modo sincrono; in altre parole l'applicazione
aspetta che la funzione sia terminata. Inoltre, il proxy crea membri aggiuntivi che contribuiscono a chiamare il
metodo in modo asincrono. Per ogni funzione di servizio Web, NameOfWebServiceFunction, il proxy crea una
subroutine NameOfWebServiceFunction Async , un evento NameOfWebServiceFunction Completed e una classe
NameOfWebServiceFunction CompletedEventArgs . L'esempio dimostra come usare i membri asincroni per
accedere alla funzione getTemp del servizio Web DemoTemperatureService.
NOTE
Tale codice non funziona nelle applicazioni Web perché ASP.NET non supporta l'oggetto My.WebServices .
http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
NOTE
Non è possibile usare l'istruzione Handles per associare un gestore eventi agli eventi dell'oggetto
My.WebServices .
3. Aggiungere un campo di cui tenere traccia se il gestore eventi è stato aggiunto all'evento
getTempCompleted :
Per chiamare il metodo Web getTemp in modo asincrono, chiamare il metodo CallGetTempAsync . Al
termine dell'esecuzione del metodo Web il relativo valore restituito viene passato al gestore eventi
getTempCompletedHandler .
Vedi anche
Accesso ai servizi Web dell'applicazione
Oggetto My.WebServices
Accesso alle impostazioni dell'applicazione (Visual
Basic)
05/03/2021 • 2 minutes to read • Edit Online
Questa sezione include argomenti che descrivono l'oggetto My.Settings e le attività che consente di eseguire.
My.Settings
Le proprietà dell'oggetto My.Settings offrono accesso alle impostazioni dell'applicazione. Per aggiungere o
rimuovere le impostazioni, usare il riquadro Impostazioni della Creazione progetti .
I metodi dell'oggetto My.Settings consentono di salvare le impostazioni utente correnti o di ripristinare le
impostazioni utente agli ultimi valori salvati.
Attività
La tabella seguente elenca esempi che illustrano come accedere ai moduli di un'applicazione.
A VEDERE
Visualizzare le impostazioni utente e dell'applicazione in una Procedura: Creare griglie di proprietà per impostazioni
griglia delle proprietà utente in Visual Basic
Salvare i valori delle impostazioni utente aggiornate Procedura: Mantenere le impostazioni dell'utente in Visual
Basic
Determinare i valori delle impostazioni utente Procedura: Leggere le impostazioni dell'applicazione in Visual
Basic
Vedi anche
Gestione delle impostazioni di un'applicazione (.NET)
Oggetto My.Settings
Elaborazione di unità, directory e file (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
È possibile usare Visual Basic per elaborare unità, cartelle e file con l'oggetto My.Computer.FileSystem che offre
prestazioni migliori ed è più semplice da usare rispetto ai metodi tradizionali, ad esempio le funzioni FileOpen e
Write , che sono tuttavia ancora disponibili. Le sezioni seguenti descrivono questi metodi in dettaglio.
Sezioni correlate
Struttura del programma e convenzioni del codice
Offre le linee guida relative alla struttura fisica e all'aspetto dei programmi.
FileSystem
Documentazione di riferimento dell'oggetto My.Computer.FileSystem e i relativi membri.
Sviluppo con My (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic fornisce nuove funzionalità per lo sviluppo rapido di applicazioni che migliorano la produttività e
aumentano la facilità d'uso, garantendo al tempo stesso maggiore potenza. Una di queste funzionalità,
denominata My , consente di accedere a informazioni e istanze di oggetti predefinite correlate all'applicazione e
al relativo ambiente di run-time. Queste informazioni sono organizzate in un formato riconoscibile tramite
IntelliSense e delineato in modo logico in base all'uso.
I membri di My di primo livello sono esposti come oggetti. Ogni oggetto si comporta in modo analogo a uno
spazio dei nomi o a una classe con membri Shared ed espone un set di membri correlati.
Questa tabella mostra gli oggetti My di primo livello e le relazioni tra tali oggetti.
Vedi anche
ApplicationBase
Computer
User
Oggetto My.Forms
Oggetto My.WebServices
Dipendenza di My dal tipo di progetto
Esecuzione di attività mediante My.Application,
My.Computer e My.User (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
I tre My oggetti centrali che consentono di accedere alle informazioni e alle funzionalità comunemente utilizzate
sono My.Application ( ApplicationBase ), My.Computer ( Computer ) e My.User () User . Questi oggetti possono
essere usati per accedere alle informazioni relative all'applicazione corrente, al computer in cui è installata
l'applicazione o all'utente corrente dell'applicazione.
' Displays a message box that shows the full command line for the
' application.
Dim args As String = ""
For Each arg As String In My.Application.CommandLineArgs
args &= arg & " "
Next
MsgBox(args)
Oltre a recuperare le informazioni, i membri esposti tramite questi tre oggetti consentono inoltre di eseguire
metodi correlati a tale oggetto. Ad esempio, è possibile accedere a diversi metodi per modificare i file o
aggiornare il registro di sistema tramite My.Computer .
L'I/O dei file è significativamente più semplice e veloce con My , che include un'ampia gamma di metodi e
proprietà per la modifica di file, directory e unità. L' TextFieldParser oggetto consente di leggere da file strutturati
di grandi dimensioni con campi delimitati o a larghezza fissa. In questo esempio viene aperto TextFieldParser
reader e utilizzato per leggere da C:\TestFolder1\test1.txt .
Dim reader =
My.Computer.FileSystem.OpenTextFieldParser("C:\TestFolder1\test1.txt")
reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
reader.Delimiters = New String() {","}
Dim currentRow As String()
While Not reader.EndOfData
Try
currentRow = reader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message &
"is not valid and will be skipped.")
End Try
End While
My.Application consente di modificare le impostazioni cultura per l'applicazione. Nell'esempio seguente viene
illustrato come è possibile chiamare questo metodo.
' Changes the current culture for the application to Jamaican English.
My.Application.ChangeCulture("en-JM")
Vedi anche
ApplicationBase
Computer
User
Dipendenza di My dal tipo di progetto
Istanze predefinite degli oggetti fornite da
My.Forms e My.WebServices (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Gli oggetti My. Forms e My. WebServices consentono di accedere ai moduli, alle origini dati e ai servizi Web
XML utilizzati dall'applicazione. Forniscono l'accesso tramite raccolte di istanze predefinite di ognuno di questi
oggetti.
Istanze predefinite
Un'istanza predefinita è un'istanza della classe fornita dal runtime e non è necessario dichiararla e crearne
un'istanza usando le Dim New istruzioni e. Nell'esempio seguente viene illustrato come dichiarare e creare
un'istanza di una Form classe denominata e Form1 come ora è possibile ottenere un'istanza predefinita di
questa Form classe tramite My.Forms .
' With My.Forms, you can directly call methods on the default
' instance()
My.Forms.Form1.Show()
L' My.Forms oggetto restituisce una raccolta di istanze predefinite per ogni Form classe esistente nel progetto.
Analogamente, My.WebServices fornisce un'istanza predefinita della classe proxy per ogni servizio Web a cui è
stato creato un riferimento nell'applicazione.
Vedi anche
Oggetto My.Forms
Oggetto My.WebServices
Dipendenza di My dal tipo di progetto
Sviluppo rapido di applicazioni con My.Resources e
My.Settings (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
L' My.Resources oggetto fornisce l'accesso alle risorse dell'applicazione e consente di recuperare in modo
dinamico le risorse per l'applicazione.
Recupero di risorse
Tramite l'oggetto è possibile recuperare diverse risorse, ad esempio file audio, icone, immagini e stringhe
My.Resources . Ad esempio, è possibile accedere ai file di risorse specifici delle impostazioni cultura
dell'applicazione. Nell'esempio seguente viene impostata l'icona del form sull'icona denominata Form1Icon
archiviato nel file di risorse dell'applicazione.
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub
L' My.Resources oggetto espone solo le risorse globali. Non fornisce l'accesso ai file di risorse associati ai
moduli. Accedere alle risorse del modulo dal form.
Analogamente, l' My.Settings oggetto fornisce l'accesso alle impostazioni dell'applicazione e consente di
archiviare e recuperare dinamicamente le impostazioni delle proprietà e altre informazioni per l'applicazione.
Per altre informazioni, vedere oggetto My. resources e My. Settings.
Vedi anche
Oggetto My.Resources
Oggetto My.Settings
Accessing Application Settings
Cenni preliminari sul modello di applicazione Visual
Basic
05/03/2021 • 7 minutes to read • Edit Online
Visual Basic fornisce un modello ben definito per controllare il comportamento delle applicazioni Windows
Form: il modello di applicazione Visual Basic. Questo modello include gli eventi per gestire l'avvio e l'arresto
dell'applicazione, nonché gli eventi per intercettare le eccezioni non gestite. Fornisce inoltre il supporto per lo
sviluppo di applicazioni a istanza singola. Il modello applicativo è estendibile, quindi gli sviluppatori che
necessitano di un maggior controllo possono personalizzare i metodi sottoponibili a override.
Disponibilità
Per impostazione predefinita, il modello di applicazione Visual Basic è disponibile per i progetti Windows Form.
Se si configura l'applicazione in modo che usi un oggetto di avvio diverso o si avvia il codice dell'applicazione
con un oggetto personalizzato Sub Main , tale oggetto o classe potrebbe dover fornire un'implementazione
della WindowsFormsApplicationBase classe per usare il modello di applicazione. Per informazioni sulla modifica
dell'oggetto di avvio, vedere pagina applicazione, Progettazione progetti (Visual Basic).
Vedi anche
WindowsFormsApplicationBase
Startup
StartupNextInstance
UnhandledException
Shutdown
NetworkAvailabilityChanged
WindowsFormsApplicationBase
Estensione del modello di applicazione Visual Basic
Dipendenza di My dal tipo di progetto (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
My espone solo gli oggetti richiesti da un determinato tipo di progetto. Ad esempio, l' My.Forms oggetto è
disponibile in un Windows Forms Application ma non è disponibile in un'applicazione console. In questo
argomento vengono descritti My gli oggetti disponibili in diversi tipi di progetto.
In un progetto di sito Web, My espone oggetti rilevanti per uno sviluppatore web (ad esempio, gli My.Request
My.Response oggetti e) durante l'eliminazione degli oggetti che non sono rilevanti, ad esempio l' My.Forms
oggetto. Nell'immagine seguente viene illustrato il My modello a oggetti in un progetto di sito Web:
Dettagli progetto
La tabella seguente mostra My gli oggetti abilitati per impostazione predefinita per otto tipi di progetto:
applicazione Windows, libreria di classi, applicazione console, libreria di controlli Windows, libreria di controlli
Web, servizio Windows, vuoto e sito Web.
Sono disponibili tre versioni dell' My.Application oggetto, due versioni dell' My.Computer oggetto e due
versioni dell'oggetto. le My.User informazioni dettagliate su queste versioni vengono fornite nelle note a piè di
pagina dopo la tabella.
L IB RERIA
DI
A P P L IC A C O N T RO L IB RERIA
Z IO N E A P P L IC A LLI DI SERVIZ IO
O GGET TO W IN DO W L IB RERIA Z IO N E W IN DO W C O N T RO W IN DO W
MY S DI C L A SSI C O N SO L E S L L I W EB S EM P T Y SITO W EB
Sì 1
My.Application Sì 2 Sì 3 Sì 2 No Sì 3 No No
My.Computer Sì 4 Sì 4 Sì 4 Sì 4 Sì 5 Sì 4 No Sì 5
My.Forms Sì No No Sì No No No No
My.Log No No No No No No No Sì
My.Request No No No No No No No Sì
My.ResourcesSì Sì Sì Sì Sì Sì No No
My.Response No No No No No No No Sì
My.Settings Sì Sì Sì Sì Sì Sì No No
My.User Sì 6 Sì 6 Sì 6 Sì 6 Sì 7 Sì 6 No Sì 7
Sì
My.WebServices Sì Sì Sì Sì Sì No No
1 Windows Form versione di My.Application . Deriva dalla versione della console (vedere la nota 3); aggiunge il
supporto per l'interazione con le finestre dell'applicazione e fornisce il modello di applicazione Visual Basic.
versione 2 della libreria My.Application . Fornisce le funzionalità di base necessarie per un'applicazione: fornisce
i membri per la scrittura nel registro applicazioni e l'accesso alle informazioni sull'applicazione.
3 versione della console di My.Application
. Deriva dalla versione della libreria (vedere la nota 2) e aggiunge
membri aggiuntivi per accedere agli argomenti della riga di comando dell'applicazione e alle informazioni sulla
distribuzione ClickOnce.
4 versione Windows di My.Computer . Deriva dalla versione del server (vedere la nota 5) e fornisce l'accesso a
oggetti utili in un computer client, ad esempio la tastiera, lo schermo e il mouse.
versione di 5 server di My.Computer . Fornisce informazioni di base sul computer, ad esempio il nome, l'accesso
al clock e così via.
6 versione di Windows My.User . Questo oggetto è associato all'identità corrente del thread.
7 versione Web di My.User . Questo oggetto è associato all'identità utente della richiesta HTTP corrente
dell'applicazione.
Vedi anche
ApplicationBase
Computer
Log
User
Personalizzazione degli oggetti disponibili in My
Compilazione condizionale
-define (Visual Basic)
Oggetto My.Forms
Oggetto My.Request
Oggetto My.Response
Oggetto My.WebServices
Accesso ai dati nelle applicazioni Visual Basic
05/03/2021 • 3 minutes to read • Edit Online
Visual Basic include numerose nuove funzionalità per semplificare lo sviluppo di applicazioni che accedono ai
dati. I moduli associati ai dati per applicazioni Windows vengono creati trascinando elementi dalla finestra
Origine dati nel modulo. I controlli ai dati si associano trascinando elementi dalla finestra Origini dati nei
controlli esistenti.
Sezioni correlate
Accesso ai dati in Visual Studio
Include collegamenti alle pagine sulla incorporazione della funzionalità di accesso ai dati nelle applicazioni.
Visual Studio data tools per .NET
Include collegamenti alle pagine sulla creazione di applicazioni che usano i dati tramite Visual Studio.
LINQ
Include collegamenti agli argomenti che descrivono come usare LINQ con Visual Basic.
LINQ to SQL
Include informazioni su LINQ to SQL. Include esempi di programmazione.
Strumenti di LINQ to SQL in Visual Studio
Include collegamenti agli argomenti che illustrano come creare un modello di oggetto LINQ to SQL nelle
applicazioni.
Uso dei set di dati nelle applicazioni a più livelli
Include collegamenti agli argomenti che illustrano come creare applicazioni dati a più livelli.
Aggiungere nuove connessioni
Include collegamenti alle pagine che illustrano come connettere le applicazioni ai dati con gli strumenti di
progettazione e gli oggetti di connessione ADO.NET tramite Visual Studio.
Strumenti per set di dati in Visual Studio
Include collegamenti alle pagine che descrivono come caricare dati nei set di dati e come eseguire le istruzioni
SQL e le stored procedure.
Associare controlli ai dati in Visual Studio
Include collegamenti alle pagine che illustrano come visualizzare dati in Windows Form tramite i controlli
associati ai dati.
Modificare i dati nei set di dati
Include collegamenti alle pagine che descrivono come manipolare i dati nelle tabelle dati di un set di dati.
Convalidare i dati nei set di dati
Include collegamenti alle pagine che illustrano come aggiungere una convalida a un set di dati durante le
modifiche di colonne e righe.
Salvare i dati di nuovo nel database
Include collegamenti alle pagine che illustrano come inviare dati aggiornati da un'applicazione al database.
ADO.NET
Descrive le classi ADO.NET, che espongono i servizi di accesso ai dati per il programmatore .NET Framework.
Dati nelle soluzioni Office
Include collegamenti alle pagine che illustrano il funzionamento dei dati nelle soluzioni Office, incluse le
informazioni sulla programmazione orientata agli schemi, sulla memorizzazione di dati nella cache e
sull'accesso ai dati sul lato server.
Creazione e utilizzo di componenti in Visual Basic
05/03/2021 • 5 minutes to read • Edit Online
Classi di componenti
Lo spazio dei nomi System.ComponentModel offre classi usate per implementare il comportamento dei
componenti e dei controlli in fase di progettazione e di esecuzione. Questo spazio dei nomi include le classi e le
interfacce di base per l'implementazione di attributi e convertitori, l'associazione a origini dati e le licenze per i
componenti.
Le classi di componenti principali sono:
Component. Un'implementazione di base per l'interfaccia IComponent. Questa classe abilita la
condivisione degli oggetti tra applicazioni.
MarshalByValueComponent. Un'implementazione di base per l'interfaccia IComponent.
Container. L'implementazione di base per l'interfaccia IContainer. Questa classe incapsula zero o più
componenti.
Alcune delle classi utilizzate per le licenze dei componenti sono:
License. Classe di base astratta per tutte le licenze. La licenza viene concessa a un'istanza specifica di un
componente.
LicenseManager. Offre proprietà e metodi per aggiungere una licenza a un componente e gestire
LicenseProvider.
LicenseProvider. Classe di base astratta per l'implementazione di un provider di licenza.
LicenseProviderAttribute. Specifica la classe LicenseProvider da usare con una classe.
Classi usate in genere per descrivere e rendere persistenti i componenti.
TypeDescriptor. Offre informazioni sulle caratteristiche di un componente, ad esempio gli attributi, le
proprietà e gli eventi.
EventDescriptor. Include informazioni su un evento.
PropertyDescriptor. Include informazioni su una proprietà.
Sezioni correlate
Risoluzione dei problemi relativi alla modifica di controlli e componenti
Viene illustrato come risolvere i problemi comuni.
Vedi anche
Procedura: Accedere al supporto in fase di progettazione in Windows Forms
Nozioni fondamentali relative alle applicazioni
Windows Forms (Visual Basic)
05/03/2021 • 13 minutes to read • Edit Online
Una parte importante del Visual Basic è la possibilità di creare Windows Form applicazioni eseguite localmente
sui computer degli utenti. È possibile usare Visual Studio per creare l'applicazione e l'interfaccia utente usando
Windows Form. Un Windows Forms Application viene compilato in base alle classi dello
System.Windows.Forms spazio dei nomi.
A VEDERE
Creare una nuova Windows Forms Application con Visual Esercitazione 1: creare un visualizzatore di immagini
Studio
A VEDERE
Usare le origini dati di ADO.NET Procedura: Ordinare e filtrare i dati ADO.NET con il
componente BindingSource di Windows Forms
A VEDERE
Aggiornare una distribuzione ClickOnce Procedura: gestire gli aggiornamenti per un'applicazione
ClickOnce
Gestione della sicurezza con ClickOnce Procedura: abilitare le impostazioni di sicurezza ClickOnce
A VEDERE
Altre informazioni sulla sicurezza di Windows Form Cenni preliminari sulla sicurezza in Windows Form
Vedi anche
WindowsFormsApplicationBase
Panoramica sui Windows Form
Oggetto My.Forms
Personalizzazione di progetti ed estensione di
oggetti My in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
È possibile personalizzare i modelli di progetto per fornire My oggetti aggiuntivi. Questo consente agli altri
sviluppatori di trovare e usare gli oggetti in modo semplice.
Sezioni correlate
Sviluppo con My
Vengono descritti My gli oggetti disponibili in diversi tipi di progetto per impostazione predefinita.
Cenni preliminari sul modello di applicazione Visual Basic
Viene descritto il modello di Visual Basic per controllare il comportamento delle applicazioni Windows Form.
Dipendenza di My dal tipo di progetto
Vengono descritti My gli oggetti disponibili in diversi tipi di progetto per impostazione predefinita.
Compilazione condizionale
Viene illustrato il modo in cui il compilatore utilizza la compilazione condizionale per selezionare sezioni
specifiche di codice per compilare ed escludere altre sezioni.
ApplicationBase
Descrive l' My oggetto che fornisce proprietà, metodi ed eventi correlati all'applicazione corrente.
Vedi anche
Sviluppo di applicazioni con Visual Basic
Estensione dello My spazio dei nomi in Visual Basic
05/03/2021 • 16 minutes to read • Edit Online
Lo My spazio dei nomi in Visual Basic espone proprietà e metodi che consentono di sfruttare facilmente la
potenza del .NET Framework. Lo My spazio dei nomi semplifica i problemi di programmazione comuni,
riducendo spesso un'attività complessa a una singola riga di codice. Lo My spazio dei nomi è inoltre
completamente estendibile, in modo che sia possibile personalizzare il comportamento di My e aggiungere
nuovi servizi alla gerarchia per adattarsi alle specifiche esigenze dell'applicazione. In questo argomento viene
illustrato come personalizzare i membri esistenti dello My spazio dei nomi e come aggiungere classi
personalizzate allo My spazio dei nomi.
My.User.CurrentPrincipal = CustomPrincipal
L'impostazione della CurrentPrincipal proprietà nell' My.User oggetto modifica l'identità con cui viene
eseguita l'applicazione. L' My.User oggetto, a sua volta, restituisce le informazioni relative all'utente appena
specificato.
Namespace My
Return dnsAddressList
End Get
End Property
End Class
End Namespace
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Per aggiungere membri allo My spazio dei nomi, aggiungere le proprietà necessarie al modulo. Per ogni
proprietà aggiunta allo My spazio dei nomi, aggiungere un campo privato di tipo
ThreadSafeObjectProvider(Of T) , in cui il tipo è il tipo restituito dalla proprietà personalizzata. Questo campo
viene utilizzato per creare istanze di oggetti thread-safe che devono essere restituite dalla proprietà chiamando
il GetInstance metodo. Di conseguenza, ogni thread che accede alla proprietà estesa riceve la propria istanza
del tipo restituito. Nell'esempio seguente viene aggiunta una proprietà denominata SampleExtension di tipo
SampleExtension allo My spazio dei nomi:
Namespace My
<HideModuleName()>
Module MyCustomExtensions
Private _extension As New ThreadSafeObjectProvider(Of SampleExtension)
Friend ReadOnly Property SampleExtension() As SampleExtension
Get
Return _extension.GetInstance()
End Get
End Property
End Module
End Namespace
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
È possibile aggiungere gestori eventi per My gli oggetti personalizzati aggiungendo gestori eventi
personalizzati alla MyApplication classe. Gli eventi personalizzati consentono di aggiungere codice che verrà
eseguito quando un gestore eventi viene aggiunto, rimosso o viene generato l'evento. Si noti che il AddHandler
codice per un evento personalizzato viene eseguito solo se il codice viene aggiunto da un utente per gestire
l'evento. Si consideri, ad esempio, che l' SampleExtension oggetto della sezione precedente presenta un Load
evento per il quale si desidera aggiungere un gestore eventi personalizzato. Nell'esempio di codice seguente
viene illustrato un gestore eventi personalizzato denominato SampleExtensionLoad che verrà richiamato quando
My.SampleExtension.Load si verifica l'evento. Quando si aggiunge codice per gestire il nuovo
My.SampleExtensionLoad evento, AddHandler viene eseguita la parte del codice evento personalizzato. Il
MyApplication_SampleExtensionLoad metodo è incluso nell'esempio di codice per mostrare un esempio di un
gestore eventi che gestisce l' My.SampleExtensionLoad evento. Si noti che l' SampleExtensionLoad evento sarà
disponibile quando si seleziona l'opzione eventi applicazione personali nell'elenco a discesa a sinistra sopra
l'editor di codice quando si modifica il file ApplicationEvents. vb .
Namespace My
End Sub
End Class
End Namespace
Vedi anche
Assemblaggio e distribuzione delle estensioni My personalizzate
Estensione del modello di applicazione Visual Basic
Personalizzazione degli oggetti disponibili in My
Pagina Estensioni My, Creazione progetti
Application Page, Project Designer (Visual Basic)
Parziale
Pacchetto e distribuzione delle estensioni My
personalizzate (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Visual Basic fornisce un modo semplice per distribuire le My estensioni dello spazio dei nomi personalizzate
utilizzando i modelli di Visual Studio. Se si sta creando un modello di progetto per il quale le My estensioni
sono parte integrante del nuovo tipo di progetto, è possibile includere il My codice di estensione personalizzato
con il progetto quando si esporta il modello. Per altre informazioni sull'esportazione di modelli di progetto,
vedere procedura: creare modelli di progetto.
Se l' My estensione personalizzata si trova in un unico file di codice, è possibile esportare il file come modello di
elemento che gli utenti possono aggiungere a qualsiasi tipo di Visual Basic progetto. È quindi possibile
personalizzare il modello di elemento per abilitare funzionalità e comportamenti aggiuntivi per l' My estensione
personalizzata in un progetto Visual Basic. Di seguito sono riportate alcune funzionalità:
Consentire agli utenti di gestire l' My estensione personalizzata dalla pagina estensioni My di
progettazione progetti Visual Basic.
Aggiunta automatica dell' My estensione personalizzata quando un riferimento a un assembly
specificato viene aggiunto a un progetto.
Nascondere il My modello di elemento di estensione nella finestra di dialogo Aggiungi elemento in
modo che non sia incluso nell'elenco di elementi del progetto.
In questo argomento viene illustrato come creare un pacchetto di un' My estensione personalizzata come
modello di elemento nascosto che può essere gestito dalla pagina estensioni My della finestra di
progettazione del progetto Visual Basic. L' My estensione personalizzata può inoltre essere aggiunta
automaticamente quando un riferimento a un assembly specificato viene aggiunto a un progetto.
NOTE
Se l' My estensione dello spazio dei nomi ha una dipendenza da un assembly specifico, è possibile personalizzare il
modello di elemento per installare automaticamente l' My estensione dello spazio dei nomi quando viene aggiunto un
riferimento a tale assembly. Sarà quindi necessario escludere il riferimento all'assembly quando si esporta il file di codice
come modello di elemento di Visual Studio.
Personalizzare il modello di elemento
È possibile abilitare il modello di elemento per la gestione dalla pagina estensioni My della finestra di
progettazione del progetto Visual Basic. È anche possibile abilitare l'aggiunta automatica del modello di
elemento quando un riferimento a un assembly specificato viene aggiunto a un progetto. Per abilitare queste
personalizzazioni, si aggiungerà un nuovo file, denominato file CustomData, al modello e quindi si aggiungerà
un nuovo elemento al file XML nel file con estensione vstemplate.
Aggiungere il file CustomData
Il file CustomData è un file di testo con estensione del nome di file. CustomData (il nome del file può essere
impostato su qualsiasi valore significativo per il modello) e che contiene XML. Il codice XML nel file CustomData
indica Visual Basic di includere l' My estensione quando gli utenti usano la pagina estensioni My della finestra
di progettazione del progetto Visual Basic. Facoltativamente, è possibile aggiungere l' AssemblyFullName>
attributo <al file XML del file CustomData. In questo modo si indica Visual Basic di installare automaticamente l'
My estensione personalizzata quando un riferimento a un assembly specifico viene aggiunto al progetto. È
possibile usare qualsiasi editor di testo o editor XML per creare il file CustomData e quindi aggiungerlo alla
cartella compressa del modello di elemento (file zip).
Il codice XML seguente, ad esempio, Mostra il contenuto di un file CustomData che aggiungerà l'elemento del
modello alla cartella My Extensions di un progetto Visual Basic quando un riferimento all'assembly
Microsoft.VisualBasic.PowerPacks.Vs.dll viene aggiunto al progetto.
<VBMyExtensionTemplate
ID="Microsoft.VisualBasic.Samples.MyExtensions.MyPrinterInfo"
Version="1.0.0.0"
AssemblyFullName="Microsoft.VisualBasic.PowerPacks.vs"
/>
Il file CustomData contiene un elemento <con VBMyExtensionTemplate> attributi elencati nella tabella seguente.
<CustomDataSignature>Microsoft.VisualBasic.MyExtension</CustomDataSignature>
Non è possibile modificare direttamente i file in una cartella compressa (file con estensione zip). È necessario
copiare il file con estensione vstemplate dalla cartella compressa, modificarlo e quindi sostituire il file con
estensione vstemplate nella cartella compressa con la copia aggiornata.
Nell'esempio seguente viene illustrato il contenuto di un file con estensione vstemplate per il quale è stato
<CustomDataSignature> aggiunto l'elemento.
Installare il modello
Per installare il modello, è possibile copiare la cartella compressa (file zip ) nella cartella dei modelli di elemento
Visual Basic. Per impostazione predefinita, i modelli di elemento utente si trovano in
%USERPROFILE%\Documents\Visual Studio <Version> \Templates\ItemTemplates\Visual Basic. In alternativa, è
possibile pubblicare il modello come file di Programma di installazione di Visual Studio (VSI).
Vedi anche
Estensione dello spazio dei nomi My in Visual Basic
Estensione del modello di applicazione Visual Basic
Personalizzazione degli oggetti disponibili in My
Pagina Estensioni My, Creazione progetti
Estensione del modello di applicazione Visual Basic
05/03/2021 • 9 minutes to read • Edit Online
È possibile aggiungere funzionalità al modello di applicazione eseguendo l'override dei Overridable membri
della WindowsFormsApplicationBase classe. Questa tecnica consente di personalizzare il comportamento del
modello applicativo e di aggiungere chiamate a metodi personalizzati quando l'applicazione viene avviata e
arrestata.
Il modello di applicazione Visual Basic fornisce anche StartupNextInstance gli UnhandledException eventi e.
Nella grafica seguente viene illustrato il meccanismo per la generazione di questi eventi.
Configurazione dell'applicazione
Come parte del modello di applicazione Visual Basic, la WindowsFormsApplicationBase classe fornisce proprietà
protette per la configurazione dell'applicazione. Queste proprietà devono essere impostate nel costruttore della
classe di implementazione.
In un progetto Windows Form predefinito, Progettazione progetti crea codice per impostare le proprietà con
le impostazioni della finestra di progettazione. Le proprietà vengono usate solo quando l'applicazione viene
avviata; l'impostazione dopo l'avvio dell'applicazione non ha alcun effetto.
EnableVisualStyles Se l'applicazione utilizzerà gli stili visivi Casella di controllo Abilita stili di
che corrispondono a Windows XP. visualizzazione XP
Vedi anche
ApplicationBase
Startup
StartupNextInstance
UnhandledException
Shutdown
NetworkAvailabilityChanged
Cenni preliminari sul modello di applicazione Visual Basic
Application Page, Project Designer (Visual Basic)
Personalizzazione degli oggetti disponibili in My
(Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Questo argomento descrive come è possibile controllare quali My oggetti sono abilitati impostando la _MYTYPE
costante di compilazione condizionale del progetto. L'ambiente di sviluppo integrato (IDE) di Visual Studio
mantiene la _MYTYPE costante di compilazione condizionale per un progetto sincronizzato con il tipo del
progetto.
/define:_MYTYPE=\"WindowsForms\"
Questa tabella mostra le _MYTYPE impostazioni della costante di compilazione condizionale per diversi tipi di
progetto.
T IP O DI P RO GET TO _VA LO RE M Y T Y P E
Web Web
Empty Vuoto
NOTE
Per tutti i confronti di stringhe di compilazione condizionale viene fatta distinzione tra maiuscole e minuscole,
indipendentemente dalla modalità di Option Compare impostazione dell'istruzione.
_M YA P P L IC AT IO _M Y C O M P UT ERT
_M Y T Y P E NT YPE YPE _M Y F O RM S _M Y USERT Y P E _SERVIZ IO W EB
Personalizzato Non definito Non definito Non definito Non definito Non definito
Vuoto Non definito Non definito Non definito Non definito Non definito
Per impostazione predefinita, le costanti di compilazione condizionale non definite vengono risolte in FALSE . È
possibile specificare i valori per le costanti non definite quando si compila il progetto per eseguire l'override del
comportamento predefinito.
NOTE
Quando _MYTYPE è impostato su "Custom", il progetto contiene lo My spazio dei nomi, ma non contiene oggetti.
Tuttavia, _MYTYPE l'impostazione di su "Empty" impedisce al compilatore di aggiungere lo My spazio dei nomi e i relativi
oggetti.
Questa tabella descrive gli effetti dei valori predefiniti delle _MY costanti di compilazione.
Vedi anche
ApplicationBase
Computer
Log
User
Dipendenza di My dal tipo di progetto
Compilazione condizionale
-define (Visual Basic)
Oggetto My.Forms
Oggetto My.Request
Oggetto My.Response
Oggetto My.WebServices
Concetti di programmazione (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Programmazione asincrona con Async e Await (Visual Basic) Viene illustrato come creare una soluzione asincrona usando
le parole chiave Async e Await. È inclusa una procedura
dettagliata.
Panoramica degli attributi (Visual Basic) Viene spiegato come offrire informazioni aggiuntive su
elementi di programmazione quali tipi, campi, metodi e
proprietà usando gli attributi.
Informazioni sul chiamante (Visual Basic) Viene descritto come ottenere informazioni relative al
chiamante di un metodo. Queste informazioni includono il
percorso del file e il numero di righe del codice sorgente,
nonché il nome del chiamante.
Raccolte (Visual Basic) Vengono descritti alcuni dei tipi di raccolte disponibili in .NET
Framework. Viene mostrato come usare raccolte semplici e
raccolte di coppie chiave/valore.
Covarianza e controvarianza (Visual Basic) Viene mostrato come abilitare la conversione implicita di
parametri di tipo generico in interfacce e delegati.
Alberi delle espressioni (Visual Basic) Viene illustrato come è possibile usare gli alberi delle
espressioni per abilitare la modifica dinamica del codice
eseguibile.
Iteratori [Visual Basic] Vengono descritti gli iteratori, che consentono di scorrere le
raccolte e restituire gli elementi uno alla volta.
LINQ (Language-Integrated Query) (Visual Basic) Vengono illustrate le potenti funzionalità di query della
sintassi del linguaggio Visual Basic e il modello per
l'esecuzione di query su database relazionali, documenti
XML, set di dati e raccolte in memoria.
Programmazione orientata a oggetti (Visual Basic) Vengono descritti concetti comuni della programmazione
orientata a oggetti, inclusi incapsulamento, ereditarietà e
polimorfismo.
Reflection (Visual Basic) Viene illustrato in che modo è possibile usare la reflection
per creare dinamicamente un'istanza di un tipo, associare il
tipo a un oggetto esistente oppure ottenere il tipo da un
oggetto esistente e richiamarne i metodi o accedere ai
relativi campi e proprietà.
Suggerimenti sulle prestazioni Vengono discusse diverse regole base che consentono di
migliorare le prestazioni dell'applicazione.
Programmazione asincrona con Async e await
(Visual Basic)
05/03/2021 • 30 minutes to read • Edit Online
È possibile evitare colli di bottiglia nelle prestazioni e migliorare la risposta generale dell'applicazione
utilizzando la programmazione asincrona. Le tecniche tradizionali per la scrittura di applicazioni asincrone,
tuttavia, possono essere complesse, rendendone difficile la scrittura, il debug e la gestione.
Visual Studio 2012 introduce un approccio semplificato, la programmazione asincrona, che sfrutta il supporto
asincrono in .NET Framework 4.5 e versioni successive oltre che in Windows Runtime. Il compilatore esegue il
lavoro difficile che prima veniva svolto dallo sviluppatore e l'applicazione mantiene una struttura logica simile al
codice sincrono. Di conseguenza, si ottengono tutti i vantaggi della programmazione asincrona con meno lavoro
richiesto.
In questo argomento viene fornita una panoramica di come e quando utilizzare la programmazione asincrona e
vengono forniti collegamenti per supportare gli argomenti contenenti informazioni dettagliate ed esempi.
La modalità asincrona è particolarmente importante per le applicazioni che accedono al thread dell'interfaccia
utente poiché tutte le attività correlate all'interfaccia utente in genere condividono un thread. Se un processo è
bloccato in un'applicazione sincrona, tutte le attività saranno bloccate. L'applicazione non risponde e si potrebbe
pensare che si sia verificato un errore mentre si tratta solo di un'applicazione attesa.
Quando si utilizzano i metodi asincroni, l'applicazione continua a rispondere all'interfaccia utente. È possibile ad
esempio ridimensionare o ridurre a icona una finestra oppure è possibile chiudere l'applicazione se non si
desidera attendere il completamento.
L'approccio basato su modalità asincrona aggiunge l'equivalente di una trasmissione automatica all'elenco di
opzioni da cui è possibile scegliere quando si progettano operazioni asincrone. In questo modo si ottengono
tutti i vantaggi della programmazione asincrona tradizionale con meno lavoro richiesto allo sviluppatore.
End Using
End Function
Le seguenti caratteristiche riepilogano gli elementi che rendono l'esempio precedente un metodo asincrono:
La firma del metodo include un modificatore Async .
Il nome di un metodo asincrono termina per convenzione con un suffisso "Async".
Il tipo restituito è uno dei seguenti:
Task (Of TResult) se il metodo dispone di un'istruzione return in cui l'operando è di tipo TResult.
Task se nel metodo non è presente un'istruzione return oppure è presente un'istruzione return senza
l'operando.
Sub se si sta scrivendo un gestore eventi asincrono.
Per ulteriori informazioni, vedere la sezione "Tipi restituiti e parametri" più avanti in questo argomento.
Il metodo include in genere almeno un'espressione await, che contrassegna un punto in cui il metodo
non può continuare fino a quando l'operazione asincrona attesa non sia completata. Nel frattempo, il
metodo viene sospeso e il controllo ritorna al chiamante del metodo. Nella sezione successiva di questo
argomento viene illustrato quello che accade in corrispondenza del punto di sospensione.
Nei metodi asincroni utilizzare le parole chiave e i tipi forniti per indicare l'operazione da eseguire e il
compilatore esegue il resto dell'operazione, inclusa la traccia di cosa deve verificarsi quando il controllo viene
restituito a un punto di attesa in un metodo sospeso. Alcuni processi di routine, come cicli e gestione delle
eccezioni, possono essere difficili da gestire nel codice asincrono tradizionale. In un metodo asincrono scrivere
questi elementi come in una soluzione sincrona e il problema viene risolto.
Per altre informazioni sulla modalità asincrona in versioni precedenti di .NET Framework, vedere TPL and
Traditional .NET Framework Asynchronous Programming (TPL e programmazione asincrona .NET Framework
tradizionale).
4. Poiché getStringTask non è stata ancora attesa, AccessTheWebAsync può continuare con altro lavoro che
non dipende dal risultato finale ottenuto da GetStringAsync . Tale lavoro è rappresentato da una chiamata
al metodo sincrono DoIndependentWork .
5. DoIndependentWork è un metodo sincrono che esegue il proprio lavoro e lo restituisce al chiamante.
6. AccessTheWebAsync ha esaurito il lavoro che può eseguire senza un risultato da getStringTask .
AccessTheWebAsync deve quindi calcolare e restituire la lunghezza della stringa scaricata, ma il metodo
non può calcolare il valore finché quest'ultimo non contiene la stringa.
Di conseguenza, AccessTheWebAsync utilizza un operatore await per sospendere lo stato di avanzamento e
restituire il controllo al metodo che ha chiamato AccessTheWebAsync . AccessTheWebAsync restituisce
Task(Of Integer) al chiamante. L'attività rappresenta l'intenzione di produrre un risultato di tipo Integer
che è la lunghezza della stringa scaricata.
NOTE
Se l'operazione GetStringAsync (e quindi getStringTask ) viene completata prima che AccessTheWebAsync
ne attenda il risultato, il controllo resta a AccessTheWebAsync . I costi per sospendere e tornare a
AccessTheWebAsync sarebbero sprecati se il processo asincrono chiamato ( getStringTask ) fosse già
completato e AccessTheWebSync non dovesse attendere il risultato finale.
Nel chiamante (in questo esempio il gestore eventi), il modello di elaborazione continua. Il chiamante può
eseguire altre attività che non dipendono dal risultato di AccessTheWebAsync prima di attendere tale
risultato oppure può mettersi immediatamente in attesa. Il gestore eventi è in attesa di
AccessTheWebAsync e AccessTheWebAsync è in attesa di GetStringAsync .
7. GetStringAsync termina e produce un risultato di stringa. Il risultato di stringa non viene restituito dalla
chiamata a GetStringAsync nel modo previsto. Tenere presente che il metodo non ha restituito un'attività
al passaggio 3. Il risultato di stringa viene invece memorizzato nell'attività che rappresenta il
completamento del metodo, ovvero getStringTask . L'operatore await recupera il risultato da
getStringTask . L'istruzione di assegnazione assegna il risultato recuperato a urlContents .
8. Quando AccessTheWebAsync ha il risultato di stringa, il metodo può calcolare la lunghezza della stringa. Il
lavoro di AccessTheWebAsync è quindi completo e il gestore eventi in attesa può riprendere l'attività.
Nell'esempio completo alla fine dell'argomento è possibile confermare che il gestore eventi recupera e
stampa il valore del risultato di lunghezza.
Se non si ha familiarità con la programmazione asincrona, valutare la differenza tra il comportamento sincrono
e asincrono. Viene restituito un metodo sincrono quando il lavoro è completato (passaggio 5), ma un metodo
asincrono restituisce un valore di attività quando il relativo lavoro viene sospeso (passaggi 3 e 6). Una volta che
il metodo asincrono completa l'operazione, l'attività viene contrassegnata come completata e il risultato, se
disponibile, viene archiviato nell'attività.
Per altre informazioni sul flusso di controllo, vedere Flusso di controllo in programmi asincroni (Visual Basic).
Thread
I metodi asincroni vengono considerati operazioni non bloccanti. Un' Await espressione in un metodo
asincrono non blocca il thread corrente quando l'attività attesa è in esecuzione. Al contrario, l'espressione
registra il resto del metodo come continuazione e restituisce il controllo al chiamante del metodo asincrono.
Le parole chiave Async e Await non determinano la creazione di thread aggiuntivi. I metodi asincroni non
richiedono il multithreading perché un metodo asincrono non viene eseguito nel proprio thread. Il metodo viene
eseguito nel contesto di sincronizzazione corrente e utilizza il tempo sul thread solo se il metodo è attivo. È
possibile utilizzare Task.Run per spostare un lavoro associato alla CPU in un thread in background. Quest'ultimo
tuttavia non è di alcun ausilio in un processo che attende solo che i risultati diventino disponibili.
L'approccio alla programmazione asincrona basato su async è quasi sempre preferibile agli approcci esistenti. In
particolare, questo approccio è migliore di BackgroundWorker per le operazioni di i/O perché il codice è più
semplice e non è necessario proteggersi dalle race condition. Insieme a Task.Run, la programmazione asincrona
è migliore di BackgroundWorker per le operazioni associate alla CPU perché separa i dettagli di coordinamento
per l'esecuzione del codice dal lavoro che Task.Run trasferisce al pool di thread.
Async e await
Se si specifica che un metodo è un metodo asincrono usando un modificatore Async , si abilitano le due
funzionalità seguenti.
Il metodo asincrono contrassegnato può usare await per definire i punti di sospensione. L'operatore
await indica al compilatore che il metodo asincrono non può continuare oltre un dato punto prima del
completamento del processo asincrono in attesa. Nel frattempo il controllo viene restituito al chiamante
del metodo asincrono.
La sospensione di un metodo asincrono in un' Await espressione non costituisce un'uscita dal metodo e
i Finally blocchi non vengono eseguiti.
Il metodo asincrono contrassegnato può essere atteso da metodi che lo chiamano.
Un metodo asincrono contiene in genere una o più occorrenze di un Await operatore, ma l'assenza di Await
espressioni non provoca un errore del compilatore. Se un metodo asincrono non usa un Await operatore per
contrassegnare un punto di sospensione, il metodo viene eseguito come metodo sincrono, nonostante il Async
modificatore. Il compilatore genera un avviso per tali metodi.
Async e Await sono parole chiave contestuali. Per ulteriori informazioni ed esempi, vedere gli argomenti
seguenti:
Asincrona
Operatore await
' . . .
' The method has no return statement.
End Function
Ogni attività restituita rappresenta il lavoro attualmente in fase di esecuzione. Un'attività include le informazioni
sullo stato del processo asincrono e, infine, il risultato finale del processo o l'eccezione che il processo genera se
non viene completato.
Un metodo asincrono può essere anche un metodo Sub . Il tipo restituito viene usato principalmente per
definire i gestori eventi, dove è necessario un tipo restituito. I gestori eventi asincroni fungono spesso da punto
di partenza per i programmi asincroni.
Un metodo asincrono che è una Sub routine non può essere atteso e il chiamante non può intercettare le
eccezioni generate dal metodo.
Un metodo asincrono non può dichiarare parametri ByRef, ma può chiamare metodi che hanno tali parametri.
Per altre informazioni ed esempi, vedere Tipi restituiti asincroni (Visual Basic). Per altre informazioni su come
intercettare eccezioni nei metodi asincroni, vedere Istruzione Try...Catch...Finally.
Nella programmazione Windows Runtime le API asincrone hanno uno dei tipi restituiti seguenti, che sono simili
alle attività:
IAsyncOperation (Of TResult), che corrisponde a Task (Of TResult)
IAsyncAction, che corrisponde a Task
IAsyncActionWithProgress (di TProgress)
IAsyncOperationWithProgress (Of TResult, TProgress)
Per altre informazioni e per un esempio, vedere chiamare le API asincrone in C# o Visual Basic.
Convenzione di denominazione
Per convenzione, il suffisso "Async" viene aggiunto ai nomi dei metodi che presentano un modificatore Async .
È possibile ignorare la convenzione se un evento, una classe base o un contratto di interfaccia suggerisce un
nome diverso. Ad esempio, non è necessario rinominare i gestori eventi comuni, ad esempio Button1_Click .
Procedura dettagliata: accesso al Web Mostra come convertire una soluzione Async Sample: Accessing the Web
con Async e Await (Visual Basic) WPF sincrona in una soluzione WPF Walkthrough (Esempio di attività
asincrona. L'applicazione scarica una asincrona: Accesso alla procedura
serie di siti Web. dettagliata Web)
Procedura: Eseguire più richieste Web Viene illustrato come avviare Async Sample: Make Multiple Web
in parallelo tramite async e await contemporaneamente diverse attività. Requests in Parallel (Esempio di attività
(Visual Basic) asincrona: Esecuzione di più richieste
Web in parallelo)
Tipi restituiti asincroni (Visual Basic) Vengono illustrati i tipi che i metodi
asincroni possono restituire e viene
spiegato quando ogni tipo è
appropriato.
Flusso di controllo in programmi Traccia in dettaglio il flusso di controllo Async Sample: Control Flow in Async
asincroni (Visual Basic) con una successione di espressioni Programs (Esempio di attività
await in un programma asincrono. asincrona: Flusso di controllo in
programmi asincroni)
Ottimizzazione dell'applicazione Async Mostra come aggiungere la seguente Async Sample: Fine Tuning Your
(Visual Basic) funzionalità alla soluzione asincrono: Application (Esempio di attività
asincrona: Ottimizzazione
- Annullare un'attività asincrona o un dell'applicazione)
elenco di attività (Visual Basic)
- Annullare attività asincrone dopo un
periodo di tempo (Visual Basic)
- Annullare le attività asincrone
rimanenti dopo che ne è stata
completata una(Visual Basic)
- Avviare più attività asincrone ed
elaborarle quando vengono
completate (Visual Basic)
T ITO LO DESC RIZ IO N E ESEM P IO
WhenAny: bridging tra .NET Descrive come integrare i tipi di attività Async Sample: Bridging between .NET
Framework e Windows Runtime in .NET Framework e IAsyncOperations and Windows Runtime (AsTask and
in Windows Runtime per usare WhenAny) (Esempio di attività
WhenAny con un metodo di Windows asincrona: Bridging tra .NET e Windows
Runtime. Runtime (AsTask e WhenAny))
Annullamento asincrono: bridging tra Descrive come integrare i tipi di attività Async Sample: Bridging between .NET
.NET Framework e Windows Runtime in .NET Framework e IAsyncOperations and Windows Runtime (AsTask &
in Windows Runtime per usare Cancellation) (Esempio di attività
CancellationTokenSource con un asincrona: Bridging tra .NET e Windows
metodo di Windows Runtime. Runtime (AsTask e Cancellation))
Esempio completo
Il codice seguente rappresenta il file MainWindow.xaml.vb dell'applicazione Windows Presentation Foundation
(WPF) discussa in questo argomento. È possibile scaricare l'esempio dalla pagina Async Sample: Example from
"Asynchronous Programming with Async and Await" (Esempio di attività asincrona: Programmazione asincrona
con async e await).
Imports System.Net.Http
' Example that demonstrates Asynchronous Progamming with Async and Await.
' It uses HttpClient.GetStringAsync to download the contents of a website.
' Sample Output:
' Working . . . . . . .
'
' Length of the downloaded string: 39678.
Class MainWindow
' Mark the event handler with Async so you can use Await in it.
Private Async Sub StartButton_Click(sender As Object, e As RoutedEventArgs)
End Sub
' You can do other work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork()
End Using
End Function
Sub DoIndependentWork()
ResultsTextBox.Text &= $"Working . . . . . . .{vbCrLf}"
End Sub
End Class
Vedi anche
Operatore await
Asincrona
Panoramica degli attributi (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Gli attributi offrono un metodo efficace per l'associazione di metadati o informazioni dichiarative con il codice
(assembly, tipi, metodi, proprietà e così via). Dopo aver associato un attributo a un'entità di programma, in fase
di esecuzione è possibile eseguire una query su tale attributo usando una tecnica denominata reflection. Per
altre informazioni, vedere Reflection (Visual Basic).
Di seguito sono riportate le proprietà degli attributi:
Gli attributi aggiungono metadati al programma. I metadati sono informazioni relative ai tipi definiti in un
programma. Tutti gli assembly .NET contengono un set specificato di metadati che descrive i tipi e
membri dei tipi definiti nell'assembly. È possibile aggiungere attributi personalizzati per specificare altre
informazioni eventualmente necessarie. Per altre informazioni, vedere Creazione di attributi
personalizzati (Visual Basic).
È possibile applicare uno o più attributi a interi assembly, moduli o elementi di programma di minori
dimensioni, ad esempio classi e proprietà.
Gli attributi possono accettare argomenti nello stesso modo dei metodi e delle proprietà.
Il programma può esaminare i propri metadati oppure i metadati di un altro programma tramite
reflection. Per altre informazioni, vedere Accesso agli attributi tramite reflection (Visual Basic).
Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub
Alcuni attributi possono essere specificati più volte per una stessa entità. Un esempio di attributo multiuso è
ConditionalAttribute:
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
NOTE
Per convenzione tutti i nomi di attributo terminano con la parola "Attribute", in modo che sia possibile distinguerli da altri
elementi di .NET Framework. Tuttavia, quando gli attributi vengono usati nel codice, non è necessario specificare il suffisso
Attribute. Ad esempio, [DllImport] è equivalente a [DllImportAttribute] , mentre DllImportAttribute è il nome
effettivo dell'attributo in .NET Framework.
<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>
Il primo parametro, ovvero il nome della DLL, è posizionale ed è sempre specificato per primo. Gli altri parametri
sono denominati. In questo caso, entrambi i parametri denominati sono impostati automaticamente su false e
possono quindi essere omessi. Per informazioni sui valori predefiniti dei parametri, fare riferimento alla
documentazione di ciascun attributo.
Destinazioni degli attributi
La destinazione di un attributo è l'entità a cui tale attributo viene applicato. Un attributo, ad esempio, può essere
applicato a una classe, a un metodo particolare o a un intero assembly. Per impostazione predefinita, un
attributo viene applicato all'elemento che lo segue. È tuttavia possibile identificare in modo esplicito, ad
esempio, se un attributo viene applicato a un metodo, al relativo parametro o al relativo valore restituito.
Per identificare in modo esplicito la destinazione di un attributo, usare la sintassi seguente:
<target : attribute-list>
VA LO RE DI DEST IN A Z IO N E SI A P P L IC A A
Nell'esempio seguente viene illustrato come applicare attributi ad assembly e moduli. Per altre informazioni,
vedere Attributi comuni (Visual Basic).
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
Sezioni correlate
Per altre informazioni, vedere:
Creazione di attributi personalizzati (Visual Basic)
Accesso agli attributi tramite reflection (Visual Basic)
Procedura: Creare un'unione C/C++ tramite attributi (Visual Basic)
Attributi comuni (Visual Basic)
Informazioni sul chiamante (Visual Basic)
Vedi anche
Guida per programmatori Visual Basic
Reflection (Visual Basic)
Attributes (Attributi)
Informazioni sul chiamante (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Gli attributi di informazioni sul chiamante consentono di ottenere informazioni sul chiamante di un metodo. È
possibile ottenere il percorso del file del codice sorgente, il numero di riga nel codice sorgente e il nome del
chiamante. Queste informazioni sono utili per la tracciatura, il debug e la creazione di strumenti diagnostici.
Per ottenere queste informazioni, utilizzare gli attributi applicati ai parametri facoltativi, a ognuno dei quali è
associato un valore predefinito. Nella tabella seguente sono elencati gli attributi di informazioni sul chiamante
definiti nello spazio dei nomi System.Runtime.CompilerServices:
Esempio
Nell'esempio seguente viene illustrato come utilizzare gli attributi di informazioni sul chiamante. Per ogni
chiamata al metodo TraceMessage , le informazioni sul chiamante vengono sostituite come argomenti dei
parametri facoltativi.
Nel grafico seguente vengono mostrati i nomi dei membri restituiti quando si utilizza l'attributo
CallerMemberName .
Metodo, proprietà o evento Nome del metodo, della proprietà o dell'evento da cui la
chiamata ha avuto origine.
Operatori o conversioni definiti dall'utente Nome generato per il membro, ad esempio "op_Addition".
Nessun membro contenitore (ad esempio a livello di Valore predefinito del parametro facoltativo.
assembly o attributi applicati a tipi)
Vedi anche
Attributi (Visual Basic)
Attributi comuni (Visual Basic)
Parametri facoltativi
Concetti di programmazione (Visual Basic)
Raccolte (Visual Basic)
05/03/2021 • 23 minutes to read • Edit Online
Per molte applicazioni è utile creare e gestire gruppi di oggetti correlati. È possibile raggruppare gli oggetti in
due modi: creando matrici di oggetti e creando raccolte di oggetti.
Le matrici sono estremamente utili per la creazione e l'uso di un numero fisso di oggetti fortemente tipizzati. Per
altre informazioni sulle matrici, vedere Matrici.
Le raccolte consentono di lavorare in modo più flessibile con gruppi di oggetti. A differenza delle matrici, il
gruppo di oggetti con cui si lavora può aumentare e diminuire in modo dinamico in base alle esigenze
dell'applicazione. Per alcune raccolte è possibile assegnare una chiave a qualsiasi oggetto inserito nella raccolta
in modo da recuperare rapidamente l'oggetto usando la chiave.
Una raccolta è una classe. Di conseguenza, prima di poter aggiungere elementi a una nuova raccolta è
necessario dichiarare la raccolta.
Se la raccolta contiene elementi di un solo tipo di dati, è possibile usare una delle classi dello spazio dei nomi
System.Collections.Generic. In una raccolta generica viene imposta l'indipendenza dai tipi, in modo da impedire
che vengano aggiunti altri tipi di dati alla raccolta. Quando si recupera un elemento da una raccolta generica,
non è necessario determinarne il tipo di dati né convertirlo.
NOTE
Per gli esempi in questo argomento, includere le istruzioni Imports per gli System.Collections.Generic System.Linq
spazi dei nomi e.
Se il contenuto di una raccolta è noto in anticipo, si può usare un inizializzatore di raccolta per inizializzare la
raccolta. Per altre informazioni, vedere Inizializzatori di insieme.
L'esempio seguente è identico all'esempio precedente, ma usa un inizializzatore di raccolta per aggiungere
elementi alla raccolta.
' Create a list of strings by using a
' collection initializer.
Dim salmons As New List(Of String) From
{"chinook", "coho", "pink", "sockeye"}
È possibile usare un per... Istruzione successiva anziché un' For Each istruzione per scorrere una raccolta.
Questo è possibile mediante l'accesso agli elementi della raccolta dalla posizione di indice. L'indice degli
elementi inizia da 0 e termina in corrispondenza del numero di elementi meno 1.
Nell'esempio seguente l'iterazione negli elementi di una raccolta avviene mediante For…Next anziché mediante
For Each .
Nell'esempio seguente viene rimosso un elemento dalla raccolta specificando l'oggetto da rimuovere.
Nell'esempio seguente vengono rimossi elementi da un elenco generico. Anziché un' For Each istruzione, un
oggetto per... Viene utilizzata l'istruzione successiva che esegue l'iterazione in ordine decrescente. Ciò è
necessario perché il metodo RemoveAt fa sì che gli elementi dopo un elemento rimosso abbiano un valore di
indice inferiore.
Dim numbers As New List(Of Integer) From
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Per il tipo di elementi in List<T>, è possibile anche definire una classe personalizzata. Nell'esempio seguente la
classe Galaxy viene usata dall'oggetto List<T> definito nel codice.
' Output:
' Tadpole 400
' Pinwheel 25
' Milky Way 0
' Andromeda 3
End Sub
Tipi di raccolte
Molte raccolte comuni vengono fornite da .NET Framework. Ogni tipo di raccolta è progettato per uno scopo
specifico.
In questa sezione sono descritte alcune classi di raccolte comuni:
Classi System.Collections.Generic
Classi System.Collections.Concurrent
Classi System.Collections
Classe Collection di Visual Basic
Classi System.Collections.Generic
È possibile creare una raccolta generica usando una delle classi dello spazio dei nomi
System.Collections.Generic. Una raccolta generica è utile quando ogni elemento al suo interno presenta lo
stesso tipo di dati. Una raccolta generica applica la tipizzazione forte consentendo di aggiungere soltanto i tipi di
dati desiderati.
La tabella seguente elenca alcune delle classi di uso frequente dello spazio dei nomi System.Collections.Generic:
Per altre informazioni, vedere Tipi di raccolte comunemente utilizzate, Selezione di una classe Collection e
System.Collections.Generic.
Classi System.Collections.Concurrent
In .NET Framework 4 o versioni successive le raccolte dello spazio dei nomi System.Collections.Concurrent
garantiscono operazioni thread-safe efficienti per accedere agli elementi della raccolta da più thread.
Le classi dello spazio dei nomi System.Collections.Concurrent devono essere usate in sostituzione dei tipi
corrispondenti negli spazi dei nomi System.Collections.Generic e System.Collections ogni volta che più thread
accedono contemporaneamente alla raccolta. Per altre informazioni, vedere Raccolte thread-safe e
System.Collections.Concurrent.
Alcune classi incluse nello spazio dei nomi System.Collections.Concurrent sono BlockingCollection<T>,
ConcurrentDictionary<TKey,TValue>, ConcurrentQueue<T> e ConcurrentStack<T>.
Classi System.Collections
Le classi dello spazio dei nomi System.Collections non archiviano gli elementi come oggetti tipizzati in modo
specifico, ma come oggetti di tipo Object .
Quando possibile, usare le raccolte generiche degli spazi dei nomi System.Collections.Generic o
System.Collections.Concurrent al posto dei tipi legacy dello spazio dei nomi System.Collections .
La tabella seguente elenca alcune classi di uso frequente nello spazio dei nomi System.Collections :
Lo spazio dei nomi System.Collections.Specialized offre classi di raccolte fortemente tipizzate e specializzate, ad
esempio raccolte di sole stringhe, dizionari ibridi e dizionari a elenchi collegati.
Classe Collection di Visual Basic
È possibile usare la classe Collection di Visual Basic per accedere a un elemento della raccolta usando un indice
numerico o una chiave String . Per aggiungere elementi a un oggetto raccolta, è possibile specificare o non
specificare una chiave. Se si aggiunge un elemento senza una chiave, è necessario usare il relativo indice
numerico per accedervi.
La classe Collection di Visual Basic archivia tutti gli elementi di tipo Object , pertanto è possibile aggiungere
un elemento di qualsiasi tipo di dati. Non esiste alcuna misura per impedire l'aggiunta di tipi di dati non
appropriati.
Quando si usa la classe Collection di Visual Basic, il primo elemento di una raccolta ha indice 1. Questo
comportamento è diverso rispetto alle classi Collection di .NET Framework, per cui l'indice iniziale è 0.
Quando possibile, usare le raccolte generiche negli spazi dei nomi System.Collections.Generic o
System.Collections.Concurrent al posto della classe Collection di Visual Basic.
Per altre informazioni, vedere Collection.
L'esempio seguente crea una raccolta Dictionary ed esegue l'iterazione nel dizionario usando un'istruzione
For Each .
Private Sub IterateThroughDictionary()
Dim elements As Dictionary(Of String, Element) = BuildDictionary()
Return elements
End Function
theElement.Symbol = symbol
theElement.Name = name
theElement.AtomicNumber = atomicNumber
elements.Add(Key:=theElement.Symbol, value:=theElement)
End Sub
Per usare invece un inizializzatore di raccolta per compilare la raccolta Dictionary , è possibile sostituire i
metodi BuildDictionary e AddToDictionary con il metodo seguente.
L'esempio seguente usa il metodo ContainsKey e la proprietà Item[] di Dictionary per trovare rapidamente un
elemento in base alla chiave. La Item proprietà consente di accedere a un elemento nella elements raccolta
usando il elements(symbol) codice in Visual Basic.
Private Sub FindInDictionary(ByVal symbol As String)
Dim elements As Dictionary(Of String, Element) = BuildDictionary()
L'esempio seguente usa invece il metodo TryGetValue per individuare rapidamente un elemento in base alla
chiave.
' Output:
' Calcium 20
' Potassium 19
' Scandium 21
End Sub
' Output:
' blue 50 car4
' blue 30 car5
' blue 20 car1
' green 50 car7
' green 10 car3
' red 60 car6
' red 50 car2
End Sub
Return compare
End Function
End Class
Vedi anche
Inizializzatori di insieme
Concetti di programmazione (Visual Basic)
Option Strict Statement
LINQ to Objects (Visual Basic)
Parallel LINQ (PLINQ)
Raccolte e strutture di dati
Selezione di una classe Collection
Confronti e ordinamenti all'interno delle raccolte
Quando usare le raccolte generiche
Covarianza e controvarianza (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
In Visual Basic, covarianza e controvarianza abilitano la conversione implicita del riferimento per i tipi di matrice,
i tipi delegati e gli argomenti di tipo generico. La covarianza mantiene la compatibilità dell'assegnazione e la
controvarianza la inverte.
Il codice seguente illustra la differenza tra la compatibilità dell'assegnazione, covarianza e controvarianza.
' Covariance.
Dim strings As IEnumerable(Of String) = New List(Of String)()
' An object that is instantiated with a more derived type argument
' is assigned to an object instantiated with a less derived type argument.
' Assignment compatibility is preserved.
Dim objects As IEnumerable(Of Object) = strings
' Contravariance.
' Assume that there is the following method in the class:
' Shared Sub SetObject(ByVal o As Object)
' End Sub
Dim actObject As Action(Of Object) = AddressOf SetObject
La covarianza per le matrici consente la conversione implicita di una matrice di un tipo più derivato in una
matrice di un tipo meno derivato. Ma questa operazione non è indipendente dai tipi, come illustrato
nell'esempio di codice seguente.
Il supporto di covarianza e controvarianza per i gruppi di metodi consente la corrispondenza delle firme del
metodo con i tipi delegati. Ciò consente di assegnare ai delegati non solo i metodi con firme corrispondenti, ma
anche i metodi che restituiscono più tipi derivati (covarianza) o accettano parametri con meno tipi derivati
(controvarianza) rispetto a quelli specificati dal tipo delegato. Per altre informazioni, vedere Varianza nei delegati
(Visual Basic) e Uso della varianza nei delegati (Visual Basic).
L'esempio di codice seguente illustra il supporto di covarianza e controvarianza per i gruppi di metodi.
Shared Function GetObject() As Object
Return Nothing
End Function
End Sub
In .NET Framework 4 o versioni successive Visual Basic supporta la covarianza e la controvarianza nelle
interfacce e nei delegati generici e consente la conversione implicita di parametri di tipo generico. Per altre
informazioni, vedere Varianza nelle interfacce generiche (Visual Basic) e Varianza nei delegati (Visual Basic).
L'esempio di codice seguente illustra la conversione implicita del riferimento per le interfacce generiche.
Le interfacce o i delegati generici sono detti varianti se i relativi parametri generici vengono dichiarati come
covarianti o controvarianti. Visual Basic consente di creare i propri delegati e interfacce varianti. Per altre
informazioni, vedere Creazione di interfacce generiche varianti (Visual Basic) e Varianza nei delegati (Visual
Basic).
Argomenti correlati
T ITO LO DESC RIZ IO N E
Varianza nelle interfacce generiche (Visual Basic) Illustra la covarianza e la controvarianza nelle interfacce
generiche e fornisce un elenco di interfacce generiche variant
in .NET Framework.
Creazione di interfacce generiche varianti (Visual Basic) Spiega come creare interfacce varianti personalizzate.
Uso della varianza nelle interfacce per le raccolte generiche Spiega come il supporto di covarianza e controvarianza nelle
(Visual Basic) interfacce IEnumerable<T> e IComparable<T> consente di
riutilizzare il codice.
Varianza nei delegati (Visual Basic) Illustra la covarianza e la controvarianza nei delegati generici
e non generici e offre un elenco di delegati generici varianti
in .NET Framework.
T ITO LO DESC RIZ IO N E
Uso della varianza nei delegati (Visual Basic) Spiega come usare il supporto di covarianza e
controvarianza nei delegati non generici per la
corrispondenza delle firme del metodo con i tipi delegati.
Utilizzo della varianza per i delegati generici Func e Action Spiega come il supporto di covarianza e controvarianza nei
(Visual Basic) delegati Func e Action consente di riutilizzare il codice.
Alberi delle espressioni (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Gli alberi delle espressioni rappresentano codice in una struttura dei dati simile a un albero, dove ogni nodo è
un'espressione, ad esempio una chiamata al metodo o un'operazione binaria come x < y .
È possibile compilare ed eseguire codice rappresentato dagli alberi delle espressioni. In questo modo è possibile
modificare dinamicamente codice eseguibile, eseguire query LINQ in vari database e creare query dinamiche.
Per altre informazioni sugli alberi delle espressioni in LINQ, vedere How to: Use Expression Trees to Build
Dynamic Queries (Visual Basic) (Procedura: Usare alberi delle espressioni per creare query dinamiche (Visual
Basic)).
Gli alberi delle espressioni sono anche usati in Dynamic Language Runtime (DLR) per fornire interoperabilità tra
linguaggi dinamici e .NET Framework e per consentire ai writer dei compilatori di creare alberi delle espressioni
invece di codice MSIL (Microsoft Intermediate Language). Per altre informazioni su DLR, vedere Dynamic
Language Runtime Overview (Panoramica su Dynamic Language Runtime).
È possibile creare un albero delle espressioni tramite il compilatore di C# o di Visual Basic in base a
un'espressione lambda anonima o creare tali alberi di espressioni manualmente tramite il nome spazio
System.Linq.Expressions.
' Manually build the expression tree for the lambda expression num => num < 5.
Dim numParam As ParameterExpression = Expression.Parameter(GetType(Integer), "num")
Dim five As ConstantExpression = Expression.Constant(5, GetType(Integer))
Dim numLessThanFive As BinaryExpression = Expression.LessThan(numParam, five)
Dim lambda1 As Expression(Of Func(Of Integer, Boolean)) =
Expression.Lambda(Of Func(Of Integer, Boolean))(
numLessThanFive,
New ParameterExpression() {numParam})
In .NET Framework 4 o nelle versioni successive l'API degli alberi delle espressioni supporta anche assegnazioni
ed espressioni del flusso di controllo quali cicli, blocchi condizionali e blocchi try-catch . Tramite l'API è
possibile creare alberi delle espressioni più complessi rispetto a quelli che è possibile creare da espressioni
lambda tramite il compilatore di Visual Basic. L'esempio seguente illustra come creare un albero delle
espressioni che calcola il fattoriale di un numero.
Console.WriteLine(factorial)
' Prints 120.
Per altre informazioni, vedere l'articolo Generating Dynamic Methods with Expression Trees in Visual Studio
2010 (Generazione di metodi dinamici con alberi delle espressioni in Visual Studio 2010), valido anche per le
versioni successive di Visual Studio.
' Invoking the delegate and writing the result to the console.
Console.WriteLine(result(4))
Per altre informazioni, vedere How to: Execute Expression Trees (Visual Basic) (Procedura: Eseguire alberi delle
espressioni (Visual Basic)).
Vedi anche
System.Linq.Expressions
How to: Execute Expression Trees (Visual Basic) (Procedura: Eseguire alberi delle espressioni (Visual Basic))
How to: Modify Expression Trees (Visual Basic) (Procedura: Modificare alberi delle espressioni (Visual Basic)).
Espressioni lambda
Panoramica di Dynamic Language Runtime
Concetti di programmazione (Visual Basic)
Iteratori [Visual Basic]
05/03/2021 • 16 minutes to read • Edit Online
Un iteratore può essere usato per scorrere le raccolte come gli elenchi e le matrici.
Un metodo iteratore o funzione di accesso get esegue un'iterazione personalizzata su una raccolta. Un metodo
iteratore usa l'istruzione yield per restituire un elemento alla volta. Quando viene raggiunta un'istruzione Yield
, la posizione corrente nel codice viene memorizzata. L'esecuzione viene riavviata a partire da quella posizione la
volta successiva che viene chiamata la funzione iteratore.
Si utilizza un iteratore dal codice client utilizzando un per ogni... Istruzione Next oppure tramite una query LINQ.
Nell'esempio seguente, la prima iterazione del ciclo For Each fa procedere l'esecuzione nel metodo iteratore
SomeNumbers fino al raggiungimento della prima istruzione Yield . Questa iterazione restituisce un valore pari a
3 e viene mantenuta la posizione corrente nel metodo iteratore. All'iterazione successiva del ciclo, l'esecuzione
nel metodo iteratore continua da dove è stata interrotta, fermandosi ancora quando raggiunge un'istruzione
Yield . Questa iterazione restituisce un valore pari a 5 e viene ancora mantenuta la posizione corrente nel
metodo iteratore. Il ciclo termina quando si raggiunge la fine del metodo iteratore.
Sub Main()
For Each number As Integer In SomeNumbers()
Console.Write(number & " ")
Next
' Output: 3 5 8
Console.ReadKey()
End Sub
Il tipo restituito di un metodo iteratore o di una funzione di accesso get può essere IEnumerable,
IEnumerable<T>, IEnumerator o IEnumerator<T>.
È possibile utilizzare un' Exit Function Return istruzione o per terminare l'iterazione.
Una Visual Basic funzione iteratore o una get dichiarazione di funzione di accesso include un modificatore
iteratore .
Gli iteratori sono stati introdotti in Visual Basic in Visual Studio 2012.
Contenuto dell'argomento
Iteratore semplice
Creazione di una classe Collection
Blocchi try
Metodi anonimi
Uso degli iteratori con un elenco generico
Informazioni sulla sintassi
Implementazione tecnica
Uso degli iteratori
NOTE
Per tutti gli esempi nell'argomento eccetto l'esempio iteratore semplice, includere le istruzioni Imports per gli
System.Collections System.Collections.Generic spazi dei nomi e.
Iteratore semplice
Nell'esempio seguente è presente una singola Yield istruzione che si trova all'interno di un oggetto per... Ciclo
successivo . In Main ogni iterazione del corpo dell'istruzione For Each crea una chiamata alla funzione
iteratore, che procede all'istruzione Yield successiva.
Sub Main()
For Each number As Integer In EvenSequence(5, 18)
Console.Write(number & " ")
Next
' Output: 6 8 10 12 14 16 18
Console.ReadKey()
End Sub
Public days =
New String() {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}
Nell'esempio seguente viene creata una classe Zoo che contiene una raccolta di animali.
L'istruzione For Each che fa riferimento all'istanza della classe ( theZoo ) chiama implicitamente il metodo
GetEnumerator . Le istruzioni For Each che fanno riferimento alle proprietà Birds e Mammals usano il metodo
iteratore denominato AnimalsForType .
Sub Main()
Dim theZoo As New Zoo()
theZoo.AddMammal("Whale")
theZoo.AddMammal("Rhinoceros")
theZoo.AddBird("Penguin")
theZoo.AddBird("Warbler")
Console.ReadKey()
End Sub
Blocchi try
Visual Basic consente a un' Yield istruzione nel Try blocco di un'istruzione try... Rileva... Istruzione finally. Un
Try blocco con un' Yield istruzione può contenere Catch blocchi e può avere un Finally blocco.
Nell'esempio seguente sono inclusi i Try Catch blocchi, e Finally in una funzione iteratore. Il Finally
blocco nella funzione iteratore viene eseguito prima del For Each completamento dell'iterazione.
Sub Main()
For Each number As Integer In Test()
Console.WriteLine(number)
Next
Console.WriteLine("For Each is done.")
' Output:
' 3
' 4
' Something happened. Yields are done.
' Finally is called.
' For Each is done.
Console.ReadKey()
End Sub
Un' Yield istruzione non può trovarsi all'interno di un Catch blocco o di un Finally blocco.
Se il For Each corpo (anziché il metodo iteratore) genera un'eccezione, un Catch blocco nella funzione
iteratore non viene eseguito, ma Finally viene eseguito un blocco nella funzione iteratore. Un Catch blocco
all'interno di una funzione iteratore intercetta solo le eccezioni che si verificano all'interno della funzione
iteratore.
Metodi anonimi
In Visual Basic, una funzione anonima può essere una funzione iteratore. Questa condizione è illustrata
nell'esempio seguente.
Nell'esempio seguente viene utilizzato un metodo non iteratore per la convalida degli argomenti. Il metodo
restituisce il risultato di un iteratore anonimo che descrive gli elementi della raccolta.
Sub Main()
For Each number As Integer In GetSequence(5, 10)
Console.Write(number & " ")
Next
' Output: 5 6 7 8 9 10
Console.ReadKey()
End Sub
Se la convalida è invece all'interno della funzione iteratore, la convalida non può essere eseguita fino all'inizio
della prima iterazione del For Each corpo.
Sub Main()
Dim theStack As New Stack(Of Integer)
Console.ReadKey()
End Sub
Yield GetEnumerator()
End Function
Implementazione tecnica
Anche se si scrive un iteratore come metodo, il compilatore lo traduce in una classe annidata che, in pratica, è
una macchina a stati. Questa classe tiene traccia della posizione dell'iteratore purché il ciclo For Each...Next nel
codice client sia continuo.
Per verificare le operazioni eseguite dal compilatore, è possibile usare lo strumento Ildsam.exe per visualizzare il
codice Microsoft Intermediate Language generato per un metodo iteratore.
Quando si crea un iteratore per una classe o uno struct, non è necessario implementare l'intera IEnumerator
interfaccia. Quando il compilatore rileva l'iteratore, genera automaticamente i metodi Current , MoveNext e
Dispose dell'interfaccia IEnumerator o IEnumerator<T>.
In ogni iterazione successiva del ciclo For Each…Next (o alla chiamata diretta a IEnumerator.MoveNext ), il corpo di
codice iteratore successivo riprende dopo la precedente istruzione Yield . Continua quindi con l'istruzione
successiva Yield fino a quando non viene raggiunta la fine del corpo dell'iteratore o fino a quando non
Exit Function Return viene rilevata un'istruzione o.
Gli iteratori non supportano il IEnumerator.Reset metodo. Per eseguire di nuovo l'iterazione dall'inizio, è
necessario ottenere un nuovo iteratore.
Per ulteriori informazioni, vedere la specifica del linguaggio Visual Basic.
Vedi anche
System.Collections.Generic
IEnumerable<T>
Istruzione For Each...Next
Istruzione Yield
Iterator
LINQ (Language-Integrated Query) (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
LINQ rappresenta un set di funzionalità che estende le potenti funzionalità di query alla sintassi del linguaggio
Visual Basic. In LINQ sono stati introdotti modelli standard e di facile uso per l'esecuzione delle query e
l'aggiornamento dei dati e la tecnologia può essere estesa in modo da supportare potenzialmente qualsiasi tipo
di archivio dati. .NET Framework include assembly del provider LINQ che consentono l'uso di LINQ con le
raccolte di .NET Framework, i database di SQL Server, i dataset ADO.NET e i documenti XML.
Visual Basic offre supporto completo per la programmazione orientata a oggetti, inclusi incapsulamento,
ereditarietà e polimorfismo.
L'incapsulamento indica che un gruppo di proprietà, metodi e altri membri correlati vengono considerati come
una singola unità o un singolo oggetto.
L'ereditarietà indica la capacità di creare nuove classi sulla base di una classe esistente.
Il polimorfismo indica la capacità di usare più classi in modo intercambiabile, anche se in ognuna di esse le
stesse proprietà o gli stessi metodi sono implementati in modi diversi.
In questa sezione vengono descritti i concetti seguenti:
Classi e oggetti
Membri di classe
Proprietà e campi
Metodi
Costruttori
Distruttori
Eventi
Classi annidate
Modificatori di accesso e livelli di accesso
Creazione di istanze di classi
Classi e membri condivisi
Tipi anonimi
Ereditarietà
Override di membri
Interfacce
Generics
Delegati
Classi e oggetti
I termini classe e oggetto vengono talvolta usati in modo intercambiabile. Di fatto, però, le classi descrivono il
tipo degli oggetti, mentre gli oggetti sono istanze utilizzabili delle classi. L'atto di creare un oggetto viene
pertanto chiamato creazione di istanze. Rifacendoci all'analogia precedente, la classe corrisponde al progetto
iniziale e l'oggetto all'edificio realizzato in base a tale progetto.
Per definire una classe:
Class SampleClass
End Class
Visual Basic fornisce anche una versione ridotta delle classi chiamate strutture utili quando è necessario creare
una matrice di grandi dimensioni di oggetti e non si desidera utilizzare una quantità eccessiva di memoria.
Per definire una struttura:
Structure SampleStructure
End Structure
Class SampleClass
Public SampleField As String
End Class
Le proprietà dispongono di routine Get e Set, che forniscono un maggiore controllo sul modo in cui i valori
vengono impostati o restituiti.
Visual Basic consente di creare un campo privato per archiviare il valore della proprietà o utilizzare le cosiddette
proprietà implementate automaticamente che creano questo campo automaticamente dietro le quinte e
forniscono la logica di base per le routine della proprietà.
Per definire una proprietà implementata automaticamente:
Class SampleClass
Public Property SampleProperty as String
End Class
Se è necessario eseguire alcune operazioni aggiuntive per la lettura e la scrittura del valore della proprietà,
definire un campo per archiviare il valore della proprietà e fornire la logica di base per archiviarlo e recuperarlo:
Class SampleClass
Private m_Sample As String
Public Property Sample() As String
Get
' Return the value stored in the field.
Return m_Sample
End Get
Set(ByVal Value As String)
' Store the value in the field.
m_Sample = Value
End Set
End Property
End Class
La maggior parte delle proprietà dispone di metodi o di routine per impostare e ottenere il valore della
proprietà. È possibile, tuttavia, creare proprietà di sola lettura o di sola scrittura per impedirne la modifica o la
lettura. In Visual Basic è possibile utilizzare le parole chiave ReadOnly e WriteOnly . Tuttavia, le proprietà
implementate automaticamente non possono essere di sola lettura o di sola scrittura.
Per altre informazioni, vedere:
Property Statement
Istruzione Get
Istruzione set
ReadOnly
WriteOnly
Metodi
Un metodo è un'azione che può essere eseguita da un oggetto.
NOTE
In Visual Basic, è possibile creare un metodo in due modi: se il metodo non restituisce un valore, viene utilizzata
l'istruzione Sub , se invece un metodo restituisce un valore, viene utilizzata l'istruzione Function .
Class SampleClass
Public Function SampleFunc(ByVal SampleParam As String)
' Add code here
End Function
End Class
Una classe può disporre di diverse implementazioni, o overload, dello stesso metodo che differiscono per il
numero di parametri o per i tipi di parametro.
Per essere in rapporto di overload con un metodo:
Nella maggior parte dei casi si dichiara un metodo all'interno di una definizione della classe. Tuttavia, Visual
Basic supporta anche metodi di estensione che consentono di aggiungere metodi a una classe esistente al di
fuori della definizione effettiva della classe.
Per altre informazioni, vedere:
Istruzione Function
Istruzione Sub
Overload
Metodi di estensione
Costruttori
I costruttori sono metodi di classe che vengono eseguiti automaticamente durante la creazione di un oggetto di
un tipo specifico. I costruttori in genere inizializzano i membri dati del nuovo oggetto. Un costruttore può essere
eseguito solo una volta alla creazione di una classe. Inoltre, il codice nel costruttore viene sempre eseguito prima
di qualsiasi altro codice in una classe. Tuttavia, è possibile creare più overload del costruttore esattamente come
per qualsiasi altro metodo.
Per definire un costruttore per una classe:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
Per ulteriori informazioni, vedere la pagina relativa alla durata degli oggetti: come creare ed eliminare
definitivamente oggetti.
Distruttori
I distruttori sono utilizzati per distruggere istanze di classi. In .NET Framework, il Garbage Collector gestisce
l'allocazione e il rilascio di memoria per gli oggetti gestiti di un'applicazione. Potrebbero, tuttavia, essere
necessari distruttori per pulire eventuali risorse non gestite create dall'applicazione. Può esistere un solo
distruttore per classe.
Per altre informazioni sui distruttori e sull'operazione di Garbage Collection in .NET Framework, vedere Garbage
Collection.
Eventi
Tramite gli eventi una classe o un oggetto sono in grado di segnalare ad altre classi o oggetti una situazione di
interesse. La classe che invia o genera l'evento è chiamata editore e le classi che ricevono o gestiscono l'evento
sono chiamate sottoscrittori. Per altre informazioni sugli eventi e sulla loro generazione e gestione, vedere
Eventi.
Per dichiarare gli eventi, utilizzare l' istruzione Event.
Per generare eventi, utilizzare l' istruzione RaiseEvent.
Per specificare i gestori eventi utilizzando una modalità dichiarativa, utilizzare l'istruzione WithEvents e la
clausola Handles .
Per essere in grado di aggiungere, rimuovere e modificare dinamicamente il gestore eventi associato a un
evento, utilizzare l' istruzione AddHandler e l' istruzione RemoveHandler insieme all' operatore
AddressOf.
Classi annidate
Una classe definita all'interno di un'altra classe è denominata annidata. Per impostazione predefinita, la classe
annidata è privata.
Class Container
Class Nested
' Add code here.
End Class
End Class
Per creare un'istanza della classe annidata, utilizzare il nome della classe dei contenitori seguita dal punto, quindi
dal nome della classe annidata:
Dopo avere creato un'istanza di una classe, è possibile assegnare i valori alle proprietà e ai campi dell'istanza e
richiamare i metodi della classe.
Per assegnare i valori alle proprietà durante il processo di creazione dell'istanza della classe, utilizzare gli
inizializzatori di oggetto:
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
Per accedere al membro condiviso, usare il nome della classe senza creare un oggetto di questa classe:
MsgBox(SampleClass.SampleString)
I moduli condivisi in Visual Basic hanno solo membri condivisi e non è possibile crearne un'istanza. Anche i
membri condivisi non possono accedere a proprietà, campi o metodi non condivisi
Per altre informazioni, vedere:
Condivisa
Istruzione Module
Tipi anonimi
I tipi anonimi consentono di creare oggetti senza scrivere una definizione della classe per il tipo di dati. La classe
viene generata direttamente dal compilatore. La classe non ha un nome utilizzabile e contiene le proprietà
specificate nella dichiarazione dell'oggetto.
Per creare un'istanza di un tipo anonimo:
Ereditarietà
L'ereditarietà permette di creare una nuova classe che riutilizza, estende e modifica il comportamento definito in
un'altra classe. La classe i cui membri vengono ereditati è denominata classe di base, mentre la classe che
eredita tali membri è denominata classe derivata. Tuttavia, tutte le classi in Visual Basic ereditano in modo
implicito dalla Object classe che supporta la gerarchia di classi .NET e fornisce servizi di basso livello a tutte le
classi.
NOTE
Visual Basic non supporta l'ereditarietà multipla. Vale a dire, è possibile specificare una sola classe base per una classe
derivata.
Class DerivedClass
Inherits BaseClass
End Class
Per impostazione predefinita, tutte le classi possono essere ereditate. Tuttavia, è possibile specificare se una
classe non deve essere utilizzata come classe base oppure creare una classe utilizzabile solo come classe base.
Per specificare che una classe non può essere utilizzata come classe base:
Per specificare che una classe può essere utilizzata solo come classe base e che non è possibile crearne
un'istanza:
MustInherit Class BaseClass
End Class
Interfacce
Le interfacce, come le classi, consentono di definire un insieme di proprietà, metodi ed eventi. A differenza delle
classi, però, le interfacce non forniscono l'implementazione. Esse sono infatti implementate dalle classi e definite
come entità distinte da queste. Un'interfaccia rappresenta un contratto, in quanto è necessario che una classe
che implementa un'interfaccia implementi ogni aspetto esattamente come è stato definito.
Per definire un'interfaccia:
Class SampleClass
Implements ISampleInterface
Sub DoSomething
' Method implementation.
End Sub
End Class
Per altre informazioni, vedere:
Interfacce
Istruzione Interface
Istruzione Implements
Generics
Classi, strutture, interfacce e metodi in .NET possono includere parametri di tipo che definiscono tipi di oggetti
che possono archiviare o usare. L'esempio più comune di generics è una raccolta, dove è possibile specificare il
tipo di oggetti da archiviare in una raccolta.
Per definire una classe generica:
Class SampleGeneric(Of T)
Public Field As T
End Class
Delegati
Un delegato è un tipo che definisce una firma di metodo e può offrire un riferimento a qualsiasi metodo con una
firma compatibile. Tramite il delegato è possibile invocare (o chiamare) il metodo. I delegati vengono utilizzati
per passare metodi come argomenti ad altri metodi.
NOTE
I gestori di evento non sono altro che metodi richiamati tramite delegati. Per altre informazioni sull'uso dei delegati nella
gestione degli eventi, vedere Eventi.
Per creare un riferimento a un metodo che corrisponde alla firma specificata dal delegato:
Class SampleClass
' Method that matches the SampleDelegate signature.
Sub SampleSub(ByVal str As String)
' Add code here.
End Sub
' Method that instantiates the delegate.
Sub SampleDelegateSub()
Dim sd As SampleDelegate = AddressOf SampleSub
sd("Sample string")
End Sub
End Class
Vedi anche
Guida per programmatori Visual Basic
Reflection (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
La reflection specifica oggetti di tipo Type che descrivono assembly, moduli e tipi. È possibile usare la reflection
per creare in modo dinamico un'istanza di un tipo, associare il tipo a un oggetto esistente oppure ottenere il tipo
da un oggetto esistente e richiamarne i metodi o accedere ai relativi campi e proprietà. Se si usano attributi nel
codice, la reflection consente di accedervi. Per altre informazioni, vedere Attributi.
Di seguito è riportato un esempio semplice di reflection che usa il metodo statico GetType ereditato da tutti i
tipi dalla classe di base Object per ottenere il tipo di una variabile:
L'output è il seguente:
System.Int32
L'esempio seguente usa la reflection per ottenere il nome completo dell'assembly caricato.
L'output è il seguente:
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Sezioni correlate
Per altre informazioni:
Reflection
Visualizzazione delle informazioni sul tipo
Reflection e tipi generici
System.Reflection.Emit
Recupero di informazioni memorizzate negli attributi
Vedi anche
Guida per programmatori Visual Basic
Assembly in .NET
Serializzazione (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Il termine serializzazione indica il processo di conversione di un oggetto in un flusso di byte allo scopo di
archiviare tale oggetto o trasmetterlo alla memoria, a un database o a un file. Il fine principale della
serializzazione è salvare lo stato di un oggetto per consentirne la ricreazione in caso di necessità. Il processo
inverso è denominato deserializzazione.
L'oggetto viene serializzato in un flusso che contiene non solo i dati, ma anche informazioni sul tipo di oggetto,
ad esempio la versione, le impostazioni cultura e il nome dell'assembly. Da questo flusso è possibile archiviare
l'oggetto in un database, in un file oppure nella memoria.
Usi della serializzazione
La serializzazione consente allo sviluppatore di salvare lo stato di un oggetto per ricrearlo quando necessario,
consentendo sia l'archiviazione di oggetti sia lo scambio di dati. Grazie alla serializzazione, uno sviluppatore può
eseguire azioni quali l'invio dell'oggetto a un'applicazione remota tramite un servizio Web, il passaggio di un
oggetto da un dominio a un altro, il passaggio di un oggetto attraverso un firewall come stringa XML o la
gestione su diverse applicazioni di informazioni sulla sicurezza o specifiche dell'utente.
Rendere un oggetto serializzabile
Per serializzare un oggetto, sono necessari l'oggetto da serializzare, un flusso che contenga l'oggetto serializzato
e un Formatter. System.Runtime.Serialization contiene classi necessarie per la serializzazione e la
deserializzazione di oggetti.
Applicare l'attributo SerializableAttribute a un tipo per indicare che le istanze di tale tipo possono essere
serializzate. Viene generata un'eccezione SerializationException se si tenta di serializzare ma il tipo non ha
l'attributo SerializableAttribute.
Se si vuole evitare che un campo della classe venga serializzato, applicare l'attributo NonSerializedAttribute. Se
un campo di un tipo serializzabile contiene un puntatore, un handle o un'altra struttura di dati specifica di un
particolare ambiente e tale campo non può essere ricostituito in modo corretto in un ambiente diverso, è
necessario renderlo non serializzabile.
Se una classe serializzata contiene riferimenti a oggetti di altre classi contrassegnate con SerializableAttribute,
verranno serializzati anche tali oggetti.
In questa sezione viene presentata la tipica struttura del programma Visual Basic, viene fornito un semplice
programma di Visual Basic, "Hello, World" e vengono illustrate le convenzioni del codice Visual Basic. Le
convenzioni del codice sono suggerimenti che non si concentrano sulla logica di un programma, ma sulla
struttura fisica e sull'aspetto. Il codice che segue semplifica la lettura, la comprensione e la gestione del codice.
Le convenzioni del codice possono includere, tra le altre:
Formati standardizzati per l'assegnazione di etichette e l'inserimento di commenti nel codice.
Linee guida per la spaziatura, la formattazione e il rientro del codice.
Convenzioni di denominazione per oggetti, variabili e procedure.
Negli argomenti seguenti viene presentata una serie di linee guida di programmazione per Visual Basic
programmi, oltre ad esempi di utilizzo corretto.
Sezioni correlate
Convenzioni tipografiche e di scrittura del codice
Fornisce le convenzioni di codifica standard per Visual Basic.
Scrittura di codice
Descrive le funzionalità che semplificano la scrittura e la gestione del codice.
Struttura di un programma Visual Basic
05/03/2021 • 7 minutes to read • Edit Online
Un programma Visual Basic è costituito da blocchi predefiniti standard. Una soluzione è costituita da uno o più
progetti. Un progetto può a sua volta contenere uno o più assembly. Ogni assembly viene compilato da uno o
più file di origine. Un file di origine fornisce la definizione e l'implementazione di classi, strutture, moduli e
interfacce, che in definitiva contengono tutto il codice.
Per ulteriori informazioni su questi blocchi predefiniti di un programma Visual Basic, vedere soluzioni e progetti
e assembly in .NET.
Gli elementi dati a livello di procedura sono limitati a variabili e costanti locali.
Procedura principale
La Main procedura è il primo codice da eseguire quando l'applicazione è stata caricata. Main funge da punto di
partenza e controllo generale per l'applicazione. Sono disponibili quattro tipi di Main :
Sub Main()
La varietà più comune di questa procedura è Sub Main() . Per ulteriori informazioni, vedere la procedura
principale in Visual Basic.
Vedi anche
Routine Main in Visual Basic
Convenzioni di denominazione di Visual Basic
Limitazioni di Visual Basic
Routine Main in Visual Basic
05/03/2021 • 5 minutes to read • Edit Online
Ogni applicazione Visual Basic deve contenere una procedura denominata Main . Questa procedura funge da
punto di partenza e controllo generale per l'applicazione. Il .NET Framework chiama la Main procedura quando
ha caricato l'applicazione ed è pronta per passare il controllo. A meno che non si stia creando una Windows
Forms Application, è necessario scrivere la Main procedura per le applicazioni che vengono eseguite
autonomamente.
Main contiene il codice che viene eseguito per primo. In Main è possibile determinare il modulo da caricare per
primo all'avvio del programma, verificare se una copia dell'applicazione è già in esecuzione nel sistema, stabilire
un set di variabili per l'applicazione o aprire un database necessario per l'applicazione.
NOTE
Se si dichiara Main in una classe, è necessario usare la Shared parola chiave. In un modulo Main non è necessario che
sia Shared .
Il modo più semplice consiste nel dichiarare una Sub routine che non accetta argomenti o restituisce un
valore.
Module mainModule
Sub Main()
MsgBox("The Main procedure is starting the application.")
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating.")
End Sub
End Module
Main può inoltre restituire un Integer valore, che viene utilizzato dal sistema operativo come codice di
uscita per il programma. Altri programmi possono testare questo codice esaminando il valore
ERRORLEVEL di Windows. Per restituire un codice di uscita, è necessario dichiarare Main come Function
routine anziché come Sub routine.
Module mainModule
Function Main() As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " &
CStr(returnValue) & ".")
Return returnValue
End Function
End Module
Main può inoltre assumere una String matrice come argomento. Ogni stringa della matrice contiene
uno degli argomenti della riga di comando usati per richiamare il programma. È possibile eseguire azioni
diverse a seconda dei rispettivi valori.
Module mainModule
Function Main(ByVal cmdArgs() As String) As Integer
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If cmdArgs.Length > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next
End If
' Insert call to appropriate starting place in your code.
' On return, assign appropriate value to returnValue.
' 0 usually means successful completion.
MsgBox("The application is terminating with error level " &
CStr(returnValue) & ".")
Return returnValue
End Function
End Module
È possibile dichiarare Main per esaminare gli argomenti della riga di comando, ma non per restituire un
codice di uscita, come indicato di seguito.
Module mainModule
Sub Main(ByVal cmdArgs() As String)
MsgBox("The Main procedure is starting the application.")
Dim returnValue As Integer = 0
' See if there are any arguments.
If cmdArgs.Length > 0 Then
For argNum As Integer = 0 To UBound(cmdArgs, 1)
' Insert code to examine cmdArgs(argNum) and take
' appropriate action based on its value.
Next
End If
' Insert call to appropriate starting place in your code.
MsgBox("The application is terminating.")
End Sub
End Module
Vedi anche
MsgBox
Length
UBound
Struttura di un programma Visual Basic
-principale
Condivisa
Istruzione Sub
Istruzione Function
Tipo di dati Integer
Tipo di dati String
Riferimenti e istruzione Imports (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
È possibile rendere disponibili oggetti esterni per il progetto scegliendo il comando Aggiungi riferimento dal
menu progetto . I riferimenti in Visual Basic possono puntare ad assembly, che sono simili alle librerie dei tipi
ma contengono ulteriori informazioni.
Istruzione Imports
Gli assembly includono uno o più spazi dei nomi. Quando si aggiunge un riferimento a un assembly, è anche
possibile aggiungere un' Imports istruzione a un modulo che controlla la visibilità degli spazi dei nomi
dell'assembly all'interno del modulo. L' Imports istruzione fornisce un contesto di ambito che consente di
utilizzare solo la parte dello spazio dei nomi necessaria per fornire un riferimento univoco.
L' Imports istruzione ha la sintassi seguente:
Imports [Aliasname =] Namespace
Aliasname fa riferimento a un nome breve che è possibile utilizzare all'interno del codice per fare riferimento a
uno spazio dei nomi importato. Namespace è uno spazio dei nomi disponibile tramite un riferimento al progetto,
tramite una definizione all'interno del progetto o tramite un' Imports istruzione precedente.
Un modulo può contenere un numero qualsiasi di Imports istruzioni. Devono essere visualizzate dopo qualsiasi
Option istruzione, se presente, ma prima di qualsiasi altro codice.
NOTE
Non confondere i riferimenti del progetto con l' Imports istruzione o l' Declare istruzione. I riferimenti al progetto
rendono disponibili oggetti esterni, ad esempio oggetti negli assembly, per Visual Basic progetti. L' Imports istruzione
viene utilizzata per semplificare l'accesso ai riferimenti del progetto, ma non fornisce l'accesso a tali oggetti. L' Declare
istruzione viene utilizzata per dichiarare un riferimento a una procedura esterna in una libreria di collegamento dinamico
(dll).
Imports le istruzioni devono essere sempre le prime righe immediatamente successive Option a qualsiasi
istruzione in un modulo. Il frammento di codice seguente illustra come importare e assegnare un alias al
Microsoft.VisualBasic.ControlChars modulo:
Imports CtrlChrs = Microsoft.VisualBasic.ControlChars
I riferimenti futuri a questo spazio dei nomi possono essere notevolmente più brevi:
Se un' Imports istruzione non include un nome di alias, è possibile usare gli elementi definiti nello spazio dei
nomi importato nel modulo senza qualifica. Se il nome dell'alias è specificato, deve essere usato come
qualificatore per i nomi contenuti in tale spazio dei nomi.
Vedi anche
ControlChars
Microsoft.VisualBasic
Spazi dei nomi in Visual Basic
Assembly in .NET
Istruzione Imports (tipo e spazio dei nomi .NET)
Spazi dei nomi in Visual Basic
05/03/2021 • 11 minutes to read • Edit Online
Gli spazi dei nomi organizzano gli oggetti definiti in un assembly. Gli assembly possono contenere più spazi dei
nomi, che a loro volta possono contenere altri spazi dei nomi. Gli spazi dei nomi consentono di evitare problemi
di ambiguità e di semplificare i riferimenti quando si usano gruppi di oggetti di grandi dimensioni, ad esempio
librerie di classi.
Ad esempio, il .NET Framework definisce la ListBox classe nello System.Windows.Forms spazio dei nomi. Il
frammento di codice seguente illustra come dichiarare una variabile usando il nome completo per questa classe:
Nella figura seguente sono illustrate due gerarchie dello spazio dei nomi, entrambe contenenti un oggetto
denominato ListBox :
Per impostazione predefinita, ogni file eseguibile creato con Visual Basic contiene uno spazio dei nomi con lo
stesso nome del progetto. Se, ad esempio, si definisce un oggetto all'interno di un progetto denominato
ListBoxProject , il file eseguibile ListBoxProject.exe conterrà uno spazio dei nomi chiamato ListBoxProject .
Più assembly possono usare lo stesso spazio dei nomi. Visual Basic li considera come un singolo set di nomi. È
ad esempio possibile definire classi per uno spazio dei nomi chiamato SomeNameSpace in un assembly
denominato Assemb1 e altre classi per lo stesso spazio dei nomi da un assembly denominato Assemb2 .
nomi completi
I nomi completi sono riferimenti a oggetti preceduti dal nome dello spazio dei nomi in cui è definito l'oggetto. È
possibile usare gli oggetti definiti in altri progetti se si crea un riferimento alla classe (scegliendo Aggiungi
riferimento dal menu Progetto ) e quindi usare il nome completo per l'oggetto nel codice. Il frammento di
codice seguente mostra come usare il nome completo per un oggetto dallo spazio dei nomi di un altro progetto:
Se si usa l'istruzione Imports senza un alias, è possibile usare tutti i nomi dello spazio dei nomi senza
qualificazione, a condizione che siano univoci per il progetto. Se il progetto contiene istruzioni Imports per gli
spazi dei nomi che contengono elementi con lo stesso nome, quando si usa il nome è necessario definirlo in
modo completo. Si supponga, ad esempio, che il progetto contenga le due istruzioni Imports seguenti:
Se si tenta di utilizzare Class1 senza la qualifica completa, Visual Basic genera un errore che informa che il
nome Class1 è ambiguo.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As Global.System.Int32
Dim n As Global.System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
Usando Global è possibile accedere ad altri spazi dei nomi a livello di radice, ad esempio Microsoft.VisualBasic,
e a qualsiasi spazio dei nomi associato al progetto.
Negli esempi seguenti viene usata la parola chiave Global per dichiarare uno spazio dei nomi all'esterno dello
spazio dei nomi radice per il progetto.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
In una dichiarazione dello spazio dei nomi la parola chiave Global non può essere annidata in un altro spazio
dei nomi.
È possibile usare Application Page, Project Designer (Visual Basic) per visualizzare e modificare lo spazio dei
nomi radice del progetto. Per i nuovi progetti, come spazio dei nomi radice predefinito viene usato il nome
del progetto. Per impostare Global come spazio dei nomi di primo livello, è possibile cancellare la voce Spazio
dei nomi radice in modo da lasciare vuota la casella. La cancellazione della voce Spazio dei nomi radice
elimina la necessità di usare la parola chiave Global nelle dichiarazioni degli spazi dei nomi.
Se un'istruzione Namespace dichiara un nome che è anche uno spazio dei nomi in .NET Framework e la parola
chiave Global non viene usata in un nome completo, lo spazio dei nomi di .NET Framework non sarà più
disponibile. Per abilitare l'accesso allo spazio dei nomi di .NET Framework senza usare la parola chiave Global ,
è possibile includere Global nell'istruzione Namespace .
L'esempio seguente mostra la dichiarazione dello spazio dei nomi Global con la parola chiave System.Text .
Se Global non è presente nella dichiarazione dello spazio dei nomi, StringBuilder non è accessibile, a meno che
non si specifichi Global.System.Text.StringBuilder . Per un progetto denominato ConsoleApplication1 , i
riferimenti a System.Text accedono a ConsoleApplication1.System.Text se non viene usata la parola chiave
Global .
Module Module1
Sub Main()
Dim encoding As New System.Text.TitanEncoding
Namespace Global.System.Text
Class TitanEncoding
End Class
End Namespace
Vedi anche
ListBox
System.Windows.Forms
Assembly in .NET
Riferimenti e istruzione Imports
Istruzione Imports (tipo e spazio dei nomi .NET)
Scrittura di codice nelle soluzioni Office
Convenzioni di denominazione di Visual Basic
05/03/2021 • 3 minutes to read • Edit Online
Quando si rinomina un elemento nell'applicazione Visual Basic, il primo carattere del nome deve essere un
carattere alfabetico o un carattere di sottolineatura. Si noti, tuttavia, che i nomi che iniziano con un carattere di
sottolineatura non sono conformi a CLS ( Language Independence and Language-Independent Components ).
I suggerimenti seguenti si applicano alla denominazione.
Iniziare ogni parola separata in un nome con una lettera maiuscola, come in FindLastRecord e
RedrawMyForm .
Iniziare i nomi di interfaccia con il prefisso "I", seguito da un sostantivo o da una frase nominale,
IComponent ad esempio, o con un aggettivo che descrive il comportamento dell'interfaccia, ad esempio
IPersistable . Non usare il carattere di sottolineatura e usare le abbreviazioni sporadicamente, perché le
abbreviazioni possono causare confusione.
Iniziare i nomi dei gestori eventi con un sostantivo che descrive il tipo di evento seguito dal EventHandler
suffisso "", come in " MouseEventHandler ".
Nei nomi delle classi di argomenti dell'evento includere il EventArgs suffisso "".
Se un evento ha un concetto di "before" o "After", usare un suffisso presente o passato, come in "
ControlAdd " o " ControlAdded ".
Per i termini usati lungo o di frequente, usare le abbreviazioni per tenere ragionevoli le lunghezze dei
nomi, ad esempio, "HTML" invece di "Hypertext Markup Language". In generale, i nomi delle variabili
maggiori di 32 caratteri sono difficili da leggere in un monitor impostato su una risoluzione bassa.
Inoltre, assicurarsi che le abbreviazioni siano coerenti nell'intera applicazione. Il cambio casuale di un
progetto tra "HTML" e "Hypertext Markup Language" può causare confusione.
Evitare di usare nomi in un ambito interno identici a quelli in un ambito esterno. Se si accede a una
variabile errata, possono verificarsi errori. Se si verifica un conflitto tra una variabile e la parola chiave
con lo stesso nome, è necessario identificare la parola chiave facendola precedere dalla libreria dei tipi
appropriata. Se, ad esempio, è presente una variabile denominata Date , è possibile usare la Date
funzione intrinseca solo chiamando DateTime.Date .
Vedi anche
Parole chiave come nomi di elementi nel codice
Me, My, MyBase e MyClass
Declared Element Names
Struttura del programma e convenzioni del codice
Riferimenti al linguaggio Visual Basic
Convenzioni di codifica di Visual Basic
05/03/2021 • 10 minutes to read • Edit Online
Microsoft sviluppa esempi e documentazione che seguono le linee guida in questo argomento. Se si seguono le
stesse convenzioni di codifica, è possibile ottenere i vantaggi seguenti:
Il codice avrà un aspetto coerente, in modo che i lettori possano concentrarsi meglio sul contenuto, non
sul layout.
I reader comprendono il codice più rapidamente, perché possono creare presupposti in base
all'esperienza precedente.
È possibile copiare, modificare e gestire il codice più facilmente.
È possibile assicurarsi che il codice consenta di illustrare "procedure consigliate" per Visual Basic.
Convenzioni di denominazione
Per informazioni sulle linee guida per la denominazione, vedere l'argomento linee guida per la
denominazione.
Non usare "My" o "My" come parte del nome di una variabile. Questa procedura consente di creare
confusione con gli My oggetti.
Non è necessario modificare i nomi degli oggetti nel codice generato automaticamente per adattarli alle
linee guida.
Convenzioni di layout
Inserire le schede come spazi e utilizzare i rientri intelligenti con rientri di quattro spazi.
Usare un elenco semplice (riformattazione) del codice per riformattare il codice nell'editor di
codice. Per ulteriori informazioni, vedere Opzioni, editor di testo, di base (Visual Basic).
Usare una sola istruzione per riga. Non usare il carattere separatore di riga Visual Basic (:).
Evitare di usare il carattere di continuazione di riga esplicito "" a favore della continuazione di riga
implicita laddove il linguaggio lo consente.
Usare una sola dichiarazione per riga.
Se l' elenco (riformattazione) del codice non formatta automaticamente le righe di continuazione,
rientrare manualmente le righe di continuazione una tabulazione. Tuttavia, allinea sempre gli elementi in
un elenco.
a As Integer,
b As Integer
Sub Main()
For Each argument As String In My.Application.CommandLineArgs
' Add code here to use the string variable.
Next
End Sub
MsgBox($"hello{vbCrLf}goodbye")
Inserire l'indicatore di matrice sul tipo, non sulla variabile. Usare, ad esempio, la sintassi seguente:
Utilizzare la sintassi {} quando si dichiarano e inizializzano matrici di tipi di dati di base. Usare, ad
esempio, la sintassi seguente:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Usa il try... Intercettare e utilizzare le istruzioni quando si utilizza la gestione delle eccezioni
Non usare On Error Goto .
Usare la parola chiave non
Usare la IsNot parola chiave invece di Not...Is Nothing .
Nuova parola chiave
Usare la creazione di un'istanza breve. Usare, ad esempio, la sintassi seguente:
Usare gli inizializzatori di oggetto per i nuovi oggetti anziché il costruttore senza parametri:
Dim orderLog As New EventLog With {
.Log = "Application",
.Source = "Application Name",
.MachineName = "Computer Name"}
Gestione di eventi
Usare Handles anziché AddHandler :
Non verificare se un evento è Nothing (null) prima di chiamare il RaiseEvent metodo. RaiseEvent
Verifica Nothing prima che venga generato l'evento.
Uso di membri condivisi
Chiamare Shared i membri usando il nome della classe, non da una variabile di istanza.
Usare valori letterali XML
I valori letterali XML semplificano le attività più comuni che si verificano quando si lavora con XML (ad esempio,
caricamento, query e trasformazione). Quando si sviluppa con XML, attenersi alle seguenti linee guida:
Usare valori letterali XML per creare documenti e frammenti XML anziché chiamare direttamente le API
XML.
Importare gli spazi dei nomi XML a livello di file o di progetto per sfruttare le ottimizzazioni delle
prestazioni per i valori letterali XML.
Utilizzare le proprietà dell'asse XML per accedere a elementi e attributi in un documento XML.
Usare espressioni incorporate per includere valori e per creare codice XML da valori esistenti anziché
usare chiamate API, ad esempio il Add Metodo:
Private Function GetHtmlDocument(
ByVal items As IEnumerable(Of XElement)) As String
Return htmlDoc.ToString()
End Function
Query LINQ
Usare nomi significativi per le variabili di query:
Fornire nomi per gli elementi in una query per assicurarsi che i nomi delle proprietà dei tipi anonimi
siano correttamente in maiuscolo con la combinazione di maiuscole e minuscole Pascal:
Rinominare le proprietà quando i nomi delle proprietà nel risultato potrebbero risultare ambigui. Se, ad
esempio, la query restituisce un nome cliente e un ID ordine, rinominarli anziché lasciarli come Name e
ID nel risultato:
Usare l'inferenza del tipo nella dichiarazione di variabili di query e variabili di intervallo:
Utilizzare la Join clausola per definire in modo esplicito un'operazione di join anziché utilizzare la
Where clausola per definire in modo implicito un'operazione di join:
Vedi anche
Linee guida per la generazione di codice sicuro
Compilazione condizionale in Visual Basic
05/03/2021 • 5 minutes to read • Edit Online
Nella compilazione condizionale, determinati blocchi di codice in un programma vengono compilati in modo
selettivo mentre altri vengono ignorati.
È ad esempio possibile scrivere istruzioni di debug che confrontano la velocità di approcci diversi alla stessa
attività di programmazione oppure è possibile localizzare un'applicazione per più linguaggi. Le istruzioni di
compilazione condizionale sono progettate per essere eseguite in fase di compilazione, non in fase di
esecuzione.
È possibile indicare blocchi di codice da compilare in modo condizionale con la #If...Then...#Else direttiva. Ad
esempio, per creare versioni in francese e in lingua tedesca della stessa applicazione dallo stesso codice
sorgente, è possibile incorporare segmenti di codice specifici della piattaforma nelle #If...Then istruzioni
usando le costanti predefinite FrenchVersion e GermanVersion . Nell'esempio seguente viene illustrato come:
NOTE
Il completamento automatico non funzionerà quando si modifica il codice e si usano le direttive di compilazione
condizionale se il codice non fa parte del ramo corrente.
-Prima di creare il file eseguibile, impostare costanti in Progettazione progetti attenendosi alla procedura descritta in
gestione delle proprietà del progetto e della soluzione.
-Usare l'opzione -d per immettere le costanti di compilazione condizionale, come nell'esempio seguente:
vbc MyProj.vb /d:conFrenchVersion=–1:conANSI=0
Non è necessario alcuno spazio tra l'opzione -d e la prima costante. Per ulteriori informazioni, vedere -define (Visual Basic).
Le dichiarazioni della riga di comando eseguono l'override delle dichiarazioni immesse in Progettazione progetti, ma non le
cancellano. Gli argomenti impostati in Progettazione progetti rimangono attivi per le compilazioni successive.
Quando si scrivono costanti nel codice, non sono presenti regole rigide per la loro posizione, poiché il relativo ambito è l'intero
modulo in cui sono dichiarati.
: Inserire le costanti nel blocco di dichiarazione del modulo in cui vengono usate. Ciò consente di organizzare e semplificare la
lettura del codice.
Argomenti correlati
T ITO LO DESC RIZ IO N E
Struttura del programma e convenzioni del codice Fornisce suggerimenti per semplificare la lettura e la gestione
del codice.
Riferimento
#Const (direttiva)
#If... Direttive then... #Else
-define (Visual Basic)
Procedura: Interrompere e combinare istruzioni nel
codice (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Quando si scrive il codice, è possibile creare a volte istruzioni lunghe che richiedono lo scorrimento orizzontale
nell'editor di codice. Sebbene questa operazione non influisca sul modo in cui viene eseguito il codice, è difficile
per l'utente o per chiunque legga il codice visualizzato sul monitor. In questi casi, è consigliabile suddividere la
singola istruzione Long in più righe.
NOTE
In alcuni casi, se si omette il carattere di continuazione di riga, il Visual Basic compilatore continuerà in modo implicito
l'istruzione alla riga di codice successiva. Per un elenco degli elementi della sintassi per i quali è possibile omettere il
carattere di continuazione di riga, vedere "continuazione di riga implicita" nelle istruzioni.
Nell'esempio seguente l'istruzione è suddivisa in quattro righe con caratteri di continuazione di riga che
terminano tutti tranne l'ultima riga.
cmd.CommandText = _
"SELECT * FROM Titles JOIN Publishers " _
& "ON Publishers.PubId = Titles.PubID " _
& "WHERE Publishers.State = 'CA'"
L'uso di questa sequenza rende il codice più facile da leggere, sia online che quando viene stampato.
Il carattere di continuazione di riga deve essere l'ultimo carattere su una riga. Non è possibile seguire altre
operazioni sulla stessa riga.
Esistono alcune limitazioni per la posizione in cui è possibile utilizzare il carattere di continuazione di riga; ad
esempio, non è possibile usarlo nel mezzo di un nome di argomento. È possibile suddividere un elenco di
argomenti con il carattere di continuazione di riga, ma i singoli nomi degli argomenti devono rimanere intatti.
Non è possibile continuare un commento usando un carattere di continuazione di riga. Il compilatore non
esamina i caratteri in un commento per un significato speciale. Per un commento su più righe, ripetere il
simbolo di commento ( ' ) in ogni riga.
Sebbene ogni istruzione venga posizionata in una riga distinta è il metodo consigliato, Visual Basic consente
anche di inserire più istruzioni nella stessa riga.
Vedi anche
Struttura del programma e convenzioni del codice
Istruzioni
Procedura: comprimere e nascondere sezioni di
codice (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
La #Region direttiva consente di comprimere e nascondere sezioni di codice in file di Visual Basic. La #Region
direttiva consente di specificare un blocco di codice che è possibile espandere o comprimere quando si usa
l'editor di codice di Visual Studio. La possibilità di nascondere il codice rende i file più gestibili e più facili da
leggere. Per altre informazioni, vedere Struttura.
#Region le direttive supportano la semantica del blocco di codice, ad esempio #If...#End If . Ciò significa che
non possono iniziare in un blocco e terminare con un altro; l'inizio e la fine devono trovarsi nello stesso blocco.
#Region le direttive non sono supportate all'interno di funzioni.
Il #Region blocco può essere utilizzato più volte in un file di codice; pertanto, gli utenti possono definire blocchi
di routine e classi che possono, a loro volta, essere compressi. #Region i blocchi possono anche essere annidati
all'interno di altri #Region blocchi.
NOTE
Il codice nascosto non ne impedisce la compilazione e non influisce sulle #If...#End If istruzioni.
Vedi anche
Compilazione condizionale
#Region (direttiva)
#If... Direttive then... #Else
struttura
Procedura: etichettare le istruzioni (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
I blocchi di istruzioni sono costituiti da righe di codice delimitate da due punti. Le righe di codice precedute da
una stringa di identificazione o un numero intero sono denominate etichettate. Le etichette di istruzione
vengono utilizzate per contrassegnare una riga di codice per identificarla per l'utilizzo con istruzioni quali
On Error Goto .
Le etichette possono essere identificatori Visual Basic validi, ad esempio quelli che identificano gli elementi di
programmazione, o valori letterali integer. Un'etichetta deve essere visualizzata all'inizio di una riga di codice
sorgente e deve essere seguita da due punti, indipendentemente dal fatto che sia seguita da un'istruzione nella
stessa riga.
Il compilatore identifica le etichette controllando se l'inizio della riga corrisponde a qualsiasi identificatore già
definito. In caso contrario, il compilatore presuppone che si tratta di un'etichetta.
Le etichette hanno uno spazio di dichiarazione e non interferiscono con altri identificatori. L'ambito di
un'etichetta è il corpo del metodo. La dichiarazione di etichetta ha la precedenza in qualsiasi situazione ambigua.
NOTE
Le etichette possono essere utilizzate solo su istruzioni eseguibili all'interno di metodi.
Vedi anche
Istruzioni
Declared Element Names
Struttura del programma e convenzioni del codice
Caratteri speciali nel codice (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
In alcuni casi è necessario usare caratteri speciali nel codice, ovvero caratteri non alfabetici o numerici. La
punteggiatura e i caratteri speciali del set di caratteri Visual Basic hanno diversi usi, dall'organizzazione del testo
del programma alla definizione delle attività eseguite dal compilatore o dal programma compilato. Questi
caratteri non specificano l'esecuzione di un'operazione.
Parentesi
Usare le parentesi quando si definisce una routine, ad esempio Sub o Function . È necessario racchiudere tra
parentesi tutti gli elenchi di argomenti di routine. È inoltre possibile utilizzare le parentesi per inserire variabili o
argomenti in gruppi logici, in particolare per eseguire l'override dell'ordine predefinito di precedenza degli
operatori in un'espressione complessa. Questa condizione è illustrata nell'esempio seguente.
Dim a, b, c, d, e As Double
a = 3.2
b = 7.6
c = 2
d = b + c / a
e = (b + c) / a
Dopo l'esecuzione del codice precedente, il valore di d è 8,225 e il valore di e è 3. Il calcolo per d utilizza la
precedenza predefinita di / over + ed è equivalente a d = b + (c / a) . Le parentesi nel calcolo per
eseguono l' e override della precedenza predefinita.
Separatori
I separatori eseguono le operazioni che il nome suggerisce: separano sezioni di codice. In Visual Basic il carattere
separatore è costituito dai due punti ( : ). Usare i separatori quando si desidera includere più istruzioni su una
sola riga anziché su righe separate. Questo consente di risparmiare spazio e di migliorare la leggibilità del
codice. Nell'esempio seguente vengono illustrate tre istruzioni separate da due punti.
a = 3.2 : b = 7.6 : c = 2
Per altre informazioni, vedere procedura: interrompere e combinare istruzioni nel codice.
Il carattere due punti ( : ) viene utilizzato anche per identificare un'etichetta di istruzione. Per altre
informazioni, vedere How to: Label statements.
Concatenazione
Utilizzare l' & operatore per la concatenazione o collegare le stringhe. Non confonderla con l' + operatore, che
somma i valori numerici. Se si utilizza l' + operatore per concatenare quando si opera su valori numerici, è
possibile ottenere risultati non corretti. L'esempio seguente illustra questa operazione.
var1 = "10.01"
var2 = 11
resultA = var1 + var2
resultB = var1 & var2
Dopo l'esecuzione del codice precedente, il valore di resultA è 21,01 e il valore di resultB è "10,0111".
Le tre righe di output di MsgBox tutti visualizzano il valore 32856 . La prima riga usa l'accesso tradizionale alla
proprietà index , il secondo usa il fatto che index è la proprietà predefinita della classe hasDefault e la terza
usa l'accesso tramite dizionario alla classe.
Si noti che il secondo operando dell' ! operatore deve essere un identificatore di Visual Basic valido non
racchiuso tra virgolette doppie ( " " ). In altre parole, non è possibile usare un valore letterale stringa o una
variabile di stringa. La seguente modifica all'ultima riga della MsgBox chiamata genera un errore perché "X" è
un valore letterale stringa racchiuso.
"Dictionary access returns " & hD!"X")
NOTE
I riferimenti alle raccolte predefinite devono essere espliciti. In particolare, non è possibile usare l' ! operatore su una
variabile ad associazione tardiva.
Vedi anche
Struttura del programma e convenzioni del codice
Caratteri tipo
Commenti nel codice (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Negli esempi di codice viene spesso utilizzato il simbolo di commento ( ' ). Questo simbolo indica al
compilatore Visual Basic di ignorare il testo che lo segue o il Commento. I commenti sono brevi annotazioni
descrittive che vengono aggiunte al codice per agevolarne la lettura.
È buona norma di programmazione iniziare tutte le routine con un breve commento che ne descriva le
caratteristiche funzionali, ovvero le operazioni che vengono compiute. Ciò può rivelarsi a proprio vantaggio e di
chi esaminerà il codice. È opportuno separare le informazioni dettagliate relative alle modalità di
implementazione dai commenti che descrivono le caratteristiche funzionali. Quando si includono informazioni
dettagliate sulle modalità di implementazione, è importante che queste vengano aggiornate contestualmente
all'aggiornamento della funzione.
I commenti possono seguire un'istruzione sulla stessa riga oppure occupare una riga intera. Nell'esempio di
codice seguente vengono illustrate entrambe le opzioni.
Se il commento richiede più di una riga, utilizzare il simbolo di commento su ogni riga, così come viene
illustrato nell'esempio seguente:
NOTE
Per aggiungere commenti al codice è possibile anche inserire la parola chiave REM prima del testo. Tuttavia, i ' pulsanti
simbolo e Rimuovi / Commento sono più semplici da utilizzare e richiedono meno spazio e memoria.
Vedi anche
Istinti di base-documentazione del codice con commenti XML
Procedura: Creare documentazione XML
Tag di commento XML
Struttura del programma e convenzioni del codice
Istruzione REM
Parole chiave come nomi di elementi nel codice
(Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Qualsiasi elemento del programma, ad esempio una variabile, una classe o un membro, può avere lo stesso
nome di una parola chiave con restrizioni. Ad esempio, è possibile creare una variabile denominata Loop .
Tuttavia, per fare riferimento alla relativa versione, che ha lo stesso nome della parola chiave Restricted, Loop è
necessario precederla con una stringa di qualificazione completa o racchiuderla tra parentesi quadre ( [ ] ),
come illustrato nell'esempio seguente.
' The following statement precedes Loop with a full qualification string.
sampleForm.Loop.Visible = True
' The following statement encloses Loop in square brackets.
[Loop].Visible = True
Se non si esegue una di queste operazioni, Visual Basic presuppone l'uso della Loop parola chiave intrinseca e
genera un errore, come nell'esempio seguente:
' The following statement causes a compiler error.
Loop.Visible = True
È possibile utilizzare le parentesi quadre per fare riferimento a form e controlli e quando si dichiara una variabile
o si definisce una routine con lo stesso nome di una parola chiave con restrizioni. Può essere facile dimenticare
di qualificare i nomi o includere le parentesi quadre e quindi introdurre errori nel codice e renderlo più difficile
da leggere. Per questo motivo, è consigliabile non usare parole chiave con restrizioni come nomi degli elementi
del programma. Tuttavia, se una versione futura di Visual Basic definisce una parola chiave nuova che è in
conflitto con un modulo o un nome di controllo esistente, è possibile utilizzare questa tecnica quando si
aggiorna il codice per utilizzare la nuova versione.
NOTE
Il programma può inoltre includere i nomi degli elementi forniti da altri assembly a cui si fa riferimento. Se questi nomi
sono in conflitto con parole chiave con restrizioni, l'inserimento di parentesi quadre attorno ad essi causa la Visual Basic di
interpretarli come elementi definiti.
Vedi anche
Convenzioni di denominazione di Visual Basic
Struttura del programma e convenzioni del codice
Parole chiave
Me, My, MyBase e MyClass in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Me , My , MyBase e MyClass in Visual Basic hanno nomi simili, ma scopi diversi. In questo argomento vengono
descritte le singole entità per distinguerle.
Me stesso
La Me parola chiave fornisce un modo per fare riferimento all'istanza specifica di una classe o struttura in cui è
attualmente in esecuzione il codice. Me si comporta come una variabile oggetto o una variabile di struttura che
fa riferimento all'istanza corrente. L'utilizzo di Me è particolarmente utile per passare informazioni sull'istanza
attualmente in esecuzione di una classe o di una struttura a una routine in un'altra classe, struttura o modulo.
Si supponga, ad esempio, di avere la procedura seguente in un modulo.
È possibile chiamare questa procedura e passare l'istanza corrente della Form classe come argomento usando
l'istruzione seguente.
ChangeFormColor(Me)
My
Questa My funzionalità consente di accedere in modo semplice e intuitivo a numerose classi di .NET
Framework, consentendo all'utente di Visual Basic di interagire con il computer, l'applicazione, le impostazioni,
le risorse e così via.
MyBase
La MyBase parola chiave si comporta come una variabile oggetto che fa riferimento alla classe di base
dell'istanza corrente di una classe. MyBase viene in genere usato per accedere ai membri della classe di base
sottoposti a override o nascosti in una classe derivata. MyBase.New viene usato per chiamare in modo esplicito
un costruttore della classe base da un costruttore di classe derivata.
MyClass
La MyClass parola chiave si comporta come una variabile oggetto che fa riferimento all'istanza corrente di una
classe come implementata originariamente. MyClass è simile a Me , ma tutte le chiamate al metodo su di essa
sono trattate come se il metodo fosse NotOverridable .
Vedi anche
Nozioni fondamentali sull'ereditarietà
Limitazioni di Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Le versioni precedenti di Visual Basic applicano limiti nel codice, ad esempio la lunghezza dei nomi delle
variabili, il numero di variabili consentite nei moduli e le dimensioni del modulo. In Visual Basic .NET queste
restrizioni sono state attenuate, garantendo una maggiore libertà di scrittura e disposizione del codice.
I limiti fisici dipendono maggiormente dalla memoria in fase di esecuzione rispetto alle considerazioni in fase di
compilazione. Se si usano procedure di programmazione prudenti e si dividono applicazioni di grandi
dimensioni in più classi e moduli, è possibile che si verifichi una limitazione di Visual Basic interna.
Di seguito sono riportate alcune limitazioni che è possibile riscontrare in casi estremi:
Lunghezza del nome. È presente un numero massimo di caratteri per il nome di ogni elemento di
programmazione dichiarato. Questo valore massimo si applica a un'intera stringa di qualificazione se il
nome dell'elemento è qualificato. Vedere Declared Element Names.
Lunghezza riga. È presente un massimo di 65535 caratteri in una riga fisica di codice sorgente. La riga
di codice sorgente logica può essere più lunga se si utilizzano caratteri di continuazione di riga. Vedere
procedura: interrompere e combinare istruzioni nel codice.
Dimensioni della matrice. Per una matrice è possibile dichiarare un numero massimo di dimensioni.
Questo limita il numero di indici che è possibile utilizzare per specificare un elemento di matrice. Vedere
dimensioni della matrice in Visual Basic.
Lunghezza della stringa. È disponibile un numero massimo di caratteri Unicode che è possibile
archiviare in una singola stringa. Vedere tipo di dati String.
Lunghezza della stringa dell'ambiente. Per qualsiasi stringa di ambiente utilizzata come argomento
della riga di comando è disponibile un massimo di 32768 caratteri. Si tratta di una limitazione per tutte le
piattaforme.
Vedi anche
Struttura del programma e convenzioni del codice
Convenzioni di denominazione di Visual Basic
Funzionalità del linguaggio Visual Basic
05/03/2021 • 5 minutes to read • Edit Online
Gli argomenti seguenti introducono e discutono i componenti essenziali di Visual Basic, un linguaggio di
programmazione orientato a oggetti. Dopo aver creato l'interfaccia utente per l'applicazione usando form e
controlli, è necessario scrivere il codice per la definizione del comportamento dell'applicazione. Come per
qualsiasi linguaggio di programmazione moderno, Visual Basic supporta numerosi costrutti di programmazione
e elementi di linguaggio comuni.
Se si conoscono altri linguaggi di programmazione, molti dei concetti trattati in questa sezione potrebbero
sembrare familiari. Anche se la maggior parte dei costrutti è simile a quella di altri linguaggi, la natura guidata
dagli eventi di Visual Basic introduce alcune piccole differenze.
Se non si ha esperienza di programmazione, le informazioni in questa sezione possono fungere da introduzione
ai concetti fondamentali per la scrittura di codice. Una volta appreso le nozioni di base, è possibile creare potenti
applicazioni usando Visual Basic.
Sezioni correlate
raccolte
Descrizione di alcuni dei tipi di raccolte disponibili in .NET Framework. Viene mostrato come usare raccolte
semplici e raccolte di coppie chiave/valore.
Riferimenti al linguaggio Visual Basic
Vengono fornite informazioni di riferimento su vari aspetti della programmazione Visual Basic.
Matrici in Visual Basic
05/03/2021 • 45 minutes to read • Edit Online
Una matrice è un set di valori, che sono elementi definiti, che sono logicamente correlati tra loro. Una matrice,
ad esempio, può essere costituita dal numero di studenti di ogni classe in una scuola elementare; ogni elemento
della matrice è il numero di studenti in un singolo livello. Analogamente, una matrice può contenere i voti di uno
studente per una classe; ogni elemento della matrice è un singolo livello.
È possibile che singole variabili memorizzino tutti gli elementi di dati. Se, ad esempio, l'applicazione analizza i
voti degli studenti, è possibile usare una variabile separata per ogni livello di studente, ad esempio
englishGrade1 , englishGrade2 e così via. Questo approccio presenta tre limitazioni principali:
' Change the size of an existing array to 16 elements and retain the current values.
ReDim Preserve numbers(15)
' Redefine the size of an existing array and reset the values.
ReDim numbers(15)
L'esempio seguente contiene il codice Visual Basic che crea e usa la matrice:
Module SimpleArray
Public Sub Main()
' Declare an array with 7 elements.
Dim students(6) As Integer
È possibile usare una New clausola per specificare la dimensione di una matrice al momento della
creazione:
Se si dispone di una matrice esistente, è possibile ridefinirne la dimensione usando l' ReDim istruzione. È
possibile specificare che l' ReDim istruzione mantenga i valori presenti nella matrice oppure è possibile
specificare che crei una matrice vuota. L'esempio seguente illustra vari modi di usare l'istruzione ReDim per
modificare la dimensione di una matrice esistente.
' Assign a new array size and retain the current values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)
Quando si usa l'inferenza del tipo, il tipo della matrice viene determinato dal tipo dominante nell'elenco di valori
letterali. Il tipo dominante è il tipo in cui tutti gli altri tipi nella matrice possono ampliarsi. Se non è possibile
determinare il tipo univoco, il tipo dominante è il tipo univoco in cui possono restringersi tutti gli altri tipi nella
matrice. Se nessuno di questi tipi univoci può essere determinato, il tipo dominante è Object . Se, ad esempio,
l'elenco di valori fornito al valore letterale di matrice contiene valori di tipo Integer , Long e Double , la matrice
risultante è di tipo Double . Poiché Integer e Long si ampliano solo a Double , Double è il tipo dominante. Per
altre informazioni, vedere Widening and Narrowing Conversions.
NOTE
È possibile utilizzare l'inferenza del tipo solo per le matrici definite come variabili locali in un membro di tipo. Se una
definizione di tipo esplicita è assente, le matrici definite con valori letterali di matrice a livello di classe sono di tipo
Object[] . Per altre informazioni, vedere inferenza dei tipi locali.
Si noti che nell'esempio precedente viene definito values come una matrice di tipo Double anche se tutti i
valori letterali di matrice sono di tipo Integer . È possibile creare questa matrice perché i valori nel valore
letterale di matrice possono ampliarsi ai Double valori.
È inoltre possibile creare e popolare una matrice multidimensionale tramite valori letterali di matrice annidati. I
valori letterali di matrice annidati devono avere un certo numero di dimensioni coerenti con la matrice
risultante. Nell'esempio seguente viene creata una matrice bidimensionale di numeri interi utilizzando valori
letterali di matrice annidati.
Quando si usano valori letterali di matrice annidati per creare e popolare una matrice, si verifica un errore se il
numero di elementi nei valori letterali di matrice annidati non corrisponde. Si verifica un errore anche se la
variabile di matrice viene dichiarata in modo esplicito con un numero diverso di dimensioni rispetto ai valori
letterali di matrice.
Come è possibile per le matrici unidimensionali, è possibile basarsi sull'inferenza del tipo durante la creazione di
una matrice multidimensionale con valori letterali di matrice annidati. Il tipo dedotto è il tipo dominante per tutti
i valori in tutti i valori letterali di matrice per tutti i livelli di annidamento. Nell'esempio seguente viene creata
una matrice bidimensionale di tipo Double[,] da valori di tipo Integer e Double .
Dim arr = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}
Per altri esempi, vedere Procedura: inizializzare una variabile di matrice in Visual Basic.
Module IterateArray
Public Sub Main()
Dim numbers = {10, 20, 30}
Module IterateArray
Public Sub Main()
Dim numbers = {{1, 2}, {3, 4}, {5, 6}}
Nell'esempio seguente viene usato un oggetto per ogni... Istruzione successivaper scorrere una matrice
unidimensionale e una matrice bidimensionale.
Module IterateWithForEach
Public Sub Main()
' Declare and iterate through a one-dimensional array.
Dim numbers1 = {10, 20, 30}
Module Example
Public Sub Main()
Dim arr(3, 3) As Integer
Console.WriteLine(arr.Length)
End Sub
End Module
' The example displays the following output:
' 16
NOTE
Questa discussione sulle dimensioni della matrice non si applica alle matrici irregolari. Per informazioni sulle matrici
irregolari e sulla determinazione delle dimensioni di una matrice di matrici, vedere la sezione matrici di matrici.
È possibile determinare le dimensioni di una matrice usando la proprietà Array.Length. È possibile trovare la
lunghezza di ogni dimensione di una matrice multidimensionale usando il Array.GetLength metodo.
È possibile ridimensionare una variabile di matrice assegnando un nuovo oggetto matrice o usando l'istruzione
ReDim Statement . Nell'esempio seguente viene utilizzata l' ReDim istruzione per modificare una matrice di 100
elementi in una matrice di elementi 51.
Module Example
Public Sub Main()
Dim arr(99) As Integer
Console.WriteLine(arr.Length)
Redim arr(50)
Console.WriteLine(arr.Length)
End Sub
End Module
' The example displays the following output:
' 100
' 51
Di seguito sono indicati alcuni elementi importanti relativi alla dimensione di una matrice.
Tipo di matrice
Ogni matrice ha un tipo di dati che differisce dal tipo di dati dei relativi elementi. Non esiste un singolo tipo di
dati per tutte le matrici. Il tipo di dati di una matrice viene invece determinato dal numero di dimensioni, o
rango, della matrice e dal tipo di dati degli elementi nella matrice. Due variabili di matrice hanno lo stesso tipo di
dati solo se hanno lo stesso rango e i relativi elementi hanno lo stesso tipo di dati. La lunghezza delle dimensioni
di una matrice non influisce sul tipo di dati della matrice.
Ogni matrice eredita dalla classe System.Array. È possibile dichiarare una variabile di tipo Array , ma non è
possibile creare una matrice di tipo Array . Ad esempio, anche se il codice seguente dichiara arr che la
variabile è di tipo Array e chiama il Array.CreateInstance metodo per creare un'istanza della matrice, il tipo della
matrice viene dimostrato come oggetto [].
Module Example
Public Sub Main()
Dim arr As Array = Array.CreateInstance(GetType(Object), 19)
Console.WriteLine(arr.Length)
Console.WriteLine(arr.GetType().Name)
End Sub
End Module
' The example displays the following output:
' 19
' Object[]
L'istruzione ReDim non può inoltre operare su una variabile dichiarata di tipo Array . Per questi motivi, e per
l'indipendenza dai tipi, è consigliabile dichiarare ogni matrice come un tipo specifico.
È possibile determinare il tipo di dati di una matrice o dei relativi elementi in diversi modi.
È possibile chiamare il GetType Metodo sulla variabile per ottenere un Type oggetto che rappresenta il tipo in
fase di esecuzione della variabile. Nelle proprietà e nei metodi dell'oggetto Type sono presenti informazioni
complete.
È possibile passare la variabile alla TypeName funzione per ottenere un oggetto String con il nome del tipo
in fase di esecuzione.
Nell'esempio seguente vengono chiamati sia il GetType metodo che la TypeName funzione per determinare il
tipo di una matrice. Il tipo di matrice è Byte(,) . Si noti che la Type.BaseType proprietà indica anche che il tipo di
base della matrice di byte è la Array classe.
Module Example
Public Sub Main()
Dim bytes(9,9) As Byte
Console.WriteLine($"Type of {nameof(bytes)} array: {bytes.GetType().Name}")
Console.WriteLine($"Base class of {nameof(bytes)}: {bytes.GetType().BaseType.Name}")
Console.WriteLine()
Console.WriteLine($"Type of {nameof(bytes)} array: {TypeName(bytes)}")
End Sub
End Module
' The example displays the following output:
' Type of bytes array: Byte[,]
' Base class of bytes: Array
'
' Type of bytes array: Byte(,)
Module ReturnValuesAndParams
Public Sub Main()
Dim numbers As Integer() = GetNumbers()
ShowNumbers(numbers)
End Sub
Module Example
Public Sub Main()
Dim numbers As Integer(,) = GetNumbersMultidim()
ShowNumbersMultidim(numbers)
End Sub
Matrici di matrici
In alcuni casi la struttura dei dati nell'applicazione è bidimensionale, ma non rettangolare. Ad esempio, è
possibile usare una matrice per archiviare i dati relativi alla temperatura elevata di ogni giorno del mese. La
prima dimensione della matrice rappresenta il mese, ma la seconda dimensione rappresenta il numero di giorni
e il numero di giorni in un mese non è uniforme. Una matrice irregolare, definita anche matrice di matrici, è
progettata per scenari di questo tipo. Una matrice irregolare è una matrice i cui elementi sono anche matrici.
Una matrice irregolare e ogni elemento di una matrice irregolare possono avere una o più dimensioni.
Nell'esempio seguente viene utilizzata una matrice di mesi, ogni elemento di che è una matrice di giorni.
Nell'esempio viene utilizzata una matrice di matrici perché i mesi diversi hanno un numero di giorni diverso.
Nell'esempio viene illustrato come creare una matrice di matrici, assegnarvi valori e recuperare e visualizzare i
relativi valori.
Imports System.Globalization
Module JaggedArray
Public Sub Main()
' Declare the jagged array of 12 elements. Each element is an array of Double.
Dim sales(11)() As Double
' Set each element of the sales array to a Double array of the appropriate size.
For month As Integer = 0 To 11
' The number of days in the month determines the appropriate size.
Dim daysInMonth As Integer =
DateTime.DaysInMonth(Year(Now), month + 1)
sales(month) = New Double(daysInMonth - 1) {}
Next
Nell'esempio precedente i valori vengono assegnati alla matrice di matrici in base a un elemento per elemento
tramite un For...Next ciclo. È anche possibile assegnare valori agli elementi di una matrice irregolare usando
valori letterali di matrice annidati. Tuttavia, il tentativo di usare valori letterali di matrice annidati, ad esempio,
Dim valuesjagged = {{1, 2}, {2, 3, 4}} genera l'errore del compilatore BC30568. Per correggere l'errore,
racchiudere tra parentesi i valori letterali della matrice interna. Le parentesi forzano la valutazione
dell'espressione letterale di matrice e i valori risultanti vengono usati con il valore letterale di matrice esterno,
come illustrato nell'esempio riportato di seguito.
Module Example
Public Sub Main()
Dim values1d = { 1, 2, 3 }
Dim values2d = {{1, 2}, {2, 3}, {3, 4}}
Dim valuesjagged = {({1, 2}), ({2, 3, 4})}
End Sub
End Module
Una matrice di matrici è una matrice unidimensionale i cui elementi contengono matrici. Pertanto, la
Array.Length proprietà e il Array.GetLength(0) metodo restituiscono il numero di elementi nella matrice
unidimensionale e Array.GetLength(1) genera un oggetto IndexOutOfRangeException perché una matrice
irregolare non è multidimensionale. Per determinare il numero di elementi in ogni sottomatrice è necessario
recuperare il valore della proprietà di ogni sottomatrice Array.Length . Nell'esempio seguente viene illustrato
come determinare il numero di elementi in una matrice di matrici.
Module Example
Public Sub Main()
Dim jagged = { ({1, 2}), ({2, 3, 4}), ({5, 6}), ({7, 8, 9, 10}) }
Console.WriteLine($"The value of jagged.Length: {jagged.Length}.")
Dim total = jagged.Length
For ctr As Integer = 0 To jagged.GetUpperBound(0)
Console.WriteLine($"Element {ctr + 1} has {jagged(ctr).Length} elements.")
total += jagged(ctr).Length
Next
Console.WriteLine($"The total number of elements in the jagged array: {total}")
End Sub
End Module
' The example displays the following output:
' The value of jagged.Length: 4.
' Element 1 has 2 elements.
' Element 2 has 3 elements.
' Element 3 has 2 elements.
' Element 4 has 4 elements.
' The total number of elements in the jagged array: 15
Una matrice di lunghezza zero viene dichiarata con una dimensione di-1. Ad esempio:
Potrebbe essere necessario creare una matrice di lunghezza zero nelle circostanze seguenti:
Senza rischiare un' NullReferenceException eccezione, il codice deve accedere ai membri della Array
classe, ad esempio Length o Rank , oppure chiamare una funzione Visual Basic quale UBound .
Si vuole che il codice venga mantenuto semplice, non è necessario verificarlo Nothing come caso
speciale.
Il codice interagisce con un'API (Application Programming Interface) che richiede il passaggio di una
matrice di lunghezza zero a una o più routine oppure che restituisce una matrice di lunghezza zero da
una o più routine.
NOTE
In questa sezione non viene illustrata la suddivisione di una singola stringa in una matrice di stringhe basata su un
delimitatore. Per informazioni sulla suddivisione di una stringa, vedere il String.Split metodo.
Module Example
Public Sub Main()
' Create an array of 100 elements.
Dim arr(99) As Integer
' Populate the array.
Dim rnd As new Random()
For ctr = 0 To arr.GetUpperBound(0)
arr(ctr) = rnd.Next()
Next
Nell'esempio seguente viene divisa una matrice di stringhe in due matrici in base alla presenza di un elemento il
cui valore è "zzz", che funge da delimitatore di matrice. Le nuove matrici non includono l'elemento che contiene
il delimitatore.
Module Example
Public Sub Main()
Dim rnd As New Random()
Unione di matrici
È anche possibile combinare un numero di matrici in una singola matrice più grande. A tale scopo, è possibile
usare anche il Array.Copy metodo.
NOTE
Questa sezione non illustra l'aggiunta di una matrice di stringhe in una singola stringa. Per informazioni sull'aggiunta di
una matrice di stringhe, vedere il String.Join metodo.
Prima di copiare gli elementi di ogni matrice nella nuova matrice, è necessario prima di tutto assicurarsi di avere
inizializzato la matrice in modo che sia sufficientemente grande da contenere la nuova matrice. Questa
operazione può essere eseguita in due modi:
Usare l' ReDim Preserve istruzione per espandere dinamicamente la matrice prima di aggiungervi nuovi
elementi. Questa è la tecnica più semplice, ma può comportare una riduzione delle prestazioni e un utilizzo
eccessivo della memoria durante la copia di matrici di grandi dimensioni.
Calcolare il numero totale di elementi necessari per la nuova matrice di grandi dimensioni, quindi
aggiungervi gli elementi di ogni matrice di origine.
Nell'esempio seguente viene usato il secondo approccio per aggiungere quattro matrici con dieci elementi
ciascuno a una singola matrice.
Imports System.Collections.Generic
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim tasks As New List(Of Task(Of Integer()))
' Generate four arrays.
For ctr = 0 To 3
Dim value = ctr
tasks.Add(Task.Run(Function()
Dim arr(9) As Integer
For ndx = 0 To arr.GetUpperBound(0)
arr(ndx) = value
Next
Return arr
End Function))
Next
Task.WaitAll(tasks.ToArray())
' Compute the number of elements in all arrays.
Dim elements = 0
For Each task In tasks
elements += task.Result.Length
Next
Dim newArray(elements - 1) As Integer
Dim index = 0
For Each task In tasks
Dim n = task.Result.Length
Array.Copy(task.Result, 0, newArray, index, n)
index += n
Next
Console.WriteLine($"The new array has {newArray.Length} elements.")
End Sub
End Module
' The example displays the following output:
' The new array has 40 elements.
Poiché in questo caso le matrici di origine sono di dimensioni ridotte, è anche possibile espandere
dinamicamente la matrice quando si aggiungono gli elementi di ogni nuova matrice. Nell'esempio seguente
viene eseguita questa operazione.
Imports System.Collections.Generic
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim tasks As New List(Of Task(Of Integer()))
' Generate four arrays.
For ctr = 0 To 3
Dim value = ctr
tasks.Add(Task.Run(Function()
Dim arr(9) As Integer
For ndx = 0 To arr.GetUpperBound(0)
arr(ndx) = value
Next
Return arr
End Function))
Next
Task.WaitAll(tasks.ToArray())
' Dimension the target array and copy each element of each source array to it.
Dim newArray() As Integer = {}
' Define the next position to copy to in newArray.
Dim index = 0
For Each task In tasks
Dim n = Task.Result.Length
ReDim Preserve newArray(newArray.GetUpperBound(0) + n)
Array.Copy(task.Result, 0, newArray, index, n)
index += n
Next
Console.WriteLine($"The new array has {newArray.Length} elements.")
End Sub
End Module
' The example displays the following output:
' The new array has 40 elements.
Argomenti correlati
T ERM IN E DEF IN IZ IO N E
Procedura: Inizializzare una variabile di matrice in Visual Basic Descrive come popolare le matrici con valori iniziali.
Procedura: ordinare una matrice in Visual Basic Illustra come ordinare alfabeticamente gli elementi di una
matrice.
Procedura: Assegnare una matrice a un'altra matrice Descrive regole e passaggi per l'assegnazione di una matrice
a un'altra variabile di matrice.
Risoluzione dei problemi relativi alle matrici Illustra alcuni problemi comuni che si verificano quando si
usano le matrici.
Vedi anche
System.Array
Istruzione Dim
Istruzione ReDim
Inizializzatori di raccolta (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Gli inizializzatori di insieme consentono di creare una raccolta e popolarla con un set iniziale di valori. Gli
inizializzatori di insieme sono utili quando si crea una raccolta da un set di valori noti, ad esempio un elenco di
opzioni di menu o categorie, un set iniziale di valori numerici, un elenco statico di stringhe quali nomi di giorni o
mesi o un elenco di aree geografiche, ad esempio un elenco di stati che viene usato per la convalida.
Per altre informazioni sulle raccolte, vedere Raccolte.
È possibile identificare un inizializzatore di insieme usando la parola chiave From seguita da parentesi graffe (
{} ). Questo approccio è simile alla sintassi dei valori letterali di matrice, descritta in Matrici. Gli esempi seguenti
illustrano diversi metodi d'uso degli inizializzatori di insieme per la creazione di raccolte.
NOTE
Anche C# offre inizializzatori di insieme. Gli inizializzatori di insieme di C# offrono la stessa funzionalità degli inizializzatori
di insieme di Visual Basic. Per altre informazioni sugli inizializzatori di insieme di C#, vedere Inizializzatori di oggetto e di
insieme.
Sintassi
Un inizializzatore di insieme è costituito da un elenco di valori delimitati da virgole racchiusi tra parentesi graffe
( {} ) e preceduti dalla parola chiave From come illustrato nel codice seguente.
Quando si crea una raccolta, ad esempio List<T> o Dictionary<TKey,TValue>, è necessario specificare il tipo di
raccolta prima dell'inizializzatore di insieme, come illustrato nel codice seguente.
L'esempio di codice seguente visualizza codice equivalente che non usa un inizializzatore di insieme.
Se la raccolta ha un metodo Add con parametri che corrispondono al costruttore dell'oggetto Customer è
possibile nidificare i valori dei parametri per il metodo Add all'interno di inizializzatori di insieme, come
descritto nella sezione successiva. Se la raccolta non dispone di tale metodo Add è possibile crearne uno come
metodo di estensione. Per un esempio di creazione di un metodo Add come metodo di estensione per una
raccolta, vedere Procedura: Creare un metodo di estensione Add usato da un inizializzatore di insieme. Per un
esempio di creazione di una raccolta personalizzata che può essere usata con un inizializzatore di insieme,
vedere Procedura: Creare una raccolta usata da un inizializzatore di insieme.
Solo gli elenchi di valori annidati al primo livello di annidamento vengono inviati al metodo Add per il tipo di
raccolta. I livelli di annidamento più profondi vengono considerati come valori letterali di matrice e gli elenchi di
valori annidati non vengono associati al metodo Add di una raccolta.
Argomenti correlati
T ITO LO DESC RIZ IO N E
Procedura: creare un metodo di estensione Add utilizzato da Illustra come creare un metodo di estensione denominato
un inizializzatore di raccolta Add che può essere usato per popolare una raccolta con
valori di un inizializzatore di insieme.
Procedura: Creare una raccolta usata da un inizializzatore di Illustra come abilitare l'uso di un inizializzatore di insieme
raccolta includendo un metodo Add in una classe di raccolte che
implementa IEnumerable .
Vedi anche
raccolte
Matrici
Inizializzatori di oggetto: tipi denominati e tipi anonimi
Operatore New
Proprietà implementate automaticamente
Procedura: Inizializzare una variabile di matrice in Visual Basic
Inferenza del tipo di variabile locale
Tipi anonimi
Introduzione a LINQ in Visual Basic
Procedura: Creare un elenco di elementi
Costanti ed enumerazioni in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Le costanti consentono di usare nomi significativi al posto di un valore che non cambia. Archiviano i valori che,
come suggerisce il nome, rimangono costanti durante l'esecuzione di un'applicazione. È possibile usare le
costanti per specificare nomi descrittivi, anziché numeri, rendendo il codice più leggibile.
Le enumerazioni offrono un modo pratico per usare i set di costanti correlate e per associare i valori delle
costanti ai nomi. Ad esempio, si può dichiarare un'enumerazione per un set di costanti integer associate ai giorni
della settimana e quindi usare i nomi dei giorni anziché i relativi valori integer nel codice.
Cenni preliminari sulle costanti Gli argomenti di questa sezione descrivono le costanti e il
relativo utilizzo.
Cenni preliminari sulle enumerazioni Gli argomenti di questa sezione descrivono le enumerazioni
e il relativo utilizzo.
Sezioni correlate
T ERM IN E DEF IN IZ IO N E
Istruzione Option Explicit Viene descritta l'istruzione Option Explicit , usata a livello
di modulo per imporre la dichiarazione esplicita di tutte le
variabili di tale modulo.
Option Infer (istruzione) Viene descritta l'istruzione Option Infer , che abilita l'uso
dell'inferenza del tipo di variabile locale nelle variabili
dichiaranti.
Option Strict Statement Viene descritta l'istruzione Option Strict , che limita le
conversioni implicite di tipi di dati sollo alle conversioni verso
tipi di dati più grandi, non consente l'associazione tardiva né
la tipizzazione implicita che genera un tipo Object .
Flusso di controllo in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Se non vengono applicate regole, un programma procede attraverso le relative istruzioni dall'inizio alla fine.
Alcuni programmi molto semplici possono essere scritti con solo questo flusso unidirezionale. Tuttavia,
l'efficacia e l'utilità di un linguaggio di programmazione sono in gran parte correlate alla possibilità di
modificare l'ordine di esecuzione con cicli e istruzioni di controllo.
Le strutture di controllo consentono di regolare il flusso di esecuzione del programma. Usando le strutture di
controllo, è possibile scrivere Visual Basic codice che prende decisioni o che ripete le azioni. Altre strutture di
controllo consentono di garantire l'eliminazione di una risorsa o di eseguire una serie di istruzioni per lo stesso
riferimento a un oggetto.
Sezioni correlate
Riepilogo del flusso di controllo
Offre collegamenti alle pagine dei riferimenti al linguaggio per questo argomento.
Tipi di dati in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Il tipo di dati di un elemento di programmazione indica la tipologia di dati che può contenere e la modalità di
archiviazione di tali dati. I tipi di dati si applicano a tutti i valori che possono essere archiviati nella memoria del
computer o partecipano alla valutazione di un'espressione. Ogni variabile, valore letterale, costante,
enumerazione, proprietà, parametro di routine, argomento di routine e valore restituito di routine ha un tipo di
dati.
Literal (Valore letterale) Con un carattere di tipo letterale. Vedere "Caratteri di tipo
letterale" in Caratteri tipo
Per un elenco dei tipi di dati di Visual Basic, vedere Tipi di dati.
Vedi anche
Caratteri tipo
Tipi di dati elementari
Tipi di dati compositi
Generic Types in Visual Basic
Tipi di valore e tipi di riferimento
Conversioni di tipi in Visual Basic
Strutture
Tuple
Risoluzione dei problemi relativi ai tipi di dati
Tipi di dati
Utilizzo efficiente dei tipi di dati
Caratteri di tipo (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Oltre a specificare un tipo di dati in un'istruzione di dichiarazione, è possibile forzare il tipo di dati di alcuni
elementi di programmazione con un carattere tipo. Il carattere tipo deve seguire immediatamente l'elemento,
senza alcun carattere corrispondente.
Il tipo di carattere non fa parte del nome dell'elemento. È possibile fare riferimento a un elemento definito con
un carattere di tipo senza il carattere tipo.
% Integer Dim L%
! Single Dim Q!
# Double Dim X#
Nessun carattere di tipo identificatore esistente per Boolean i Byte tipi di dati,, Char , Date , Object , SByte ,
Short , UInteger , ULong o o UShort per qualsiasi tipo di dati composito, ad esempio matrici o strutture.
In alcuni casi, è possibile aggiungere il $ carattere a una funzione Visual Basic, ad esempio Left$ anziché
Left , per ottenere un valore restituito di tipo String .
In tutti i casi, il carattere di tipo identificatore deve seguire immediatamente il nome dell'identificatore.
F O RM A T EST UA L E DI VA LO RE
L ET T ERA L E T IP O DI DAT I P REDEF IN ITO ESEM P IO
S Short I = 347S
I Integer J = 347I
L Long K = 347L
D Decimal X = 347D
F Single Y = 347F
R Double Z = 347R
US UShort L = 347US
UI UInteger M = 347UI
UL ULong N = 347UL
C Char Q = "."C
Nessun carattere di tipo letterale esistente per i Boolean Byte tipi di dati,, Date , Object ,, o SByte String
per qualsiasi tipo di dati composito, ad esempio matrici o strutture.
I valori letterali possono anche usare i caratteri di tipo identificatore ( % , & , @ , ! , # , $ ), così come
possono variabili, costanti ed espressioni. Tuttavia, i caratteri di tipo letterale ( S , I , L , D , F , R , C )
possono essere utilizzati solo con valori letterali.
In tutti i casi, il carattere di tipo letterale deve seguire immediatamente il valore letterale.
A partire da Visual Basic 2017, è possibile usare il carattere di sottolineatura ( _ ) come separatore di gruppo
per migliorare la leggibilità di un valore letterale integrale. Nell'esempio seguente viene usato il _ carattere per
raggruppare un valore letterale binario in gruppi a 8 bit:
È possibile seguire un valore letterale con prefisso con un carattere di tipo letterale. Nell'esempio riportato di
seguito viene illustrata questa situazione.
Nell'esempio precedente, counter ha il valore decimale di-32768 e flags il valore decimale è + 32768.
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
Vedere anche
Tipi di dati
Tipi di dati elementari
Tipi di valore e tipi di riferimento
Conversioni di tipi in Visual Basic
Risoluzione dei problemi relativi ai tipi di dati
Dichiarazione di variabile
Tipi di dati
Tipi di dati elementari (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic fornisce un set di tipi di dati predefiniti che è possibile usare per molti degli elementi di
programmazione. Questa sezione descrive questi tipi e come usarli.
NOTE
Ogni tipo di dati elementare in Visual Basic è supportato da una struttura o da una classe presente nello System spazio
dei nomi. Il compilatore USA ogni parola chiave del tipo di dati come alias per la struttura o la classe sottostante. Ad
esempio, la dichiarazione di una variabile tramite la parola riservata Byte equivale alla dichiarazione usando il nome
completo della struttura System.Byte .
Sezioni correlate
Tipi di dati
Introduce i tipi di dati Visual Basic e ne descrive l'utilizzo.
Tipi di dati
Viene fornita una panoramica dei tipi di dati elementari forniti da Visual Basic.
Tipi di dati numerici (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Visual Basic fornisce diversi tipi di dati numerici per la gestione di numeri in varie rappresentazioni. I tipi
integrali rappresentano solo numeri interi (positivi, negativi e zero) e i tipi non integrali rappresentano numeri
con parti intere e frazionarie.
Per una tabella che mostra un confronto affiancato dei tipi di dati Visual Basic, vedere tipi di dati.
I valori numerici non integrali possono essere espressi come mmmEeee, in cui MMM è il mantissa (cifre
significative) e Eee è l' esponente (una potenza di 10). I valori positivi più alti dei tipi non integrali sono
7.9228162514264337593543950335 E + 28 per Decimal , 3.4028235 e + 38 per Single e
1.79769313486231570 e + 308 per Double .
Prestazioni
Double è il più efficiente dei tipi di dati frazionari, perché i processori sulle piattaforme correnti eseguono
operazioni a virgola mobile con precisione doppia. Tuttavia, le operazioni con Double non sono altrettanto
veloci dei tipi integrali, ad esempio Integer .
Magnitude ridotte
Per i numeri con la grandezza minima possibile (più vicino a 0), le Double variabili possono mantenere i numeri
4.94065645841246544 e-324 per i valori negativi e 4.94065645841246544 e-324 per i valori positivi.
Numeri frazionari piccoli
Se non è necessario l'intervallo completo del tipo di Double dati, è possibile usare il Single tipo di dati, che
può mantenere i numeri a virgola mobile da-3.4028235 e + 38 a 3.4028235 e + 38. Le Magnitude più piccole
per le Single variabili sono-401298E e-45 per i valori negativi e 401298E e-45 per i valori positivi. Se si
dispone di un numero molto elevato di variabili che contengono numeri a virgola mobile ridotti, i Common
Language Runtime a volte possono archiviare le Single variabili in modo più efficiente e risparmiare
sull'utilizzo della memoria.
Vedi anche
Tipi di dati elementari
Tipi di dati carattere
Tipi di dati vari
Risoluzione dei problemi relativi ai tipi di dati
Procedura: Chiamare una funzione Windows che accetta tipi senza segno
Dati di tipo carattere (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic fornisce tipi di dati di tipo carattere per gestire i caratteri stampabili e visualizzabili. Mentre
entrambi gestiscono i caratteri Unicode, contiene Char un singolo carattere mentre String contiene un
numero di caratteri indefinito.
Per una tabella in cui viene visualizzato un confronto affiancato dei tipi di dati Visual Basic, vedere tipi di dati.
Tipo char
Il Char tipo di dati è un singolo carattere Unicode a due byte (a 16 bit). Se una variabile archivia sempre
esattamente un carattere, dichiararlo come Char . Ad esempio:
Ogni valore possibile in una Char String variabile o è un punto di codice, o codice carattere, nel set di caratteri
Unicode. I caratteri Unicode includono il set di caratteri ASCII di base, diverse altre lettere di alfabeto, accenti,
simboli di valuta, frazioni, segni diacritici e simboli matematici e tecnici.
NOTE
Il set di caratteri Unicode riserva i punti di codice da D800 a DFFF (da 55296 a 55551 Decimal) per le coppie di surrogati,
che richiedono valori 2 16 bit per rappresentare un singolo punto di codice. Una Char variabile non può avere una
coppia di surrogati e un oggetto String Usa due posizioni per mantenere tale coppia.
Tipo di stringa
Il String tipo di dati è una sequenza di zero o più caratteri Unicode a 2 byte (a 16 bit). Se una variabile può
contenere un numero indefinito di caratteri, dichiararla come String . Ad esempio:
Vedi anche
Tipi di dati elementari
Tipi di dati compositi
Generic Types in Visual Basic
Tipi di valore e tipi di riferimento
Conversioni di tipi in Visual Basic
Risoluzione dei problemi relativi ai tipi di dati
Caratteri tipo
Tipi di dati vari (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Visual Basic fornisce diversi tipi di dati che non sono orientati verso numeri o caratteri. Si occupano invece di
dati specializzati quali i valori Yes/No, i valori di data e ora e gli indirizzi degli oggetti.
Per una tabella che mostra un confronto affiancato dei tipi di dati Visual Basic, vedere tipi di dati.
Tipo Boolean
Il tipo di dati booleano è un valore senza segno interpretato come True o False . La larghezza dei dati dipende
dalla piattaforma di implementazione. Se una variabile può contenere solo valori a due Stati, ad esempio
true/false, Yes/No o on/off, dichiararla come Boolean .
Tipo di data
Il tipo di dati date è un valore a 64 bit che include le informazioni di data e ora. Ogni incremento rappresenta
100 nanosecondi di tempo trascorso dall'inizio (12:00 AM) del 1 ° gennaio dell'anno 1 nel calendario
gregoriano. Se una variabile può contenere un valore di data, un valore di ora o entrambi, dichiararla come
Date .
Tipo di oggetto
Il tipo di dati Object è un indirizzo a 32 bit che punta a un'istanza dell'oggetto all'interno dell'applicazione o in
un'altra applicazione. Una Object variabile può fare riferimento a qualsiasi oggetto riconosciuto
dall'applicazione o ai dati di qualsiasi tipo di dati. Sono inclusi entrambi i tipi di valore, ad esempio le Integer
Boolean istanze di struttura, e e i tipi di riferimento, che sono istanze di oggetti creati da classi quali e e istanze
di String Form matrice.
Se una variabile archivia un puntatore a un'istanza di una classe che non è noto in fase di compilazione o se può
puntare a dati di vari tipi di dati, dichiararla come Object .
Il vantaggio del Object tipo di dati è che è possibile utilizzarlo per archiviare dati di qualsiasi tipo di dati. Lo
svantaggio è che vengono eseguite operazioni aggiuntive che impongono un tempo di esecuzione maggiore e
rallentano le prestazioni dell'applicazione. Se si usa una Object variabile per i tipi di valore, si comporterà la
conversione boxing e unboxing. Se viene usato per i tipi di riferimento, si incorre in un binding tardivo.
Vedi anche
Caratteri tipo
Tipi di dati elementari
Tipi di dati numerici
Tipi di dati carattere
Risoluzione dei problemi relativi ai tipi di dati
Associazione anticipata e tardiva
Tipi di dati compositi (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Oltre ai tipi di dati elementari Visual Basic fornisce, è anche possibile assemblare elementi di tipi diversi per
creare tipi di dati compositi , ad esempio strutture, matrici e classi. È possibile compilare tipi di dati compositi da
tipi elementari e da altri tipi compositi. Ad esempio, è possibile definire una matrice di elementi della struttura o
una struttura con membri di matrice.
Tipi di dati
Un tipo composito è diverso dal tipo di dati di uno dei relativi componenti. Una matrice di elementi, ad esempio,
Integer non è del Integer tipo di dati.
Un tipo di dati di matrice viene in genere rappresentato utilizzando il tipo di elemento, le parentesi e le virgole
secondo necessità. Ad esempio, una matrice unidimensionale di String elementi viene rappresentata come
String() e una matrice bidimensionale di Boolean elementi viene rappresentata come Boolean(,) .
Tipi di struttura
Non esiste un singolo tipo di dati costituito da tutte le strutture. Al contrario, ogni definizione di una struttura
rappresenta un tipo di dati univoco, anche se due strutture definiscono elementi identici nello stesso ordine.
Tuttavia, se si creano due o più istanze della stessa struttura, Visual Basic considera che siano dello stesso tipo di
dati.
Tuple
Una tupla è una struttura leggera che contiene due o più campi i cui tipi sono predefiniti. Le tuple sono
supportate a partire da Visual Basic 2017. Le tuple vengono in genere utilizzate per restituire più valori da una
singola chiamata al metodo senza dover passare argomenti per riferimento o per comprimere i campi restituiti
in una classe o una struttura più pesante. Per ulteriori informazioni sulle tuple, vedere l'argomento Tuple .
Tipi di matrici
Non esiste un singolo tipo di dati costituito da tutte le matrici. Il tipo di dati di una determinata istanza di una
matrice è determinato dai seguenti elementi:
Il fatto di essere una matrice
Rango (numero di dimensioni) della matrice
Tipo di elemento della matrice.
In particolare, la lunghezza di una determinata dimensione non fa parte del tipo di dati dell'istanza. Questa
condizione è illustrata nell'esempio seguente.
Nell'esempio precedente, le variabili arrayA di matrice e arrayB sono considerate dello stesso tipo di dati,
Byte() anche se vengono inizializzate su lunghezze diverse. arrayB Le variabili e arrayC non sono dello stesso
tipo perché i tipi di elemento sono diversi. arrayC Le variabili e arrayD non sono dello stesso tipo perché le
rispettive dimensioni sono diverse. Le variabili arrayD e arrayE hanno lo stesso tipo Short(,) , perché i
relativi tipi di rango e di elemento sono gli stessi, anche se arrayD non è stato ancora inizializzato.
Per ulteriori informazioni sulle matrici, vedere matrici.
Tipi di classe
Non esiste un singolo tipo di dati costituito da tutte le classi. Sebbene una classe possa ereditare da un'altra
classe, ognuno è un tipo di dati separato. Più istanze della stessa classe sono dello stesso tipo di dati. Se si
assegna una variabile di istanza di classe a un'altra, non solo i tipi di dati hanno lo stesso tipo di dati, fanno
riferimento alla stessa istanza della classe in memoria.
Per ulteriori informazioni sulle classi, vedere oggetti e classi.
Vedi anche
Tipi di dati
Tipi di dati elementari
Generic Types in Visual Basic
Tipi di valore e tipi di riferimento
Conversioni di tipi in Visual Basic
Strutture
Risoluzione dei problemi relativi ai tipi di dati
Procedura: Inserire più valori in una variabile
Procedura: inserire più valori in una variabile (Visual
Basic)
05/03/2021 • 2 minutes to read • Edit Online
Una variabile include più di un valore se lo si dichiara come tipo di dati composito.
I tipi di dati compositi includono strutture, matrici e classi. Una variabile di un tipo di dati composito può avere
una combinazione di tipi di dati elementari e altri tipi compositi. Le strutture e le classi possono conservare il
codice e i dati.
Vedi anche
Tipi di dati
Caratteri tipo
Tipi di dati compositi
Strutture
Matrici
Oggetti e classi
Tipi di valore e tipi di riferimento
Tipi generici in Visual Basic (Visual Basic)
05/03/2021 • 14 minutes to read • Edit Online
Un tipo generico è un singolo elemento di programmazione che si adatta per eseguire la stessa funzionalità per
diversi tipi di dati. Quando si definisce una classe o una routine generica, non è necessario definire una versione
distinta per ogni tipo di dati per il quale si vuole eseguire tale funzionalità.
Un'analogia è un cacciavite con diverse punte rimovibili. Si esamina la vite che è necessario ruotare e si
seleziona la punta corretta per tale vite (a taglio, a croce, a stella). Dopo avere inserito la punta corretta nel
manico del cacciavite, si esegue in tutti i casi la stessa funzione, ovvero ruotare la vite.
Quando si definisce un tipo generico, questo viene parametrizzato con uno o più tipi di dati. Questo consente di
usare il codice per adattare i tipi di dati ai propri requisiti. Il codice può dichiarare più elementi di
programmazione dall'elemento generico, ciascuno dei quali agisce su un diverso set di tipi di dati. Tuttavia, tutti
gli elementi dichiarati eseguono la stessa logica, indipendentemente dai tipi di dati in uso.
È ad esempio possibile creare e usare una classe queue che opera su un tipo di dati specifico, quale String . È
possibile dichiarare tale classe da System.Collections.Generic.Queue<T>, come illustrato nell'esempio seguente.
È ora possibile usare stringQ per lavorare esclusivamente con i valori String . Poiché stringQ è specifico per
String anziché essere generalizzato per i valori Object , non viene eseguita alcuna associazione tardiva o
conversione di tipo. Questo consente di risparmiare il tempo di esecuzione e riduce gli errori di runtime.
Per altre informazioni sull'uso di un tipo generico, vedere How to: Use a Generic Class.
Nella struttura precedente t è un parametro di tipo, ovvero un segnaposto per un tipo di dati che viene fornito
quando si dichiara la classe. In un'altra posizione nel codice è possibile dichiarare varie versioni di classHolder
fornendo diversi tipi di dati per t . Gli esempi seguenti mostrano due dichiarazioni di questo tipo.
Public integerClass As New classHolder(Of Integer)
Friend stringClass As New classHolder(Of String)
Le istruzioni precedenti dichiarano classi costruite, in cui un tipo specifico sostituisce il parametro di tipo. Questa
sostituzione viene propagata in tutto il codice all'interno della classe costruita. Nell'esempio seguente viene
illustrato l'aspetto della routine processNewItem in integerClass .
Per un esempio più completo, vedere procedura: definire una classe in grado di fornire funzionalità identiche su
tipi di dati diversi.
Vincoli
Sebbene il codice nella definizione di un tipo generico debba essere quanto più indipendente dal tipo possibile,
potrebbe essere necessario richiedere che una determinata funzionalità di qualsiasi tipo di dati sia disponibile
per il tipo generico. Ad esempio, se si vuole confrontare due elementi per ordinarli, il relativo tipo di dati deve
implementare l'interfaccia IComparable . È possibile applicare questo requisito aggiungendo un vincolo al
parametro di tipo.
Esempio di vincolo
Nell'esempio seguente viene illustrata una struttura di definizione di una classe con un vincolo che richiede che
l'argomento di tipo implementi IComparable.
Se il codice successivo tenta di costruire una classe da itemManager fornendo un tipo che non implementa
IComparable, il compilatore segnala un errore.
Tipi di vincoli
I vincoli possono specificare i requisiti seguenti in qualsiasi combinazione:
L'argomento di tipo deve implementare una o più interfacce
L'argomento di tipo deve essere del tipo di, o ereditare da, una classe al massimo
L'argomento di tipo deve esporre un costruttore senza parametri accessibile al codice che crea oggetti in
base ad esso
L'argomento di tipo deve essere un tipo riferimento oppure deve essere un tipo di valore
Se è necessario imporre più di un requisito, usare un elenco di vincoli separati da virgole tra parentesi graffe (
{ } ). Per richiedere un costruttore accessibile, includere la parola chiave new operator nell'elenco. Per
richiedere un tipo di riferimento, includere la parola chiave Class ; per richiedere un tipo di valore, includere la
parola chiave Structure .
Per altre informazioni sui vincoli, vedere Type List.
Esempio di più vincoli
Nell'esempio seguente viene illustrata una struttura di definizione di una classe generica con un elenco di vincoli
per il parametro di tipo. Nel codice che crea un'istanza di questa classe, l'argomento di tipo deve implementare
entrambe le interfacce IComparable e IDisposable , essere un tipo di riferimento ed esporre un costruttore senza
parametri accessibile.
Public Class thisClass(Of t As {IComparable, IDisposable, Class, New})
' Insert code that defines class members.
End Class
Termini importanti
I tipi generici introducono e usano i termini seguenti:
Tipo generico. Una definizione di una classe, una struttura, un'interfaccia, una routine o un delegato per
cui si fornisce almeno un tipo di dati al momento della dichiarazione.
Parametro di tipo. In una definizione di tipo generico, un segnaposto per un tipo di dati fornito al
momento della dichiarazione del tipo.
Argomento di tipo. Tipo di dati specifico che sostituisce un parametro di tipo quando si dichiara un tipo
costruito da un tipo generico.
Vincolo. Condizione su un parametro di tipo che limita l'argomento di tipo che è possibile specificare. Un
vincolo può richiedere che l'argomento di tipo debba implementare un'interfaccia specifica, essere o
ereditare da una classe particolare, avere un costruttore senza parametri accessibile o essere un tipo di
riferimento o un tipo di valore. Questi vincoli possono essere combinati, ma è possibile specificare al
massimo una classe.
Tipo costruito. Una classe, una struttura, un'interfaccia, una routine o un delegato dichiarato da un tipo
generico fornendo argomenti di tipo per i relativi parametri di tipo.
Vedi anche
Tipi di dati
Caratteri tipo
Tipi di valore e tipi di riferimento
Conversioni di tipi in Visual Basic
Risoluzione dei problemi relativi ai tipi di dati
Tipi di dati
Di
Come
Object Data Type
Covarianza e controvarianza
Iterators
Procedura: definire una classe in grado di fornire
funzionalità identiche con tipi di dati diversi (Visual
Basic)
05/03/2021 • 6 minutes to read • Edit Online
È possibile definire una classe dalla quale creare oggetti in grado di fornire funzionalità identiche su tipi di dati
diversi. A questo scopo, specificare uno o più parametri di tipo nella definizione. La classe potrà quindi servire
come modello per gli oggetti che usano tipi di dati diversi. Una classe definita in questo modo viene denominata
classe generica.
Il vantaggio della definizione di una classe generica sta nel fatto che viene definita un'unica volta e che può
essere usata dal codice per la creazione di molti oggetti che usano una vasta gamma di tipi di dati. Questo
comporta prestazioni superiori rispetto alla definizione della classe con il tipo Object .
Oltre alle classi, è possibile definire e usare anche strutture, interfacce, routine e delegati generici.
Per definire una classe con un parametro di tipo
1. Definire la classe nel modo normale.
2. Aggiungere (Of typeparameter ) subito dopo il nome della classe per specificare un parametro di tipo.
3. Se esiste più di un parametro di tipo, creare un elenco separato da virgole all'interno delle parentesi. Non
ripetere la parola chiave Of .
4. Se le operazioni eseguite dal codice su un parametro di tipo sono diverse da una semplice assegnazione,
far seguire il parametro di tipo da una clausola As per l'aggiunta di uno o più vincoli. Un vincolo
garantisce che il tipo fornito per tale parametro di tipo soddisfi un requisito, ad esempio:
Supporta un'operazione, quale > , eseguita dal codice
Supporta un membro, quale un metodo, a cui accede il codice
Espone un costruttore senza parametri
Se non si specifica alcun vincolo, le uniche operazioni e gli unici membri usati dal codice sono quelli
supportati dal Object Data Type. Per altre informazioni, vedere Type List.
5. Identificare ogni membro della classe da dichiarare con un tipo fornito e dichiararlo As typeparameter .
Questo vale per l'archiviazione interna, i parametri di routine e i valori restituiti.
6. Accertarsi che il codice usi solo operazioni e metodi supportati da qualsiasi tipo di dati che può fornire a
itemType .
Nell'esempio riportato di seguito viene definita una classe che gestisce un elenco molto semplice.
L'elenco è contenuto negli items della matrice interna e il tipo di dati degli elementi dell'elenco può
essere dichiarato dal codice. Un costruttore con parametri consente di usare il codice per impostare il
limite superiore di items e il costruttore senza parametri imposta questa proprietà su 9 (per un totale di
10 elementi).
Public Class simpleList(Of itemType)
Private items() As itemType
Private top As Integer
Private nextp As Integer
Public Sub New()
Me.New(9)
End Sub
Public Sub New(ByVal t As Integer)
MyBase.New()
items = New itemType(t) {}
top = t
nextp = 0
End Sub
Public Sub add(ByVal i As itemType)
insert(i, nextp)
End Sub
Public Sub insert(ByVal i As itemType, ByVal p As Integer)
If p > nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p",
" less than 0 or beyond next available list position")
ElseIf nextp > top Then
Throw New System.ArgumentException("No room to insert at ",
"p")
ElseIf p < nextp Then
For j As Integer = nextp To p + 1 Step -1
items(j) = items(j - 1)
Next j
End If
items(p) = i
nextp += 1
End Sub
Public Sub remove(ByVal p As Integer)
If p >= nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p",
" less than 0 or beyond last list item")
ElseIf nextp = 0 Then
Throw New System.ArgumentException("List empty; cannot remove ",
"p")
ElseIf p < nextp - 1 Then
For j As Integer = p To nextp - 2
items(j) = items(j + 1)
Next j
End If
nextp -= 1
End Sub
Public ReadOnly Property listLength() As Integer
Get
Return nextp
End Get
End Property
Public ReadOnly Property listItem(ByVal p As Integer) As itemType
Get
If p >= nextp OrElse p < 0 Then
Throw New System.ArgumentOutOfRangeException("p",
" less than 0 or beyond last list item")
End If
Return items(p)
End Get
End Property
End Class
È possibile dichiarare una classe da simpleList per contenere un elenco di valori Integer , un'altra
classe per contenere un elenco di valori String e un'altra per contenere valori Date . Ad eccezione del
tipo di dati dei membri dell'elenco, gli oggetti creati da tutte queste classi si comportano in maniera
identica.
L'argomento di tipo fornito dal codice a itemType può essere di tipo intrinseco come Boolean o Double ,
una struttura, un'enumerazione o qualsiasi tipo di classe, compresa una di quelle definite
dall'applicazione.
È possibile verificare la classe simpleList con il codice seguente.
Vedi anche
Tipi di dati
Generic Types in Visual Basic
Indipendenza del linguaggio e componenti indipendenti dal linguaggio
Di
Type List
Procedura: Usare una classe generica
Object Data Type
Procedura: utilizzare una classe generica (Visual
Basic)
05/03/2021 • 2 minutes to read • Edit Online
Una classe che accetta parametri di tipo è chiamato classe generica. Se si usa una classe generica, è possibile
generare una classe costruita da essa fornendo un argomento di tipo per ciascuno di questi parametri. È
possibile quindi dichiarare una variabile del tipo di classe costruita, creare un'istanza della classe costruita e
assegnarla alla variabile.
Oltre alle classi, è possibile definire e usare anche strutture, interfacce, routine e delegati generici.
La procedura seguente accetta una classe generica definita nell'.NET Framework e ne crea un'istanza.
Per usare una classe che accetta un parametro di tipo
1. All'inizio del file di origine, includere un' istruzione Imports (tipo e spazio dei nomi .NET) per importare lo
System.Collections.Generic spazio dei nomi. In questo modo è possibile fare riferimento alla classe
System.Collections.Generic.Queue<T> senza doverla specificare completamente per differenziarla da
altre classi queue come System.Collections.Queue.
2. Creare l'oggetto in modo normale, ma aggiungere (Of type) immediatamente dopo il nome della
classe.
L'esempio seguente usa la stessa classe (System.Collections.Generic.Queue<T>) per creare due oggetti
queue che contengono elementi con tipi di dati diversi. Aggiunge gli elementi alla fine di ogni coda e
quindi rimuove e visualizza gli elementi dall'inizio di ogni coda.
Vedi anche
Tipi di dati
Generic Types in Visual Basic
Indipendenza del linguaggio e componenti indipendenti dal linguaggio
Di
Istruzione Imports (tipo e spazio dei nomi .NET)
Procedura: Definire una classe in grado di fornire funzionalità identiche con tipi di dati diversi
Iterators
Generic Procedures in Visual Basic
05/03/2021 • 5 minutes to read • Edit Online
Una routine generica, detta anche metodo generico, è una procedura definita con almeno un parametro di tipo.
Ciò consente al codice chiamante di adattare i tipi di dati ai relativi requisiti ogni volta che viene chiamata la
procedura.
Una routine non è generica semplicemente in virtù di essere definita all'interno di una classe generica o di una
struttura generica. Per essere generico, la routine deve assumere almeno un parametro di tipo, oltre ai parametri
normali che potrebbero essere necessari. Una classe o una struttura generica può contenere routine non
generiche e una classe, una struttura o un modulo non generico può contenere routine generiche.
Una routine generica può usare i parametri di tipo nell'elenco di parametri normali, nel tipo restituito, se
presente, e nel codice della procedura.
Inferenza di tipi
È possibile chiamare una routine generica senza fornire alcun argomento di tipo. Se viene chiamato in questo
modo, il compilatore tenta di determinare i tipi di dati appropriati da passare agli argomenti di tipo della stored
procedure. Questa operazione viene definita inferenza del tipo. Nel codice seguente viene illustrata una
chiamata in cui il compilatore deduce che deve passare String il tipo al parametro di tipo t .
Se il compilatore non è in grado di dedurre gli argomenti di tipo dal contesto della chiamata, viene segnalato un
errore. Una delle possibili cause di questo errore è la mancata corrispondenza della classificazione della matrice.
Si supponga, ad esempio, di definire un parametro normale come matrice di un parametro di tipo. Se si chiama
la routine generica che fornisce una matrice di un rango diverso (numero di dimensioni), la mancata
corrispondenza causa l'inferenza del tipo. Nel codice seguente viene illustrata una chiamata in cui una matrice
bidimensionale viene passata a una routine che prevede una matrice unidimensionale.
È possibile richiamare l'inferenza del tipo solo omettendo tutti gli argomenti di tipo. Se si fornisce un solo
argomento di tipo, è necessario fornirli tutti.
L'inferenza del tipo è supportata solo per le routine generiche. Non è possibile richiamare l'inferenza del tipo su
classi, strutture, interfacce o delegati generici.
Esempio
Descrizione
Nell'esempio seguente viene definita una Function routine generica per trovare un particolare elemento in una
matrice. Definisce un parametro di tipo e lo usa per costruire i due parametri nell'elenco di parametri.
Codice
Return -1
End Function
Commenti
Nell'esempio precedente è richiesta la possibilità di eseguire il confronto searchValue con ogni elemento di
searchArray . Per garantire questa possibilità, vincola il parametro T di tipo per implementare l'
IComparable<T> interfaccia. Il codice usa il CompareTo metodo anziché l' = operatore, perché non esiste
alcuna garanzia che un argomento di tipo fornito per T supporti l' = operatore.
È possibile testare la findElement procedura con il codice seguente.
Vedi anche
Generic Types in Visual Basic
Procedura: Definire una classe in grado di fornire funzionalità identiche con tipi di dati diversi
Procedura: Usare una classe generica
Procedure
Parametri e argomenti delle routine
Type List
Elenco parametri
Tipi di valori nullable (Visual Basic)
05/03/2021 • 10 minutes to read • Edit Online
Talvolta si utilizza un tipo di valore che non dispone di un valore definito in determinate circostanze. Ad esempio,
un campo in un database potrebbe dover distinguere tra un valore assegnato significativo e senza un valore
assegnato. I tipi di valore possono essere estesi in modo da usare i valori normali o un valore null. Tale
estensione viene chiamata tipo Nullable.
Ogni tipo di valore nullable viene creato dalla struttura generica Nullable<T> . Si consideri un database che
tiene traccia delle attività correlate al lavoro. Nell'esempio seguente viene costruito un Boolean tipo nullable e
viene dichiarata una variabile di quel tipo. È possibile scrivere la dichiarazione in tre modi:
La variabile ridesBusToWork può avere un valore True , un valore False o nessun valore. Il valore predefinito
iniziale non è alcun valore, che in questo caso potrebbe indicare che le informazioni non sono state ancora
ottenute per questa persona. Al contrario, False potrebbe significare che le informazioni sono state ottenute e
che la persona non esegue il bus per lavorare.
È possibile dichiarare variabili e proprietà con tipi di valore Nullable ed è possibile dichiarare una matrice con
elementi di un tipo di valore Nullable. È possibile dichiarare procedure con tipi di valore nullable come
parametri ed è possibile restituire un tipo di valore Nullable da una Function routine.
Non è possibile costruire un tipo nullable in un tipo di riferimento, ad esempio una matrice, un oggetto String
o una classe. Il tipo sottostante deve essere un tipo valore. Per altre informazioni, vedere Value Types and
Reference Types.
Valori predefiniti
Quando si dichiara una variabile con un tipo di valore Nullable, la relativa HasValue proprietà ha il valore
predefinito False . Questo significa che per impostazione predefinita la variabile non ha un valore definito,
anziché il valore predefinito del tipo di valore sottostante. Nell'esempio seguente, la variabile numberOfChildren
inizialmente non ha un valore definito, anche se il valore predefinito del Integer tipo è 0.
Un valore null è utile per indicare un valore non definito o sconosciuto. Se numberOfChildren è stata dichiarata
come Integer , non esiste alcun valore che potrebbe indicare che le informazioni non sono attualmente
disponibili.
Archiviazione di valori
È possibile archiviare un valore in una variabile o in una proprietà di un tipo di valore nullable in modo tipico.
Nell'esempio seguente viene assegnato un valore alla variabile numberOfChildren dichiarata nell'esempio
precedente.
numberOfChildren = 2
Se una variabile o una proprietà di un tipo di valore Nullable contiene un valore definito, è possibile fare in
modo che venga ripristinato lo stato iniziale della mancata assegnazione di un valore. A tale scopo, impostare la
variabile o la proprietà su Nothing , come illustrato nell'esempio seguente.
numberOfChildren = Nothing
NOTE
Sebbene sia possibile assegnare Nothing a una variabile di un tipo di valore Nullable, non è possibile eseguirne il test per
Nothing utilizzando il segno di uguale. Il confronto che usa il segno di uguale, someVar = Nothing , restituisce sempre
Nothing . È possibile eseguire il test della HasValue proprietà della variabile per False o eseguire il test usando l' Is
IsNot operatore OR.
Recupero di valori
Per recuperare il valore di una variabile di un tipo di valore Nullable, è necessario innanzitutto testarne la
HasValue proprietà per verificare che disponga di un valore. Se si tenta di leggere il valore quando HasValue è
False , Visual Basic genera un' InvalidOperationException eccezione. Nell'esempio seguente viene illustrata la
modalità consigliata per leggere la variabile numberOfChildren degli esempi precedenti.
If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
B1 B2 B1 E B2 B1 O B2
Quando il valore di una variabile o di un'espressione booleana è Nothing , non è true né false . Si consideri
l'esempio seguente.
In questo esempio, b1 And b2 restituisce Nothing . Di conseguenza, la Else clausola viene eseguita in ogni
If istruzione e l'output è il seguente:
NOTE
AndAlso e OrElse , che usano la valutazione del cortocircuito, devono valutare i secondi operandi quando il primo
restituisce Nothing .
Propagazione
Se uno o entrambi gli operandi di un'operazione aritmetica, di confronto, di spostamento o di tipo è un tipo di
valore Nullable, il risultato dell'operazione è anche un tipo di valore Nullable. Se entrambi gli operandi hanno
valori che non lo sono Nothing , l'operazione viene eseguita sui valori sottostanti degli operandi, come se
nessuno dei due fosse un tipo di valore Nullable. Nell'esempio seguente le variabili compare1 e sum1 sono
tipizzate in modo implicito. Se si posiziona il puntatore del mouse su di essi, si noterà che il compilatore deduce i
tipi di valore Nullable per entrambi.
' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2
Se uno o entrambi gli operandi hanno un valore Nothing , il risultato sarà Nothing .
' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays: 3 * <null> * <null> * <null>
Console.WriteLine($"{m} * {If(n, "<null>")} * {If(sum2, "<null>")} * {If(compare2, "<null>")}")
Vedi anche
InvalidOperationException
HasValue
Tipi di dati
Tipi di valore e tipi di riferimento
Risoluzione dei problemi relativi ai tipi di dati
Compilare i set di dati usando oggetti TableAdapter
Operatore If
Inferenza del tipo di variabile locale
Operatore Is
Operatore IsNot
Tipi di valore Nullable (C#)
Value Types and Reference Types
05/03/2021 • 5 minutes to read • Edit Online
Esistono due tipi di tipi in Visual Basic: tipi di riferimento e tipi di valore. Le variabili dei tipi di riferimento
archiviano i riferimenti ai relativi dati (oggetti), mentre le variabili dei tipi di valore contengono direttamente i
dati. Con i tipi di riferimento, due variabili possono fare riferimento allo stesso oggetto. Di conseguenza le
operazioni su una variabile possono influire sull'oggetto a cui fa riferimento l'altra variabile. Con i tipi valore,
ogni variabile ha una propria copia dei dati e non è possibile che le operazioni su una variabile influiscano
sull'altra (tranne nel caso del modificatore ByRef nei parametri).
Tipi valore
Un tipo di dati è un tipo di valore se include i dati all'interno della propria allocazione di memoria. I tipi di valore
includono i seguenti:
Tutti i tipi di dati numerici
Boolean , Char e Date
Ogni struttura è un tipo valore, anche se contiene membri di tipo riferimento. Per questo motivo, i tipi di valore
come Char e Integer vengono implementati da strutture di .NET Framework.
È possibile dichiarare un tipo valore utilizzando la parola chiave riservata, ad esempio Decimal . È anche
possibile usare la New parola chiave per inizializzare un tipo di valore. Questa operazione è particolarmente
utile se il tipo dispone di un costruttore che accetta parametri. Un esempio è il Decimal(Int32, Int32, Int32,
Boolean, Byte) costruttore, che compila un nuovo Decimal valore dalle parti fornite.
Tipi riferimento
Un tipo riferimento archivia un riferimento ai relativi dati. I tipi di riferimento includono gli elementi seguenti:
String
Vedi anche
Tipi di valore Nullable
Conversioni di tipi in Visual Basic
Istruzione Structure
Utilizzo efficiente dei tipi di dati
Object Data Type
Tipi di dati
Conversioni di tipi in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Il processo di modifica di un valore da un tipo di dati a un altro tipo è denominato conversione. Le conversioni
sono verso un tipo di dati più ampio o più piccolo, a seconda delle capacità dei dati dei tipi interessati. Sono
anche implicite o esplicite, a seconda della sintassi nel codice sorgente.
Sezioni correlate
Tipi di dati
Introduce i tipi di dati Visual Basic e ne descrive l'utilizzo.
Tipi di dati
Elenca i tipi di dati elementari forniti da Visual Basic.
Risoluzione dei problemi relativi ai tipi di dati
Vengono illustrati alcuni problemi comuni che possono verificarsi quando si utilizzano i tipi di dati di.
Conversioni di ampliamento e restrizione (Visual
Basic)
05/03/2021 • 9 minutes to read • Edit Online
Una considerazione importante per la conversione di un tipo è la possibilità che il risultato della conversione sia
compreso nell'intervallo del tipo di dati di destinazione.
Una conversione verso un tipo di dati più ampio modifica un valore in un tipo di dati che può consentire
qualsiasi valore possibile dei dati originali. Le conversioni verso un tipo di dati più ampio conservano il valore di
origine ma possono modificarne la rappresentazione. Questo errore si verifica se si esegue la conversione da un
tipo integrale a Decimal o da Char a String .
Una conversione verso un tipo di dati più piccolo imposta un valore su un tipo di dati che potrebbe non
contenere alcuni dei possibili valori. Ad esempio, un valore frazionario viene arrotondato quando viene
convertito in un tipo integrale e un tipo numerico convertito in Boolean viene ridotto a True o False .
Double Double
T IP O DI DAT I VIEN E A M P L IATO A I T IP I DI DAT I
Qualsiasi tipo enumerato (enum) Il tipo integrale sottostante e qualsiasi tipo in cui viene
ampliato il tipo sottostante.
ampia. La giustificazione è che il tipo derivato contiene tutti i membri del tipo di base, quindi è qualificato come
un'istanza del tipo di base. Nella direzione opposta, il tipo di base non contiene i nuovi membri definiti dal tipo
derivato.
Le conversioni verso un tipo di dati più ampio hanno sempre esito positivo in fase di esecuzione e non
subiscono mai È sempre possibile eseguirli in modo implicito, se l' istruzione Option Strict imposta l'opzione di
controllo del tipo su On o su Off .
Vedi anche
Tipi di dati
Conversioni di tipi in Visual Basic
Conversioni implicite ed esplicite
Conversioni fra stringhe e altri tipi
Procedura: convertire un oggetto in un altro tipo in Visual Basic
Conversioni di matrice
Tipi di dati
CString
Conversioni implicite ed esplicite (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Una conversione implicita non richiede alcuna sintassi speciale nel codice sorgente. Nell'esempio seguente
Visual Basic converte in modo implicito il valore di k in un valore a virgola mobile a precisione singola prima
di assegnarlo a q .
Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k
Una conversione esplicita usa una parola chiave di conversione del tipo. Visual Basic fornisce diverse parole
chiave, che assegnano un'espressione tra parentesi al tipo di dati desiderato. Queste parole chiave agiscono
come funzioni, ma il compilatore genera il codice inline, quindi l'esecuzione è leggermente più veloce rispetto a
una chiamata di funzione.
Nell'estensione seguente dell'esempio precedente, la CInt parola chiave converte il valore di di q nuovo in un
intero prima di assegnarlo a k .
Funzione CType
La funzione CType opera su due argomenti. Il primo è l'espressione da convertire e la seconda è il tipo di dati di
destinazione o la classe di oggetti. Si noti che il primo argomento deve essere un'espressione, non un tipo.
CType è una funzione inline, ovvero il codice compilato esegue la conversione, spesso senza generare una
chiamata di funzione. In questo modo le prestazioni risultano migliorate.
Per un confronto di CType con le altre parole chiave di conversione dei tipi, vedere Operatore DirectCast e
operatore TryCast.
Tipi elementari
L'esempio seguente illustra l'uso di CType .
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Tipi compositi
È possibile usare CType per convertire i valori in tipi di dati compositi e in tipi elementari. È anche possibile
usarlo per forzare una classe di oggetti nel tipo di una delle relative interfacce, come nell'esempio seguente.
Tipi di matrici
CType può anche convertire i tipi di dati della matrice, come nell'esempio seguente.
Cau t i on
CType La specifica di per la conversione da un tipo di classe a un altro non riesce in fase di esecuzione se il tipo
di origine non deriva dal tipo di destinazione. Tale errore genera un' InvalidCastException eccezione.
Tuttavia, se uno dei tipi è una struttura o una classe definita e se è stato definito CType su tale struttura o classe,
una conversione può avere esito positivo se soddisfa i requisiti di CType . Vedere procedura: definire un
operatore di conversione.
L'esecuzione di una conversione esplicita è nota anche come cast di un'espressione a un tipo di dati o a una
classe di oggetti specificati.
Vedi anche
Conversioni di tipi in Visual Basic
Conversioni fra stringhe e altri tipi
Procedura: convertire un oggetto in un altro tipo in Visual Basic
Strutture
Tipi di dati
CString
Risoluzione dei problemi relativi ai tipi di dati
Conversioni fra stringhe e altri tipi (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
È possibile convertire un valore numerico, Boolean o data/ora in un oggetto String . È anche possibile
eseguire la conversione in senso inverso, da un valore stringa a numeric, Boolean o, Date purché il contenuto
della stringa possa essere interpretato come un valore valido del tipo di dati di destinazione. In caso affermativo,
si verifica un errore in fase di esecuzione.
Le conversioni per tutte queste assegnazioni, in entrambe le direzioni, sono le conversioni verso un tipo di
caratteri più piccolo. È necessario utilizzare le parole chiave di conversione dei tipi ( CBool ,, CByte CDate ,
CDbl , CDec , CInt , CLng , CSByte , CShort , CSng , CStr , CUInt , CULng , CUShort e CType ). Le Format
Val funzioni e offrono un maggiore controllo sulle conversioni tra stringhe e numeri.
Se è stata definita una classe o una struttura, è possibile definire operatori di conversione String dei tipi tra e il
tipo della classe o della struttura. Per altre informazioni, vedere How to: Define a Conversion Operator.
Quando Visual Basic converte una stringa in un valore numerico, USA le impostazioni delle Opzioni
internazionali specificate nel pannello di controllo di Windows per interpretare il separatore delle migliaia, il
separatore decimale e il simbolo di valuta. Ciò significa che una conversione potrebbe avere esito positivo in
un'impostazione ma non in un'altra. Ad esempio, "$14.20" è accettabile nelle impostazioni locali in inglese
(Stati Uniti) ma non in tutte le impostazioni locali francesi.
Vedi anche
Conversioni di tipi in Visual Basic
Widening and Narrowing Conversions
Conversioni implicite ed esplicite
Procedura: convertire un oggetto in un altro tipo in Visual Basic
Conversioni di matrice
Tipi di dati
CString
Sviluppare app globalizzate e localizzate
Procedura: convertire un oggetto in un altro tipo in
Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Per convertire una Object variabile in un altro tipo di dati, è possibile utilizzare una parola chiave di
conversione come la funzione CType.
Esempio
Nell'esempio seguente viene convertita una Object variabile in un oggetto Integer e un oggetto String .
Se si sa che il contenuto di una Object variabile è di un determinato tipo di dati, è preferibile convertire la
variabile in quel tipo di dati. Se si continua a usare la Object variabile, è necessario eseguire la conversione
boxing e unboxing (per un tipo di valore) o l' associazione tardiva (per un tipo di riferimento). Queste operazioni
consentono di ottenere tempo di esecuzione aggiuntivo e rallentare le prestazioni.
Compilare il codice
L'esempio presenta i requisiti seguenti:
Un riferimento allo spazio dei nomi System.
Vedi anche
Object
Conversioni di tipi in Visual Basic
Widening and Narrowing Conversions
Conversioni implicite ed esplicite
Conversioni fra stringhe e altri tipi
Conversioni di matrice
Strutture
Tipi di dati
CString
Conversioni di matrici (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
È possibile convertire un tipo di matrice in un tipo di matrice diverso purché si soddisfino le condizioni seguenti:
Rango uguale. Le classificazioni delle due matrici devono essere uguali, ovvero devono avere lo stesso
numero di dimensioni. Tuttavia, non è necessario che le lunghezze delle rispettive dimensioni siano
uguali.
Tipo di dati dell'elemento. I tipi di dati degli elementi di entrambe le matrici devono essere tipi di
riferimento. Non è possibile convertire una Integer matrice in una matrice Long o anche in una Object
matrice perché è necessario almeno un tipo di valore. Per altre informazioni, vedere Value Types and
Reference Types.
Conver tibilità della. È necessario che sia possibile eseguire una conversione verso un tipo di
ingrandimento o una riduzione tra i tipi di elemento delle due matrici. Un esempio in cui si verifica un
errore di questo requisito è un tentativo di conversione tra una String matrice e una matrice di una
classe derivata da System.Attribute . Questi due tipi non hanno nulla in comune e non esiste alcuna
conversione di alcun tipo.
Una conversione di un tipo di matrice in un altro viene ampliata o ristretta a seconda che la conversione dei
rispettivi elementi sia allargata o ridotta. Per altre informazioni, vedere Widening and Narrowing Conversions.
Vedi anche
Tipi di dati
Conversioni di tipi in Visual Basic
Conversioni implicite ed esplicite
Conversioni fra stringhe e altri tipi
Procedura: convertire un oggetto in un altro tipo in Visual Basic
Tipi di dati
CString
Matrici
Strutture (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Una struttura è una generalizzazione del tipo definito dall'utente (UDT) supportata dalle versioni precedenti di
Visual Basic. Oltre ai campi, le strutture possono esporre proprietà, metodi ed eventi. Una struttura può
implementare una o più interfacce ed è possibile dichiarare i singoli livelli di accesso per ogni campo.
È possibile combinare elementi di dati di tipi diversi per creare una struttura. Una struttura associa uno o più
elementi tra loro e con la struttura stessa. Quando si dichiara una struttura, diventa un tipo di dati composito ed
è possibile dichiarare variabili di quel tipo.
Le strutture sono utili quando si desidera che una singola variabile contenga diverse informazioni correlate. È ad
esempio possibile che si desideri proteggere il nome, l'estensione del telefono e lo stipendio di un dipendente. È
possibile usare diverse variabili per queste informazioni oppure definire una struttura e usarla per una singola
variabile dipendente. Il vantaggio della struttura diventa evidente quando si dispone di molti dipendenti e
pertanto di molte istanze della variabile.
Sezioni correlate
Tipi di dati
Introduce i tipi di dati Visual Basic e ne descrive l'utilizzo.
Tipi di dati
Elenca i tipi di dati elementari forniti da Visual Basic.
Procedura: dichiarare una struttura (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Si inizia una dichiarazione di struttura con l' istruzione Structuree la si termina con l' End Structure istruzione.
Tra queste due istruzioni è necessario dichiarare almeno un elemento. Gli elementi possono essere di qualsiasi
tipo di dati, ma almeno uno deve essere una variabile non condivisa o un evento non condiviso non
personalizzato.
Non è possibile inizializzare alcuno degli elementi della struttura nella dichiarazione della struttura. Quando si
dichiara una variabile come un tipo di struttura, si assegnano valori agli elementi accedendo tramite la variabile.
Per informazioni sulle differenze tra le strutture e le classi, vedere strutture e classi.
A scopo dimostrativo, si consideri una situazione in cui si desidera tenere traccia del nome di un dipendente,
dell'estensione telefonico e dello stipendio. Una struttura consente di eseguire questa operazione in una singola
variabile.
Per dichiarare una struttura
1. Creare le istruzioni iniziali e finali per la struttura.
È possibile specificare il livello di accesso di una struttura utilizzando la parola chiave public, protected,
Friendo private oppure è possibile consentire l'impostazione predefinita di Public .
Il salary campo nell'esempio precedente è Private , il che significa che non è accessibile all'esterno
della struttura, anche dalla classe che lo contiene. Tuttavia, la giveRaise procedura è Public , quindi può
essere chiamata dall'esterno della struttura. Analogamente, è possibile generare l' salaryReviewTime
evento dall'esterno della struttura.
Oltre a variabili, Sub routine ed eventi, è anche possibile definire costanti, Function procedure e
proprietà in una struttura. È possibile designare al massimo una proprietà come proprietà predefinita,
purché accetti almeno un argomento. È possibile gestire un evento con una procedura condivisa Sub .
Per altre informazioni, vedere procedura: dichiarare e chiamare una proprietà predefinita in Visual Basic.
Vedi anche
Tipi di dati
Tipi di dati elementari
Tipi di dati compositi
Tipi di valore e tipi di riferimento
Strutture
Risoluzione dei problemi relativi ai tipi di dati
Variabili di struttura
Strutture e altri elementi di programmazione
Strutture e classi
Tipo di dati definito dall'utente
Variabili di struttura (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Dopo aver creato una struttura, è possibile dichiarare le variabili a livello di procedura e a livello di modulo
come quel tipo. Ad esempio, è possibile creare una struttura che registra le informazioni relative a un sistema di
computer. L'esempio seguente illustra questa operazione.
È ora possibile dichiarare variabili di quel tipo. Questa operazione viene illustrata nella dichiarazione seguente.
NOTE
Nelle classi e nei moduli, le strutture dichiarate con l' istruzione Dim sono predefinite per l'accesso pubblico. Se si vuole che
una struttura sia privata, assicurarsi di dichiararla usando la parola chiave private .
mySystem.cPU = "486"
Dim tooOld As Boolean
If yourSystem.purchaseDate < #1/1/1992# Then tooOld = True
yourSystem = mySystem
Se un elemento della struttura è un tipo di riferimento, ad esempio una String Object matrice, o, viene
copiato il puntatore ai dati. Nell'esempio precedente, se systemInfo era inclusa una variabile oggetto, l'esempio
precedente avrebbe copiato il puntatore da mySystem a yourSystem e una modifica ai dati dell'oggetto tramite
una struttura verrebbe applicata quando si accede tramite l'altra struttura.
Vedi anche
Tipi di dati
Tipi di dati elementari
Tipi di dati compositi
Tipi di valore e tipi di riferimento
Strutture
Risoluzione dei problemi relativi ai tipi di dati
Procedura: Dichiarare una struttura
Strutture e altri elementi di programmazione
Strutture e classi
Istruzione Structure
Strutture e altri elementi di programmazione (Visual
Basic)
05/03/2021 • 4 minutes to read • Edit Online
È possibile utilizzare le strutture insieme a matrici, oggetti e procedure, nonché reciprocamente. Le interazioni
utilizzano la stessa sintassi di questi elementi.
NOTE
Non è possibile inizializzare alcuno degli elementi della struttura nella dichiarazione della struttura. È possibile assegnare
valori solo agli elementi di una variabile dichiarata come tipo di struttura.
Strutture e matrici
Una struttura può contenere una matrice come uno o più dei relativi elementi. Questa condizione è illustrata
nell'esempio seguente.
È possibile accedere ai valori di una matrice all'interno di una struttura nello stesso modo in cui si accede a una
proprietà in un oggetto. Questa condizione è illustrata nell'esempio seguente.
È anche possibile dichiarare una matrice di strutture. Questa condizione è illustrata nell'esempio seguente.
Si seguono le stesse regole per accedere ai componenti di questa architettura di dati. Questa condizione è
illustrata nell'esempio seguente.
ReDim allSystems(5).diskDrives(3)
allSystems(5).CPU = "386SX"
allSystems(5).diskDrives(2) = "100M SCSI"
Strutture e oggetti
Una struttura può contenere un oggetto come uno o più elementi. Questa condizione è illustrata nell'esempio
seguente.
Protected Structure userInput
Public userName As String
Public inputForm As System.Windows.Forms.Form
Public userFileNumber As Integer
End Structure
È consigliabile usare una classe di oggetti specifica in una dichiarazione di questo tipo, anziché Object .
Strutture e procedure
È possibile passare una struttura come argomento di routine. Questa condizione è illustrata nell'esempio
seguente.
Nell'esempio precedente la struttura viene passata per riferimento, che consente alla procedura di modificarne
gli elementi in modo che le modifiche abbiano effetto nel codice chiamante. Se si desidera proteggere una
struttura in base a tale modifica, passarla per valore.
È anche possibile restituire una struttura da una Function routine. Questa condizione è illustrata nell'esempio
seguente.
Vedi anche
Tipi di dati
Tipi di dati elementari
Tipi di dati compositi
Tipi di valore e tipi di riferimento
Strutture
Risoluzione dei problemi relativi ai tipi di dati
Procedura: Dichiarare una struttura
Variabili di struttura
Strutture e classi
Istruzione Structure
Strutture e classi (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Visual Basic unifica la sintassi per strutture e classi, con il risultato che entrambe le entità supportano la maggior
parte delle stesse funzionalità. Tuttavia, esistono anche differenze importanti tra le strutture e le classi.
Le classi hanno il vantaggio di essere tipi di riferimento. il passaggio di un riferimento è più efficiente rispetto al
passaggio di una variabile di struttura con tutti i relativi dati. D'altra parte, le strutture non richiedono
l'allocazione della memoria nell'heap globale.
Poiché non è possibile ereditare da una struttura, le strutture devono essere usate solo per gli oggetti che non
devono essere estesi. Usare le strutture quando l'oggetto che si vuole creare ha una dimensione di istanza
ridotta e prendere in considerazione le caratteristiche di prestazioni delle classi rispetto alle strutture.
Somiglianze
Le strutture e le classi sono simili nei seguenti aspetti:
Entrambi sono tipi di contenitori , ovvero contengono altri tipi come membri.
Entrambi hanno membri, che possono includere costruttori, metodi, proprietà, campi, costanti,
enumerazioni, eventi e gestori eventi. Tuttavia, non confondere questi membri con gli elementi dichiarati
di una struttura.
I membri di entrambi possono avere livelli di accesso personalizzati. Ad esempio, un membro può essere
dichiarato Public e un altro Private .
Entrambi possono implementare interfacce.
Entrambi possono avere costruttori condivisi, con o senza parametri.
Entrambi possono esporre una proprietà predefinita, purché la proprietà accetti almeno un parametro.
Entrambi possono dichiarare e generare eventi ed entrambi possono dichiarare delegati.
Differenze
Le strutture e le classi differiscono dai seguenti elementi:
Le strutture sono tipi valore; le classi sono tipi di riferimento. Una variabile di un tipo di struttura contiene
i dati della struttura, anziché contenere un riferimento ai dati come tipo di classe.
Le strutture usano l'allocazione dello stack; le classi usano l'allocazione heap.
Tutti gli elementi della struttura sono Public per impostazione predefinita. le variabili di classe e le
costanti sono per impostazione predefinita Private , mentre altri membri della classe sono Public per
impostazione predefinita. Questo comportamento per i membri della classe garantisce la compatibilità
con il sistema Visual Basic 6,0 di impostazioni predefinite.
Una struttura deve avere almeno una variabile non condivisa o un elemento evento non condiviso, non
personalizzato; una classe può essere completamente vuota.
Gli elementi della struttura non possono essere dichiarati come Protected . i membri della classe
possono.
Una procedura di struttura è in grado di gestire gli eventi solo se si tratta di una procedura condivisa
Sub e solo tramite l' istruzione AddHandler; qualsiasi routine della classe può gestire gli eventi,
utilizzando la parola chiave Handles o l' AddHandler istruzione. Per altre informazioni, vedere Eventi.
Le dichiarazioni di variabili di struttura non possono specificare inizializzatori o dimensioni iniziali per le
matrici; le dichiarazioni di variabili di classe possono.
Le strutture ereditano in modo implicito dalla System.ValueType classe e non possono ereditare da altri
tipi. le classi possono ereditare da qualsiasi classe o classe diversa da System.ValueType .
Le strutture non sono ereditabili; le classi sono.
Le strutture non vengono mai terminate, quindi il Common Language Runtime (CLR) non chiama mai il
Finalize metodo su una struttura; le classi vengono terminate dalla Garbage Collector (GC), che chiama
Finalize su una classe quando rileva che non sono presenti riferimenti attivi rimanenti.
Una struttura non richiede un costruttore. una classe.
Le strutture possono avere costruttori non condivisi solo se accettano parametri. le classi possono avere
con o senza parametri.
Ogni struttura ha un costruttore pubblico implicito senza parametri. Questo costruttore inizializza tutti gli
elementi dati della struttura sui valori predefiniti. Non è possibile ridefinire questo comportamento.
Istanze e variabili
Poiché le strutture sono tipi di valore, ogni variabile di struttura viene associata in modo permanente a una
singola istanza della struttura. Tuttavia, le classi sono tipi di riferimento e una variabile oggetto può fare
riferimento a diverse istanze di classe in momenti diversi. Questa distinzione influiscono sull'utilizzo di strutture
e classi nei modi seguenti:
Inizializzazione. Una variabile di struttura include implicitamente un'inizializzazione degli elementi
usando il costruttore senza parametri della struttura. Pertanto, Dim s As struct1 equivale a
Dim s As struct1 = New struct1() .
Assegnazione di variabili. Quando si assegna una variabile di struttura a un'altra o si passa un'istanza
della struttura a un argomento di routine, i valori correnti di tutti gli elementi variabili vengono copiati
nella nuova struttura. Quando si assegna una variabile oggetto a un'altra o si passa una variabile oggetto
a una routine, viene copiato solo il puntatore di riferimento.
Assegnazione di Nothing. È possibile assegnare il valore Nothing a una variabile di struttura, ma
l'istanza continua a essere associata alla variabile. È comunque possibile chiamare i relativi metodi e
accedere ai relativi elementi dati, anche se gli elementi variabili vengono reinizializzati dall'assegnazione.
Al contrario, se si imposta una variabile oggetto su, l'associazione viene Nothing annullata da qualsiasi
istanza di classe e non è possibile accedere ai membri tramite la variabile finché non viene assegnata
un'altra istanza.
Più istanze. A una variabile oggetto possono essere assegnate istanze di classe diverse in momenti
diversi e diverse variabili oggetto possono fare riferimento alla stessa istanza della classe nello stesso
momento. Le modifiche apportate ai valori dei membri della classe hanno effetto su tali membri quando
si accede tramite un'altra variabile che punta alla stessa istanza.
Gli elementi della struttura, tuttavia, sono isolati all'interno della propria istanza. Le modifiche apportate
ai valori non vengono riflesse in altre variabili di struttura, neanche in altre istanze della stessa Structure
dichiarazione.
Uguaglianza. I test di uguaglianza di due strutture devono essere eseguiti con un test elemento per
elemento. È possibile confrontare due variabili oggetto utilizzando il Equals metodo. Equals indica se le
due variabili puntano alla stessa istanza.
Vedi anche
Tipi di dati
Tipi di dati compositi
Tipi di valore e tipi di riferimento
Strutture
Risoluzione dei problemi relativi ai tipi di dati
Strutture e altri elementi di programmazione
Oggetti e classi
Tuple (Visual Basic)
05/03/2021 • 20 minutes to read • Edit Online
A partire da Visual Basic 2017, il linguaggio Visual Basic offre supporto incorporato per le tuple che
semplificano la creazione di tuple e l'accesso agli elementi delle tuple. Una tupla è una struttura di dati leggera
con un numero e una sequenza di valori specifici. Quando si crea un'istanza della tupla, si definiscono il numero
e il tipo di dati di ogni valore (o elemento). Ad esempio, una tupla con 2 elementi (o coppia) dispone di due
elementi. Il primo può essere un Boolean valore, mentre il secondo è String . Poiché le tuple semplificano
l'archiviazione di più valori in un singolo oggetto, vengono spesso usati come metodo semplice per restituire
più valori da un metodo.
IMPORTANT
Il supporto della tupla richiede il ValueTuple tipo. Se il .NET Framework 4,7 non è installato, è necessario aggiungere il
pacchetto NuGet System.ValueTuple , disponibile nella raccolta NuGet. Senza questo pacchetto, potrebbe essere
presente un errore di compilazione simile a "il tipo predefinito ' ValueTuple (of,,,)' non è definito né importato".
Per impostazione predefinita, il nome di ogni campo in una tupla è costituito dalla stringa Item insieme alla
posizione in base 1 del campo nella tupla. Per questa tupla con 3 elementi, il campo è Date Item1 , il campo
String è Item2 e il Boolean campo è Item3 . Nell'esempio seguente vengono visualizzati i valori dei campi
della tupla di cui è stata creata un'istanza nella riga di codice precedente
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
$"{If(holiday.Item3, ", a national holiday", String.Empty)}")
' Output: 7/4/2017 12:00:00 AM Is Independence Day, a national holiday
I campi di una tupla Visual Basic sono di lettura/scrittura; Dopo avere creato un'istanza di una tupla, è possibile
modificarne i valori. Nell'esempio seguente vengono modificati due dei tre campi della tupla creata nell'esempio
precedente e viene visualizzato il risultato.
holiday.Item1 = #01/01/2018#
holiday.Item2 = "New Year's Day"
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
$"{If(holiday.Item3, ", a national holiday", String.Empty)}")
' Output: 1/1/2018 12:00:00 AM Is New Year's Day, a national holiday
Poiché gli elementi e le variabili hanno lo stesso nome, il Visual Basic compilatore può dedurre i nomi dei campi,
come illustrato nell'esempio riportato di seguito.
Per abilitare i nomi di elementi di tupla derivati, è necessario definire la versione del compilatore Visual Basic da
usare nel file del progetto di Visual Basic ( * . vbproj):
<PropertyGroup>
<LangVersion>15.3</LangVersion>
</PropertyGroup>
Il numero di versione può essere qualsiasi versione del compilatore Visual Basic a partire da 15,3. Anziché
impostare come hardcoded una versione specifica del compilatore, è anche possibile specificare "più recente"
come valore di LangVersion per la compilazione con la versione più recente del compilatore di Visual Basic
installato nel sistema.
Per ulteriori informazioni, vedere impostazione della versione della lingua Visual Basic.
In alcuni casi, il compilatore Visual Basic non è in grado di dedurre il nome dell'elemento di tupla dal nome del
candidato e il campo tupla può essere usato solo con il nome predefinito, ad esempio, e così Item1 Item2 via.
Sono incluse le seguenti:
Il nome del candidato corrisponde al nome di un membro di tupla, ad esempio Item3 , Rest o
ToString .
Tuple e strutture
Una tupla Visual Basic è un tipo di valore che è un'istanza di uno dei tipi generici System. ValueTuple . Ad
esempio, la holiday tupla definita nell'esempio precedente è un'istanza della ValueTuple<T1,T2,T3> struttura. È
progettato per essere un contenitore leggero per i dati. Poiché la tupla ha lo scopo di semplificare la creazione di
un oggetto con più elementi di dati, mancano alcune delle funzionalità che possono avere una struttura
personalizzata. Tra queste sono incluse:
Membri personalizzati. Non è possibile definire proprietà, metodi o eventi personalizzati per una tupla.
Convalida. Non è possibile convalidare i dati assegnati ai campi.
Immutabilità. Visual Basic tuple sono modificabili. Una struttura personalizzata, invece, consente di
controllare se un'istanza è modificabile o non modificabile.
Se i membri personalizzati, la convalida di proprietà e campi o l'immutabilità sono importanti, è consigliabile
utilizzare l'istruzione Visual Basic Structure per definire un tipo di valore personalizzato.
Una tupla Visual Basic eredita i membri del tipo ValueTuple . Oltre ai relativi campi, includono i metodi
seguenti:
Assegnazione e tuple
Visual Basic supporta l'assegnazione tra tipi di tupla che hanno lo stesso numero di campi. I tipi di campo
possono essere convertiti se si verifica una delle condizioni seguenti:
Il campo di origine e di destinazione sono dello stesso tipo.
Viene definita una conversione verso un tipo di dati più ampio o implicito del tipo di origine nel tipo di
destinazione.
Option Strict è On e viene definita una conversione verso un tipo di dati più piccolo (o esplicito) del
tipo di origine nel tipo di destinazione. Questa conversione può generare un'eccezione se il valore di
origine non è compreso nell'intervallo del tipo di destinazione.
Non sono considerate altre conversioni per le assegnazioni. Esaminiamo i tipi di assegnazioni consentiti tra i tipi
di tupla.
Considerare le variabili usate negli esempi seguenti:
' The number and field types of all these tuples are compatible.
' The only difference Is the field names being used.
Dim unnamed = (42, "The meaning of life")
Dim anonymous = (16, "a perfect square")
Dim named = (Answer:=42, Message:="The meaning of life")
Dim differentNamed = (SecretConstant:=42, Label:="The meaning of life")
Le prime due variabili, unnamed e anonymous , non hanno nomi semantici forniti per i campi. I nomi dei campi
sono i valori predefiniti Item1 e Item2 . Le ultime due variabili named e differentName hanno nomi di campo
semantico. Si noti che queste due tuple presentano nomi diversi per i campi.
Tutte e quattro le tuple hanno lo stesso numero di campi (definito "grado") e i tipi di tali campi sono identici.
Pertanto, tutte queste assegnazioni funzionano:
' Despite the assignment, named still has fields that can be referred to as 'answer' and 'message'.
Console.WriteLine($"{named.Answer}, {named.Message}")
' Output: 42, The meaning of life
Si noti che non sono assegnati i nomi delle tuple. I valori dei campi vengono assegnati seguendo l'ordine dei
campi nella tupla.
Si noti infine che è possibile assegnare la named tupla alla conversion tupla, anche se il primo campo di named
è un Integer e il primo campo di conversion è Long . Questa assegnazione ha esito positivo perché Integer
la conversione di un oggetto in è una conversione verso un tipo di oggetto più Long ampio
' Assign an (Integer, String) tuple to a (Long, String) tuple (using implicit conversion).
Dim conversion As (Long, String) = named
Console.WriteLine($"{conversion.Item1} ({conversion.Item1.GetType().Name}), " +
$"{conversion.Item2} ({conversion.Item2.GetType().Name})")
' Output: 42 (Int64), The meaning of life (String)
Le tuple con numeri diversi di campi non possono essere assegnate:
Se si esegue il wrapping della chiamata al Int32.TryParse metodo nel metodo personalizzato, è possibile
restituire una tupla dall'operazione di analisi. Nell'esempio seguente viene NumericLibrary.ParseInteger
chiamato il Int32.TryParse metodo e viene restituita una tupla denominata con due elementi.
Imports System.Globalization
Module Example
Sub Main()
Dim cityInfo = (name:="New York", area:=468.5, population:=8_550_405)
Console.WriteLine($"{cityInfo}, type {cityInfo.GetType().Name}")
' Convert the .NET tuple back to a Visual Basic tuple and ensure they are the same.
Dim cityInfo2 = TupleExtensions.ToValueTuple(cityInfoT)
Console.WriteLine($"{cityInfo2}, type {cityInfo2.GetType().Name}")
Console.WriteLine($"{NameOf(cityInfo)} = {NameOf(cityInfo2)}: {cityInfo.Equals(cityInfo2)}")
Console.ReadLine()
End Sub
End Module
' The example displays the following output:
' (New York, 468.5, 8550405), type ValueTuple`3
' (New York, 468.5, 8550405), type Tuple`3
' (New York, 468.5, 8550405), type ValueTuple`3
' cityInfo = cityInfo2 : True
Vedi anche
Riferimenti al linguaggio Visual Basic
Utilizzo efficiente dei tipi di dati (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Alle variabili e alle variabili non dichiarate dichiarate senza un tipo di dati viene assegnato il Object tipo di dati.
In questo modo è facile scrivere rapidamente i programmi, ma è possibile che vengano eseguiti più lentamente.
Tipizzazione forte
Specificare i tipi di dati per tutte le variabili è noto come tipizzazione forte. L'uso di tipizzazione forte presenta
diversi vantaggi:
Abilita il supporto IntelliSense per le variabili. In questo modo è possibile visualizzare le relative proprietà
e altri membri durante la digitazione nel codice.
Sfrutta i vantaggi del controllo dei tipi del compilatore. Questa operazione intercetta le istruzioni che
possono avere esito negativo in fase di esecuzione a causa di errori come l'overflow. Rileva inoltre le
chiamate ai metodi su oggetti che non li supportano.
Questo comporta un'esecuzione più rapida del codice.
Private x As Double
Protected s As String
Conversione di caratteri
Le AscW ChrW funzioni e operano in Unicode. È consigliabile usarli in modo preferenziale per Asc e Chr , che
devono essere convertiti all'interno e all'esterno di Unicode.
Vedi anche
Asc
AscW
Chr
ChrW
Tipi di dati
Tipi di dati numerici
Dichiarazione di variabile
Utilizzo di IntelliSense
Risoluzione dei problemi relativi ai tipi di dati (Visual
Basic)
05/03/2021 • 14 minutes to read • Edit Online
In questa pagina sono elencati alcuni problemi comuni che possono verificarsi quando si eseguono operazioni
sui tipi di dati intrinseci.
P ER C O N F RO N TA RE L E Q UA N T ITÀ A VIRGO L A M O B IL E
1. calcolare il valore assoluto della differenza usando il Abs metodo della Math classe nello System spazio dei nomi.
2. determinare una differenza massima accettabile, in modo che sia possibile considerare le due quantità come uguali per scopi
pratici se la differenza non è maggiore.
3. confrontare il valore assoluto della differenza con la differenza accettabile.
Nell'esempio seguente viene illustrato il confronto errato e corretto di due Double valori.
Nell'esempio precedente viene utilizzato il ToString metodo della Double struttura in modo che sia possibile
specificare una precisione maggiore rispetto a quella CStr utilizzata dalla parola chiave. Il valore predefinito è
15 cifre, ma il formato "G17" lo estende a 17 cifre.
Nell'esempio seguente viene illustrata la potenziale imprecisione degli operandi a virgola mobile.
Nell'esempio precedente viene utilizzato il ToString metodo della Double struttura in modo che sia possibile
specificare una precisione maggiore rispetto a quella CStr utilizzata dalla parola chiave. Il valore predefinito è
15 cifre, ma il formato "G17" lo estende a 17 cifre.
Poiché zeroPointTwo è Double , il relativo valore per 0,2 è una frazione binaria ripetuta in modo infinito con un
valore archiviato di 0.20000000000000001. La divisione di 2,0 per questa quantità restituisce
9.9999999999999995 con un resto di 0.19999999999999991.
Nell'espressione per decimalRemainder , il carattere di tipo letterale D impone entrambi gli operandi a Decimal
e 0,2 presenta una rappresentazione precisa. Pertanto Mod , l'operatore restituisce il resto previsto di 0,0.
Si noti che non è sufficiente dichiarare decimalRemainder come Decimal . È inoltre necessario forzare i valori
letterali a Decimal oppure utilizzarli per Double impostazione predefinita e decimalRemainder ricevere lo stesso
valore non accurato di doubleRemainder .
Nell'esempio seguente vengono illustrate le assegnazioni non riuscite e corrette di un valore letterale a una
Char variabile.
Esiste sempre un rischio nell'utilizzo di conversioni verso un tipo di caratteri più piccolo, perché possono avere
esito negativo in fase di esecuzione. Ad esempio, una conversione da String a Char può avere esito negativo
se il String valore contiene più di un carattere. Pertanto, è preferibile programmare di utilizzare il C carattere
tipo.
Vedi anche
Tipi di dati
Caratteri tipo
Tipi di valore e tipi di riferimento
Conversioni di tipi in Visual Basic
Tipi di dati
CString
Utilizzo efficiente dei tipi di dati
Elementi dichiarati in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Sezioni correlate
Struttura del programma e convenzioni del codice
Indicazioni per rendere il codice più facile da leggere, comprendere e gestire.
Istruzioni
Vengono descritte le istruzioni che consentono di denominare e definire procedure, variabili, matrici e costanti.
Contesti delle dichiarazioni e livelli di accesso predefiniti
Sono indicati i tipi di elementi dichiarati, ognuno con la relativa istruzione di dichiarazione, il contesto in cui si
può effettuare la dichiarazione e il livello di accesso predefinito.
Delegati (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
I delegati sono oggetti che fanno riferimento ai metodi. Vengono a volte descritti come puntatori a funzione
indipendenti dai tipi poiché sono simili ai puntatori a funzione usati in altri linguaggi di programmazione.
Tuttavia, a differenza dei puntatori a funzione, i delegati Visual Basic sono un tipo di riferimento basato sulla
classe System.Delegate . I delegati possono fare riferimento sia a metodi condivisi, ovvero metodi che è
possibile chiamare senza una specifica istanza di una classe, sia a metodi di istanza.
Delegati ed eventi
I delegati sono utili nelle situazioni in cui è necessario un intermediario tra una routine chiamante e la routine
chiamata. Ad esempio, può essere necessario che un oggetto generatore di eventi sia in grado di chiamare
gestori di eventi differenti in circostanze diverse. Purtroppo, l'oggetto che genera gli eventi non può sapere in
anticipo quale gestore eventi gestirà uno specifico evento. Visual Basic consente di associare dinamicamente i
gestori eventi agli eventi creando un delegato quando si usa l' AddHandler istruzione. In fase di esecuzione, il
delegato inoltrerà le chiamate al gestore eventi appropriato.
Sebbene sia possibile creare delegati personalizzati, nella maggior parte dei casi Visual Basic crea il delegato e si
occupa dei dettagli. Un'istruzione Event , ad esempio, consente di definire implicitamente una classe delegata
denominata <EventName>EventHandler come classe nidificata della classe contenente l'istruzione Event e con la
stessa firma dell'evento. L'istruzione AddressOf crea in modo implicito un'istanza di un delegato che fa
riferimento a una routine specifica. Le due righe di codice seguenti sono equivalenti. Nella prima riga è possibile
osservare la creazione esplicita di un'istanza di EventHandler , con un riferimento al metodo Button1_Click
inviato come argomento. La seconda riga rappresenta un modo più pratico di eseguire la stessa operazione.
È possibile usare la sintassi abbreviata per creare delegati ogni volta che il compilatore è in grado di
determinare il tipo del delegato in base al contesto.
Questa operazione si rivela utile quando si vogliono inviare più eventi allo stesso gestore.
Nell'esempio seguente sono illustrate sia l'espressione AddressOf che l'espressione lambda usate per
specificare il riferimento per un delegato.
Module Module1
Sub Main()
' Create an instance of InOrderClass and assign values to the properties.
' InOrderClass method ShowInOrder displays the numbers in ascending
' or descending order, depending on the comparison method you specify.
Dim inOrder As New InOrderClass
inOrder.Num1 = 5
inOrder.Num2 = 4
' Use AddressOf to send a reference to the comparison function you want
' to use.
inOrder.ShowInOrder(AddressOf GreaterThan)
inOrder.ShowInOrder(AddressOf LessThan)
Class InOrderClass
' Define the delegate function for the comparisons.
Delegate Function CompareNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean
' Display properties in ascending or descending order.
Sub ShowInOrder(ByVal compare As CompareNumbers)
If compare(_num1, _num2) Then
Console.WriteLine(_num1 & " " & _num2)
Else
Console.WriteLine(_num2 & " " & _num1)
End If
End Sub
La firma della funzione deve corrispondere a quella del tipo delegato. Per ulteriori informazioni sulle espressioni
lambda, vedere espressioni lambda. Per altri esempi di espressioni lambda e assegnazioni di AddressOf a
delegati, vedere Conversione di tipo relaxed del delegato.
Argomenti correlati
T ITO LO DESC RIZ IO N E
Procedura: richiamare un metodo delegato Viene offerto un esempio che mostra come associare un
metodo a un delegato e quindi richiamare tale metodo
tramite il delegato.
Procedura: passare una routine a un'altra routine in Visual Viene illustrato come usare i delegati per passare una
Basic routine a un'altra routine.
Conversione di tipo relaxed del delegato Viene descritto come assegnare subroutine e funzioni a
delegati o gestori anche quando le relative firme non sono
identiche.
Il compilatore Visual Basic esegue un processo chiamato binding quando un oggetto viene assegnato a una
variabile oggetto. Un oggetto è ad associazione anticipata quando viene assegnato a una variabile di un tipo
object specifico. Gli oggetti ad associazione anticipata consentono al compilatore di allocare memoria ed
effettuare altre ottimizzazioni prima dell'esecuzione di un'applicazione. Il frammento di codice seguente, ad
esempio, dichiara una variabile di tipo FileStream:
' To use this example, you must have Microsoft Excel installed on your computer.
' Compile with Option Strict Off to allow late binding.
Sub TestLateBinding()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
xlApp = CreateObject("Excel.Application")
' Late bind an instance of an Excel workbook.
xlBook = xlApp.Workbooks.Add
' Late bind an instance of an Excel worksheet.
xlSheet = xlBook.Worksheets(1)
xlSheet.Activate()
' Show the application.
xlSheet.Application.Visible = True
' Place some text in the second row of the sheet.
xlSheet.Cells(2, 2) = "This is column B row 2"
End Sub
Vedi anche
CreateObject
Durata degli oggetti: come creare e distruggere oggetti
Object Data Type
Tipi di errore (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
In Visual Basic gli errori rientrano in una delle tre categorie seguenti: errori di sintassi, errori di run-time ed
errori logici.
Errori di sintassi
Gli errori di sintassi sono quelli visualizzati durante la scrittura del codice. Se si usa Visual Studio, Visual Basic
controlla il codice durante la digitazione nella finestra dell' Editor del codice e avvisa l'utente se si commette
un errore, ad esempio l'ortografia di una parola o l'uso errato di un elemento di linguaggio. Se si esegue la
compilazione dalla riga di comando, Visual Basic Visualizza un errore del compilatore con informazioni
sull'errore di sintassi. Gli errori di sintassi sono il tipo più comune di errori. È possibile correggerli facilmente
nell'ambiente di codifica non appena si verificano.
NOTE
L' Option Explicit istruzione è un modo per evitare errori di sintassi. Impone di dichiarare in anticipo tutte le variabili
da usare nell'applicazione. Pertanto, quando tali variabili vengono utilizzate nel codice, eventuali errori tipografici vengono
rilevati immediatamente e possono essere corretti.
Errori Run-Time
Gli errori di run-time sono quelli visualizzati solo dopo la compilazione e l'esecuzione del codice. Queste
implicano il codice che potrebbe sembrare corretto in quanto non presenta errori di sintassi, ma che non verrà
eseguito. Ad esempio, è possibile scrivere correttamente una riga di codice per aprire un file. Tuttavia, se il file
non esiste, l'applicazione non è in grado di aprire il file e viene generata un'eccezione. È possibile correggere la
maggior parte degli errori di run-time riscrivendo il codice difettoso o utilizzando la gestione delle eccezioni,
quindi ricompilando e rieseguendo il codice.
Errori di logica
Gli errori logici sono quelli che vengono visualizzati una volta che l'applicazione è in uso. Spesso si tratta di
presupposti difettosi creati dallo sviluppatore o risultati indesiderati o imprevisti in risposta alle azioni
dell'utente. Una chiave tipizzata in modo errato, ad esempio, può fornire informazioni non corrette a un metodo
oppure si presuppone che un valore valido venga sempre fornito a un metodo in caso contrario. Anche se gli
errori logici possono essere gestiti tramite la gestione delle eccezioni (ad esempio, verificando se un argomento
è Nothing e generando un ArgumentNullException ), in genere devono essere risolti correggendo l'errore nella
logica e ricompilando l'applicazione.
Vedi anche
Istruzione Try...Catch...Finally
Nozioni di base sul debugger
Eventi (Visual Basic)
05/03/2021 • 12 minutes to read • Edit Online
Sebbene sia possibile visualizzare un progetto di Visual Studio come una serie di procedure eseguite in una
sequenza, in realtà, la maggior parte dei programmi è basata sugli eventi, ovvero il flusso di esecuzione è
determinato da occorrenze esterne denominate eventi.
Un evento è un segnale che informa un'applicazione che si è verificato qualcosa di importante. Ad esempio,
quando un utente fa clic su un controllo in un form, il form può generare un evento Click e chiamare una
routine che gestisce l'evento. Gli eventi consentono anche le comunicazioni tra attività separate. Si supponga, ad
esempio, che un'applicazione esegua un'attività di ordinamento separatamente dall'applicazione principale. Se
un utente annulla l'ordinamento, l'applicazione può inviare un evento di annullamento per segnalare la
necessità di interrompere il processo di ordinamento.
Generazione di eventi
Un evento può essere paragonato a un messaggio che annuncia che si è verificato qualcosa di importante. L'atto
di trasmettere il messaggio viene definito generazione dell'evento. In Visual Basic si generano eventi con l'
RaiseEvent istruzione, come nell'esempio seguente:
RaiseEvent AnEvent(EventNumber)
Gli eventi devono essere generati nell'ambito della classe, del modulo o della struttura in cui sono dichiarati. Ad
esempio, una classe derivata non può generare eventi ereditati da una classe di base.
Mittenti di eventi
Qualsiasi oggetto in grado di generare un evento è un mittente di eventi, noto anche come origine di eventi. I
form, i controlli e gli oggetti definiti dall'utente sono alcuni esempi di mittenti di eventi.
Gestori di eventi
I gestori eventi sono le routine chiamate quando si verifica un evento corrispondente. È possibile usare qualsiasi
subroutine valida con una firma corrispondente come gestore eventi. Non è possibile usare una funzione come
gestore eventi, tuttavia, perché non può restituire un valore all'origine di eventi.
Visual Basic utilizza una convenzione di denominazione standard per i gestori eventi che combina il nome del
mittente dell'evento, un carattere di sottolineatura e il nome dell'evento. Ad esempio, il nome dell'evento Click
per un pulsante denominato button1 sarebbe Sub button1_Click .
NOTE
È consigliabile usare questa convenzione di denominazione durante la definizione dei gestori per gli eventi personalizzati,
ma non è obbligatorio. Si può usare qualsiasi nome di subroutine valido.
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
L'istruzione WithEvents e la clausola Handles rappresentano spesso la scelta migliore per i gestori eventi,
perché la sintassi dichiarativa che usano semplifica la scrittura del codice, la lettura e il debug per la gestione
degli eventi. Tenere presenti, tuttavia, le limitazioni seguenti per l'uso delle variabili WithEvents :
Non è possibile usare una variabile WithEvents come variabile oggetto, ovvero non è possibile
dichiararla come Object , ma è necessario specificare il nome della classe quando si dichiara la variabile.
Poiché gli eventi condivisi non sono associati a istanze di classe, non è possibile usare WithEvents per
gestire gli eventi condivisi in modo dichiarativo. In modo analogo, non è possibile usare WithEvents o
Handles per gestire gli eventi da Structure . In entrambi i casi, è possibile usare l'istruzione AddHandler
per gestire tali eventi.
Non è possibile creare matrici di variabili WithEvents .
Le variabili WithEvents consentono a un unico gestore eventi di gestire uno o più tipi di evento oppure a uno o
più gestori eventi di gestire lo stesso tipo di evento.
Anche se la clausola Handles rappresenta la modalità standard per associare un evento a un gestore eventi, è
limitata all'associazione di eventi a gestori eventi in fase di compilazione.
In alcuni casi, ad esempio con gli eventi associati a form o controlli, Visual Basic estrae automaticamente un
gestore eventi vuoto e lo associa a un evento. Ad esempio, quando si fa doppio clic su un pulsante di comando
in un form in modalità progettazione, Visual Basic crea un gestore eventi vuoto e una WithEvents variabile per il
pulsante di comando, come nel codice seguente:
AddHandler e RemoveHandler
L'istruzione AddHandler è simile alla clausola Handles , perché entrambe consentono di specificare un gestore
eventi. Tuttavia, l'uso di AddHandler con RemoveHandler offre una maggiore flessibilità rispetto alla clausola
Handles , perché consente di aggiungere, rimuovere e modificare dinamicamente il gestore eventi associato a
un evento. Per gestire eventi condivisi o eventi da una struttura, è necessario usare AddHandler .
AddHandler accetta due argomenti: il nome di un evento da un mittente di eventi, ad esempio un controllo e
un'espressione che restituisce un delegato. Non è necessario specificare in modo esplicito la classe delegata
quando si usa AddHandler , perché l'istruzione AddressOf restituisce sempre un riferimento al delegato.
L'esempio seguente associa un gestore eventi a un evento generato da un oggetto:
RemoveHandler , che disconnette un evento da un gestore eventi, usa la stessa sintassi di AddHandler . Ad
esempio:
Nell'esempio seguente un gestore eventi viene associato a un evento e l'evento viene generato. Il gestore eventi
intercetta l'evento e visualizza un messaggio.
Il primo gestore eventi viene quindi rimosso e all'evento viene associato un diverso gestore eventi. Quando
l'evento viene generato di nuovo, viene visualizzato un messaggio diverso.
Infine, il secondo gestore eventi viene rimosso e viene generato l'evento per una terza volta. Dato che all'evento
non è più associato un gestore eventi, non viene eseguita alcuna azione.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
End Module
Procedura dettagliata: dichiarazione e generazione di eventi Descrizione dettagliata della procedura per dichiarare e
generare eventi per una classe.
Procedura dettagliata: gestione di eventi Illustra come scrivere una routine di gestore eventi.
Procedura: dichiarare eventi personalizzati per evitare il Illustra come definire un evento personalizzato che consente
blocco la chiamata asincrona dei gestori eventi.
Procedura: dichiarare eventi personalizzati per proteggere la Illustra come definire un evento personalizzato che usa la
memoria memoria solo quando viene gestito l'evento.
Risoluzione dei problemi relativi ai gestori eventi ereditati in Elenca i problemi comuni che si verificano con i gestori eventi
Visual Basic nei componenti ereditati.
Creazione di gestori eventi in Windows Form Descrive come usare gli eventi associati agli oggetti di
Windows Form.
Le interfacce definiscono le proprietà, i metodi e gli eventi che le classi possono implementare. Le interfacce
consentono di definire funzionalità come piccoli gruppi di proprietà, metodi ed eventi strettamente correlati fra
loro. In questo modo si riducono i problemi di compatibilità, grazie alla possibilità di sviluppare implementazioni
migliorate per le interfacce senza compromettere il codice esistente. È possibile aggiungere nuove funzionalità
in qualsiasi momento, sviluppando interfacce e implementazioni aggiuntive.
Le interfacce offrono anche altri vantaggi rispetto all'ereditarietà di classe:
Sono più adatte a situazioni in cui l'applicazione richiede molti tipi di oggetti anche non correlati per
fornire determinate funzionalità.
Sono più flessibili delle classi base perché consentono di definire un'unica implementazione in grado di
implementare più interfacce.
Sono più adatte nelle situazioni in cui non è necessario ereditare l'implementazione da una classe base.
Sono utili quando non è possibile usare l'ereditarietà di classe. Le strutture, ad esempio, non possono
ereditare dalle classi, ma possono implementare interfacce.
Dichiarazione di interfacce
Le definizioni di interfaccia sono racchiuse tra istruzioni Interface e End Interface . Subito dopo l'istruzione
Interface è possibile aggiungere un'istruzione Inherits facoltativa in cui sono elencate una o più interfacce
ereditate. Le istruzioni Inherits devono precedere qualsiasi altra istruzione della dichiarazione, ad eccezione
dei commenti. Le restanti istruzioni della definizione di interfaccia dovrebbero essere istruzioni Event , Sub ,
Function , Property , Interface , Class , Structure e Enum . Le interfacce non possono contenere codice di
implementazione o istruzioni ad esso associate, come End Sub o End Property .
Per impostazione predefinita, in uno spazio dei nomi le istruzioni di interfaccia sono Friend , ma possono anche
essere dichiarate in modo esplicito come Public o Friend . Per impostazione predefinita, le interfacce definite
all'interno di classi, moduli, interfacce e strutture sono Public , ma possono anche essere dichiarate in modo
esplicito come Public , Friend , Protected o Private .
NOTE
La parola chiave Shadows può essere applicata a tutti i membri dell'interfaccia. La parola chiave Overloads può essere
applicata alle istruzioni Sub , Function e Property dichiarate in una definizione di interfaccia. Inoltre, le istruzioni
Property possono includere il modificatore Default , ReadOnly o WriteOnly . Non sono consentiti altri modificatori,
come Public , Private , Friend , Protected , Shared , Overrides , MustOverride o Overridable . Per altre
informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.
Il codice riportato di seguito, ad esempio, consente di definire un'interfaccia con una funzione, una proprietà e
un evento.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
Implementazione di interfacce
La parola riservata Visual Basic Implements viene usata in due modi. L'istruzione Implements indica che una
classe o una struttura implementa un'interfaccia. La parola chiave Implements indica che un membro di classe o
di struttura implementa un membro di interfaccia specifico.
Istruzione Implements
Se una classe o una struttura implementa una o più interfacce, deve includere l'istruzione Implements
immediatamente dopo l'istruzione Class o Structure . L'istruzione Implements richiede un elenco separato da
virgole di interfacce implementate da una classe. La classe o la struttura deve implementare tutti i membri di
interfaccia mediante la parola chiave Implements .
Parola chiave Implements
La parola chiave Implements richiede un elenco separato da virgole di membri di interfaccia da implementare. In
genere viene specificato un solo membro di interfaccia, anche se è possibile specificarne diversi. La specifica di
un membro di interfaccia è composta dal nome dell'interfaccia, che è necessario includere in un'istruzione
Implements all'interno della classe, seguito da un punto, quindi dal nome della funzione, della proprietà o
dell'evento da implementare. Il nome di un membro che implementa un membro di interfaccia può usare
qualsiasi identificatore valido e non è limitato alla InterfaceName_MethodName convenzione usata nelle versioni
precedenti di Visual Basic.
Il codice seguente, ad esempio, illustra come dichiarare una subroutine denominata Sub1 che implementa un
metodo di un'interfaccia:
Class Class1
Implements interfaceclass.interface2
È necessario che i tipi di parametro e i tipi restituiti del membro che esegue l'implementazione corrispondano
alla proprietà dell'interfaccia o alla dichiarazione del membro nell'interfaccia. Per implementare un elemento di
un'interfaccia in genere si usa un membro con lo stesso nome dell'interfaccia, come illustrato nell'esempio
precedente.
Per dichiarare l'implementazione di un metodo di interfaccia è possibile usare qualsiasi attributo valido per le
dichiarazioni dei metodi di istanza, tra cui Overloads , Overrides , Overridable , Public , Private , Protected ,
Friend , Protected Friend , MustOverride , Default e Static . L'attributo Shared non è valido in quanto
definisce una classe anziché un metodo di istanza.
Usando Implements è possibile scrivere un unico metodo che implementa più metodi definiti in un'interfaccia,
come nell'esempio seguente:
Class Class2
Implements I1, I2
Per implementare un membro di interfaccia, è possibile usare un membro privato. Quando un membro privato
implementa un membro di un'interfaccia, diventa disponibile tramite l'interfaccia anche se non è disponibile
direttamente sulle variabili oggetto della classe.
Esempi di implementazione dell'interfaccia
È necessario che le classi che implementano un'interfaccia ne implementino tutte le proprietà, i metodi e gli
eventi.
L'esempio seguente definisce due interfacce. La seconda interfaccia, Interface2 , eredita Interface1 e definisce
una proprietà e un metodo aggiuntivi.
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
È possibile implementare una proprietà ReadOnly usando una proprietà ReadWrite (in altri termini, non è
necessario dichiararla ReadOnly nella classe di implementazione). L'implementazione di un'interfaccia consente
di implementare almeno i membri dichiarati dall'interfaccia, ma è possibile offrire maggiori funzionalità, ad
esempio rendendo la proprietà accessibile in scrittura.
Argomenti correlati
T ITO LO DESC RIZ IO N E
Procedura dettagliata: Creazione e implementazione di Fornisce una procedura dettagliata che illustra il processo di
interfacce definizione e implementazione di interfacce personalizzate.
NOTE
Questa procedura dettagliata non fornisce informazioni su come creare un'interfaccia utente.
NOTE
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero
essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi
elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Implementazione
È possibile notare che la sintassi utilizzata per dichiarare i membri di interfaccia è diversa dalla sintassi utilizzata
per dichiarare i membri della classe. Questa differenza riflette il fatto che le interfacce non possono contenere
codice di implementazione.
Per implementare l'interfaccia
1. Aggiungere una classe denominata aggiungendo ImplementationClass l'istruzione seguente a Module1 ,
dopo l' End Interface istruzione, ma prima dell' End Module istruzione, quindi premendo INVIO:
Class ImplementationClass
Se si lavora all'interno dell'Integrated Development Environment, l' editor di codice fornisce un'
End Class istruzione corrispondente quando si preme INVIO.
Implements TestInterface
Se elencato separatamente da altri elementi all'inizio di una classe o di una struttura, l' Implements
istruzione indica che la classe o la struttura implementa un'interfaccia.
Se si lavora all'interno dell'Integrated Development Environment, l' editor di codice implementa i
membri della classe richiesti da TestInterface quando si preme INVIO ed è possibile ignorare il
passaggio successivo.
3. Se non si lavora all'interno del Integrated Development Environment, è necessario implementare tutti i
membri dell'interfaccia MyInterface . Aggiungere il codice seguente a ImplementationClass per
implementare Event1 , Method1 e Prop1 :
Return pval
pval = value
Dichiarando testInstance come WithEvents , la Form1 classe è in grado di gestire gli eventi.
3. Aggiungere il gestore eventi seguente alla Form1 classe per gestire gli eventi generati da testInstance :
4. Aggiungere una subroutine denominata Test alla Form1 classe per testare la classe di implementazione:
Sub Test()
' Create an instance of the class.
Dim T As New ImplementationClass
' Assign the class instance to the interface.
' Calls to the interface members are
' executed through the class instance.
testInstance = T
' Set a property.
testInstance.Prop1 = 9
' Read the property.
MsgBox("Prop1 was set to " & testInstance.Prop1)
' Test the method and raise an event.
testInstance.Method1(5)
End Sub
La Test stored procedure crea un'istanza della classe che implementa MyInterface , assegna tale istanza
al testInstance campo, imposta una proprietà ed esegue un metodo tramite l'interfaccia.
5. Aggiungere il codice per chiamare la Test procedura dalla Form1 Load procedura del form di avvio:
6. Eseguire la Test procedura premendo F5. Viene visualizzato il messaggio "Prop1 è stato impostato su
9". Dopo aver fatto clic su OK, viene visualizzato il messaggio "il parametro X per Method1 è 5". Fare clic
su OK e viene visualizzato il messaggio "il gestore eventi ha rilevato l'evento".
Vedi anche
Istruzione Implements
Interfacce
Istruzione Interface
Istruzione Event
LINQ in Visual Basic
05/03/2021 • 3 minutes to read • Edit Online
In questa sezione vengono fornite panoramiche, esempi e informazioni complementari che consentono di
comprendere e utilizzare Visual Basic e Language-Integrated query (LINQ).
Vedi anche
LINQ (Language-Integrated Query)
Cenni preliminari su LINQ to XML in Visual Basic
Cenni preliminari su LINQ to DataSet
LINQ to SQL
Oggetti e classi in Visual Basic
05/03/2021 • 24 minutes to read • Edit Online
Un oggetto è una combinazione di codice e dati che è possibile considerare come singola unità. Un oggetto può
essere una parte di un'applicazione, ad esempio un controllo o un form. Anche un'intera applicazione può essere
un oggetto.
Quando si crea un'applicazione in Visual Basic, si utilizzano costantemente gli oggetti. È possibile utilizzare gli
oggetti forniti da Visual Basic, ad esempio controlli, form e oggetti di accesso ai dati. È anche possibile usare
oggetti di altre applicazioni all'interno dell'applicazione Visual Basic. È inoltre possibile creare oggetti
personalizzati e definire per essi proprietà e metodi aggiuntivi. Per i programmi, gli oggetti svolgono la stessa
funzione dei blocchi predefiniti. Consentono infatti di scrivere un pezzo di codice una sola volta e di riutilizzarlo
quanto necessario.
Questo argomento fornisce informazioni dettagliate sugli oggetti.
Oggetti e classi
Ogni oggetto in Visual Basic è definito da una classe. che ne descrive le variabili, le proprietà, le routine e gli
eventi. Gli oggetti sono istanze di classi. Dopo aver definito una classe, sarà possibile creare tutti gli oggetti
necessari.
Per comprendere la relazione esistente tra un oggetto e la classe di appartenenza, si pensi alla relazione tra gli
stampi per biscotti e i biscotti. La classe è lo stampo che definisce le caratteristiche di ogni biscotto, ad esempio
le dimensioni e la forma. La classe viene usata per creare oggetti. Gli oggetti sono i biscotti.
È necessario creare un oggetto prima di poter accedere ai relativi membri, ad eccezione dei Shared membri a
cui è possibile accedere senza un oggetto della classe.
Creare un oggetto da una classe
1. Determinare da quale classe si desidera creare un oggetto o definire una classe personalizzata. Ad
esempio:
2. Scrivere un'istruzione Dim per creare una variabile a cui assegnare un'istanza di una classe. La variabile
dovrebbe essere del tipo della classe desiderata.
3. Aggiungere la parola chiave New per inizializzare la variabile su una nuova istanza della classe.
nextCustomer.AccountNumber = lastAccountNumber + 1
NOTE
Quando possibile, è necessario dichiarare che la variabile appartiene al tipo classe a cui si vuole assegnarla. Questa
operazione è definita associazione anticipata. Se il tipo di classe non è noto in fase di compilazione, è possibile richiamare
l'associazione tardiva dichiarando che la variabile è del tipo di dati Object. Questo tipo di associazione, tuttavia, può
determinare un rallentamento delle prestazioni e limitare l'accesso ai membri dell'oggetto in fase di esecuzione. Per altre
informazioni, vedere Object Variable Declaration (Dichiarazione di variabili oggetto).
Istanze multiple
Gli oggetti creati da una classe sono spesso identici. Una volta definiti come singoli oggetti, è comunque
possibile modificarne le variabili e le proprietà indipendentemente dalle altre istanze. Se, ad esempio, si
aggiungono tre caselle di controllo a un form, ogni oggetto casella di controllo è un'istanza della classe
CheckBox. I singoli oggetti CheckBox condividono un set di caratteristiche e funzionalità, ad esempio proprietà,
variabili, routine ed eventi, definito dalla classe. Ognuno di essi, tuttavia, ha un proprio nome, può essere
abilitato e disabilitato separatamente e può essere posizionato in un punto diverso del form.
Membri di oggetti
Un oggetto è un elemento di un'applicazione che rappresenta un'istanza di una classe. I campi, le proprietà, i
metodi e gli eventi sono i blocchi predefiniti degli oggetti e ne costituiscono i membri.
Accesso ai membri
Per accedere a un membro di un oggetto, è necessario specificare il nome della variabile oggetto, un punto ( . )
e il nome del membro, nell'ordine indicato. Nell'esempio seguente viene impostata la proprietà Text di un
oggetto Label.
TIP
Mantieni sempre i campi non costanti privati. Quando si desidera renderla pubblica, utilizzare invece una proprietà.
Metodi
Un metodo è un'azione che può essere eseguita da un oggetto. Ad esempio, Add è un metodo dell'oggetto
ComboBox che aggiunge una nuova voce in una casella combinata.
Nell'esempio seguente viene illustrato il metodo Start di un oggetto Timer.
2. Nell'istruzione che accede al membro, seguire il nome della variabile oggetto con l' operatore di accesso
ai membri ( . ) e quindi il nome del membro.
secondForm.Show()
In alternativa, se è già stato creato un oggetto a partire dalla classe, è possibile accedere a un membro
Shared tramite la variabile dell'oggetto.
NOTE
Quando si applica un modificatore Shared a un membro di una classe, il modificatore viene associato alla classe stessa
anziché a una particolare istanza di quest'ultima. L'accesso al membro avviene direttamente tramite il nome della classe,
nello stesso modo in cui si accede ai membri del modulo.
Le classi e i moduli usano inoltre ambiti diversi per i relativi membri. I membri definiti di una classe vengono
dichiarati nell'ambito di una specifica istanza di tale classe ed esistono solo per la durata dell'oggetto. Per
accedere ai membri di una classe dall'esterno di quest'ultima, è necessario usare nomi completi nel formato
Oggetto.Membro.
D'altra parte, i membri dichiarati all'interno di un modulo sono accessibili pubblicamente per impostazione
predefinita e ad essi può accedere qualsiasi codice che abbia accesso al modulo. Questo significa che le variabili
presenti in un modulo standard sono effettivamente variabili globali poiché sono visibili da qualsiasi punto del
progetto ed esistono per la durata del programma.
Nell'esempio precedente, la prima istruzione Dim dichiara una variabile oggetto di tipo TimeZone e assegna alla
variabile un oggetto TimeZone restituito dalla proprietà CurrentTimeZone.
Verificare che l'ultima riga di codice della classe sia seguita da un'istruzione End Class . Per impostazione
predefinita, quando si immette un'istruzione Class l'ambiente di sviluppo integrato (IDE) genera
automaticamente un'istruzione End Class .
2. Aggiungere un'istruzione Inherits subito dopo l'istruzione Class . Specificare la classe dalla quale deriva
la nuova classe.
Inherits System.Windows.Forms.Button
Se si crea un oggetto dalla ReversibleButton classe, può accedere a tutti i membri della Button classe,
nonché al ReverseColors metodo e a qualsiasi altro nuovo membro definito in ReversibleButton .
Le classi derivate ereditano i membri della classe su cui sono basate, consentendo di raggiungere una maggiore
complessità mano a mano che si avanza nella gerarchia. Per altre informazioni, vedere Nozioni fondamentali
sull'ereditarietà.
Compilare il codice
Verificare che il compilatore possa accedere alla classe da cui si vuole derivare la nuova classe. A tale scopo è
possibile fornire il nome completo della classe, come nell'esempio precedente, oppure specificare il relativo
spazio dei nomi in un'istruzione Imports (tipo e spazio dei nomi .NET). Se la classe si trova in un progetto
differente, può essere necessario aggiungere un riferimento a tale progetto. Per ulteriori informazioni, vedere
gestione dei riferimenti in un progetto.
Relazione di contenuto
Un altro tipo di relazione tra oggetti è la relazione di contenimento. Gli oggetti contenitore incapsulano
logicamente altri oggetti. Ad esempio, l'oggetto OperatingSystem contiene logicamente un oggetto Version,
restituito tramite la proprietà Version. Tenere presente che l'oggetto contenitore non contiene fisicamente altri
oggetti.
Raccolte
Un tipo particolare di contenimento degli oggetti è rappresentato dalle raccolte. Le raccolte sono gruppi di
oggetti simili che possono essere enumerati. Visual Basic supporta una sintassi specifica in for each... Istruzione
successiva che consente di scorrere gli elementi di una raccolta. Inoltre, le raccolte consentono spesso di usare
un Item[] per recuperare gli elementi in base al relativo indice o tramite l'associazione a una stringa univoca. Le
raccolte possono risultare di uso più semplice rispetto alle matrici, in quanto consentono di aggiungere o
rimuovere elementi senza ricorrere agli indici. Grazie alla loro facilità d'uso, vengono spesso usate per
l'archiviazione di form e controlli.
Argomenti correlati
Procedura dettagliata: definizione delle classi
Viene fornita una descrizione dettagliata della creazione di una classe.
Metodi e proprietà di overload
Metodi e proprietà di overload
Nozioni fondamentali sull'ereditarietà
Vengono illustrati modificatori di ereditarietà, override di metodi e proprietà, MyClass e MyBase.
Durata degli oggetti: come creare ed eliminare definitivamente oggetti
Vengono illustrate la creazione e l'eliminazione delle istanze di classe.
Tipi anonimi
Viene descritto come creare e usare i tipi anonimi, che consentono di creare oggetti senza scrivere una
definizione della classe per il tipo dati.
Inizializzatori di oggetto: tipi denominati e anonimi
Vengono discussi gli inizializzatori di oggetto, usati per creare istanze di tipi denominati e anonimi mediante
un'unica espressione.
Procedura: dedurre tipi e nomi di proprietà nelle dichiarazioni di tipo anonimo
Viene descritto come dedurre nomi e tipi di proprietà nelle dichiarazioni di tipo anonimo. Vengono forniti
esempi di inferenze riuscite e non riuscite.
Operatori ed espressioni in Visual Basic
05/03/2021 • 3 minutes to read • Edit Online
Un operatore è un elemento di codice che esegue un'operazione su uno o più elementi di codice che
contengono valori. Gli elementi di valore includono variabili, costanti, valori letterali, proprietà, espressioni e
valori restituiti da procedure Function e Operator .
Un'espressione è una serie di elementi di valore combinati con operatori che restituisce un nuovo valore. Gli
operatori agiscono sugli elementi di valore mediante l'esecuzione di calcoli, confronti o altre operazioni.
Tipi di operatori
Visual Basic fornisce i tipi di operatori seguenti:
Gli operatori aritmetici eseguono calcoli comuni su valori numerici, inclusa l'inversione degli schemi di
bit.
Gli operatori di confronto confrontano due espressioni e restituiscono un valore Boolean che
rappresenta il risultato del confronto.
Gli operatori di concatenamento uniscono più stringhe in un'unica stringa.
Gli operatori logici e bit per bit in Visual Basic combinano valori Boolean o numerici e restituiscono un
risultato con lo stesso tipo di dati dei valori.
Gli elementi di valore che vengono combinati con un operatore sono detti operandi di tale operatore. Gli
operatori combinati con elementi di valore formano espressioni, ad eccezione dell'operatore di assegnazione
che forma un'istruzione. Per altre informazioni, vedere Istruzioni.
15 * System.Math.Sqrt(9) + x
763 < 23
Più operatori possono eseguire azioni in un'unica operazione o istruzione, come illustrato nel seguente esempio.
x = 45 + y * z ^ 2
Nell'esempio precedente Visual Basic esegue le operazioni nell'espressione sul lato destro dell'operatore di
assegnazione ( = ), quindi assegna il valore risultante alla variabile a x sinistra. Non esistono limiti al numero
di operatori combinabili in un'espressione, ma per ottenere i risultati previsti è importante tenere presenti le
regole di Precedenza tra gli operatori in Visual Basic.
Vedi anche
Operatori
Combinazione efficace di operatori
Istruzioni
Routine in Visual Basic
05/03/2021 • 7 minutes to read • Edit Online
Una routine è un blocco di istruzioni Visual Basic racchiuso tra un'istruzione di dichiarazione ( Function ,, Sub
Operator , Get , Set ) e una End dichiarazione corrispondente. Tutte le istruzioni eseguibili in Visual Basic
devono essere incluse in alcune procedure.
Con un'istruzione Exit Sub o Exit Function , il controllo ritorna immediatamente al codice chiamante.
Le istruzioni che seguono l'istruzione Exit non vengono eseguite. Una routine può includere più di
un'istruzione Exit ed è possibile combinare istruzioni Return e Exit nella stessa routine.
Se una routine non contiene istruzioni Return o Exit , termina con un'istruzione End Sub o
End Function , End Get o End Set che segue l'ultima istruzione del corpo della routine. L'istruzione End
restituisce il controllo immediatamente al codice chiamante. Una routine può contenere solo
un'istruzione End .
Parametri e argomenti
Nella maggior parte dei casi, una routine deve usare dati diversi ogni volta che viene chiamata. È possibile
passare queste informazioni alla routine come parte della chiamata di routine. La routine definisce zero o più
parametri, ognuno dei quali rappresenta un valore necessario da passare alla routine. A ogni parametro della
definizione della routine corrisponde un argomento nella chiamata di routine. Un argomento rappresenta il
valore passato al parametro corrispondente in una chiamata di routine specifica.
Tipi di routine
Visual Basic usa diversi tipi di procedure:
Le routine Sub eseguono operazioni ma non restituiscono un valore al codice chiamante.
Le routine di gestione degli eventi sono routine Sub eseguite in risposta a un evento generato da
un'azione utente o da un'occorrenza in un programma.
Le routine Function restituiscono un valore al codice chiamante. Possono eseguire altre azioni prima della
restituzione del valore.
Alcune funzioni scritte in C# restituiscono un valore di riferimento restituito. I chiamanti delle routine
Function possono modificare il valore restituito e questa modifica si riflette nello stato dell'oggetto
chiamato. A partire da Visual Basic 2017, il codice di Visual Basic può usare valori di riferimento restituiti,
anche se non può restituire un valore in base al riferimento. Per altre informazioni, vedere Valori di
riferimento restituiti.
Le routine Property restituiscono e assegnano valori di proprietà su oggetti o moduli.
Le routine Operator definiscono il comportamento di un operatore standard quando uno o entrambi gli
operandi sono una struttura o classe appena definita.
Le routine generiche in Visual Basic definiscono uno o più parametri di tipo oltre i relativi parametri
normali, per cui il codice chiamante può passare tipi di dati specifici ogni volta che esegue una chiamata.
Vedi anche
Procedura: Creare una routine
Routine Sub
Routine Function
Routine Property
Routine di operatore
Parametri e argomenti delle routine
Routine ricorsive
Overload della routine
Generic Procedures in Visual Basic
Oggetti e classi
Istruzioni in Visual Basic
05/03/2021 • 22 minutes to read • Edit Online
Un'istruzione in Visual Basic è un'istruzione completa. Può contenere parole chiave, operatori, variabili, costanti
ed espressioni. Ogni istruzione appartiene a una delle categorie seguenti:
Le istruzioni di dichiarazione , che denominano una variabile, una costante o una routine, possono
anche specificare un tipo di dati.
Istruzioni eseguibili , che avviano le azioni. Queste istruzioni possono chiamare un metodo o una
funzione e possono eseguire il ciclo o il branching tramite blocchi di codice. Le istruzioni eseguibili
includono istruzioni di assegnazione che assegnano un valore o un'espressione a una variabile o a
una costante.
In questo argomento viene descritta ogni categoria. Inoltre, in questo argomento viene descritto come
combinare più istruzioni su una sola riga e come continuare un'istruzione su più righe.
Istruzioni di dichiarazione
Usare le istruzioni di dichiarazione per assegnare un nome e una definizione a procedure, variabili, proprietà,
matrici e costanti. Quando si dichiara un elemento di programmazione, è anche possibile definire il tipo di dati, il
livello di accesso e l'ambito. Per altre informazioni, vedere caratteristiche degli elementi dichiarati.
Nell'esempio seguente sono contenute tre dichiarazioni.
La prima dichiarazione è l' Sub istruzione. Insieme alla relativa End Sub istruzione corrispondente, viene
dichiarata una stored procedure denominata applyFormat . Specifica anche che applyFormat è Public , il che
significa che qualsiasi codice che può farvi riferimento può chiamarlo.
La seconda dichiarazione è l' Const istruzione, che dichiara la costante limit , specificando il Integer tipo di
dati e un valore di 33.
La terza dichiarazione è l' Dim istruzione, che dichiara la variabile thisWidget . Il tipo di dati è un oggetto
specifico, ovvero un oggetto creato dalla Widget classe. È possibile dichiarare una variabile come qualsiasi tipo
di dati elementare o qualsiasi tipo di oggetto esposto nell'applicazione in uso.
Valori iniziali
Quando viene eseguito il codice contenente un'istruzione di dichiarazione, Visual Basic riserva la memoria
necessaria per l'elemento dichiarato. Se l'elemento include un valore, Visual Basic lo inizializza sul valore
predefinito per il tipo di dati. Per ulteriori informazioni, vedere "comportamento" nell' istruzione Dim.
È possibile assegnare un valore iniziale a una variabile come parte della relativa dichiarazione, come illustrato
nell'esempio seguente.
Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.
Se una variabile è una variabile oggetto, è possibile creare in modo esplicito un'istanza della relativa classe
quando viene dichiarata tramite la parola chiave new operator , come illustrato nell'esempio seguente.
Si noti che il valore iniziale specificato in un'istruzione di dichiarazione non viene assegnato a una variabile
finché l'esecuzione non raggiunge la relativa istruzione di dichiarazione. Fino a quel momento, la variabile
contiene il valore predefinito per il tipo di dati.
Istruzioni eseguibili
Un'istruzione eseguibile esegue un'azione. Può chiamare una routine, creare un ramo in un'altra posizione nel
codice, eseguire il ciclo di diverse istruzioni o valutare un'espressione. Un'istruzione di assegnazione è un caso
speciale di un'istruzione eseguibile.
Nell'esempio seguente viene utilizzata una If...Then...Else struttura di controllo per eseguire blocchi di
codice diversi in base al valore di una variabile. All'interno di ogni blocco di codice, un For...Next ciclo viene
eseguito un numero specificato di volte.
L' If istruzione nell'esempio precedente verifica il valore del parametro clockwise . Se il valore è True , viene
chiamato il spinClockwise metodo di aWidget . Se il valore è False , viene chiamato il spinCounterClockwise
metodo di aWidget . La If...Then...Else struttura del controllo termina con End If .
Il For...Next ciclo all'interno di ogni blocco chiama il metodo appropriato un numero di volte uguale al valore
del revolutions parametro.
Istruzioni di assegnazione
Le istruzioni di assegnazione eseguono operazioni di assegnazione, che sono costituite dall'acquisizione del
valore sul lato destro dell'operatore di assegnazione ( = ) e dall'archiviazione nell'elemento a sinistra, come
nell'esempio seguente.
v = 42
x = y + z + FindResult(3)
Nell'esempio precedente il valore contenuto nella variabile viene aggiunto y al valore contenuto nella variabile
z , quindi viene aggiunto il valore restituito dalla chiamata al funzione findResult . Il valore totale di questa
espressione viene quindi archiviato nella variabile x .
Tipi di dati nelle istruzioni di assegnazione
Oltre ai valori numerici, l'operatore di assegnazione può anche assegnare String valori, come illustrato
nell'esempio seguente.
Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.
È anche possibile assegnare Boolean valori, usando un Boolean valore letterale o un' Boolean espressione,
come illustrato nell'esempio seguente.
Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.
Analogamente, è possibile assegnare valori appropriati agli elementi di programmazione Char del Date tipo di
Object dati, o. È inoltre possibile assegnare un'istanza di oggetto a un elemento dichiarato come della classe da
cui viene creata l'istanza.
Istruzioni di assegnazione composta
Le istruzioni di assegnazione composta eseguono innanzitutto un'operazione su un'espressione prima di
assegnarla a un elemento di programmazione. Nell'esempio seguente viene illustrato uno di questi operatori,
+= , che incrementa il valore della variabile sul lato sinistro dell'operatore in base al valore dell'espressione a
destra.
n += 1
Nell'esempio precedente viene aggiunto 1 al valore di n , quindi il nuovo valore viene archiviato in n . Si tratta
di un equivalente a sintassi abbreviata dell'istruzione seguente:
n = n + 1
È possibile eseguire un'ampia gamma di operazioni di assegnazione composta utilizzando operatori di questo
tipo. Per un elenco di questi operatori e altre informazioni su di essi, vedere operatori di assegnazione.
L'operatore di assegnazione di concatenazione ( &= ) è utile per aggiungere una stringa alla fine di stringhe già
esistenti, come illustrato nell'esempio seguente.
Sebbene occasionalmente pratico, questo tipo di sintassi rende il codice difficile da leggere e gestire. È quindi
consigliabile usare una sola istruzione per una riga.
Return username.Split(delimiter)(position)
End Function
Dopo una parentesi graffa aperta ( { ) o prima di una parentesi graffa chiusa ( } ). Ad esempio:
Per altre informazioni, vedere inizializzatori di oggetto: tipi denominati e anonimi o inizializzatori di
insieme.
Dopo un'espressione incorporata aperta ( <%= ) o prima della chiusura di un'espressione incorporata (
%> ) all'interno di un valore letterale XML. Ad esempio:
cmd.CommandText =
"SELECT * FROM Titles JOIN Publishers " &
"ON Publishers.PubId = Titles.PubID " &
"WHERE Publishers.State = 'CA'"
Dim fileStream =
My.Computer.FileSystem.
OpenTextFileReader(filePath)
Dim memoryInUse =
My.Computer.Info.TotalPhysicalMemory +
My.Computer.Info.TotalVirtualMemory -
My.Computer.Info.AvailablePhysicalMemory -
My.Computer.Info.AvailableVirtualMemory
If TypeOf inStream Is
IO.FileStream AndAlso
inStream IsNot
Nothing Then
ReadFile(inStream)
End If
Dim fileStream =
My.Computer.FileSystem.
OpenTextFileReader(filePath)
' Allowed:
Dim aType = New With {.PropertyName =
"Value"}
' Allowed:
With log
.Source =
"Application"
End With
Per ulteriori informazioni, vedere con... Termina con l'istruzione o gli inizializzatori di oggetto: tipi
denominati e anonimi.
Dopo un qualificatore di proprietà Axis XML ( . o .@ ... ). Tuttavia, quando si _ specifica un
qualificatore del membro quando si usa la parola chiave, è necessario includere un carattere di
continuazione di riga () With . Ad esempio:
<
Serializable()
>
Public Class Customer
Public Property Name As String
Public Property Company As String
Public Property Email As String
End Class
For Each p In
vsProcesses
Aggiunta di commenti
Il codice sorgente non è sempre di chiara comprensione, neanche al programmatore che lo ha scritto. Per
documentare il codice, la maggior parte dei programmatori fa uso di commenti incorporati. I commenti nel
codice possono spiegare una procedura o una particolare istruzione a chiunque legga o funzioni in un secondo
momento. Visual Basic ignora i commenti durante la compilazione e non influiscono sul codice compilato.
Le righe di commento iniziano con un apostrofo ( ' ) o REM seguito da uno spazio. Possono essere aggiunti
ovunque nel codice, tranne che all'interno di una stringa. Per aggiungere un commento a un'istruzione, inserire
un apostrofo o REM dopo l'istruzione, seguito dal commento. I commenti possono anche essere inseriti in una
riga separata. Nell'esempio seguente vengono illustrate queste possibilità.
Operatori ed espressioni Viene illustrato come combinare elementi con operatori per
restituire nuovi valori.
Procedura: Interrompere e combinare istruzioni nel codice Viene illustrato come suddividere una singola istruzione in
più righe e come inserire più istruzioni nella stessa riga.
Procedura: Etichettare le istruzioni Viene illustrato come etichettare una riga di codice.
Stringhe in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
In questa sezione vengono descritti i concetti di base relativi all'utilizzo di stringhe in Visual Basic.
Vedi anche
Funzionalità del linguaggio Visual Basic
Variabili in Visual Basic
05/03/2021 • 3 minutes to read • Edit Online
Spesso è necessario archiviare i valori quando si eseguono calcoli con Visual Basic. È possibile ad esempio che si
vogliano calcolare valori diversi, confrontarli ed eseguire operazioni su di essi a seconda del risultato del
confronto. Per poter confrontare i valori è necessario archiviarli.
Utilizzo
Visual Basic, analogamente alla maggior parte dei linguaggi di programmazione, USA le variabili per archiviare i
valori. Ogni variabile ha un nome, ovvero la parola usata per fare riferimento al valore contenuto nella variabile.
Ogni variabile ha anche un tipo di dati che determina il genere di dati che la variabile può archiviare. Una
variabile può rappresentare una matrice se deve archiviare un insieme indicizzato di elementi di dati
strettamente correlati.
L'inferenza del tipo di variabile locale consente di dichiarare le variabili senza specificare esplicitamente un tipo
di dati. In questo caso, il compilatore deduce il tipo della variabile in base al tipo dell'espressione di
inizializzazione. Per altre informazioni, vedere Local Type Inference (Inferenza del tipo di variabile locale) e
Option Infer Statement (Istruzione Option Infer).
Assegnazione di valori
Le istruzioni di assegnazione consentono di eseguire i calcoli e assegnare il risultato a una variabile, come
illustra l'esempio seguente.
NOTE
Il segno di uguale ( = ) in questo esempio è un operatore di assegnazione, non un operatore di uguaglianza. Il valore
viene assegnato alla variabile applesSold .
Per altre informazioni, vedere Procedura: Spostare i dati all'interno e all'esterno di una variabile.
Variabili e proprietà
Analogamente a una variabile, una proprietà rappresenta un valore al quale è possibile accedere. Le proprietà
sono tuttavia più complesse delle variabili. Le proprietà usano blocchi di codice che controllano come impostare
e recuperare il valore della proprietà. Per altre informazioni, vedere Differenze tra proprietà e variabili in Visual
Basic.
Vedi anche
Dichiarazione di variabile
Variabili oggetto
Risoluzione dei problemi relativi alle variabili
Procedura: spostare i dati all'interno e all'esterno di una variabile
Differenze tra proprietà e variabili in Visual Basic
Inferenza del tipo di variabile locale
XML in Visual Basic
02/11/2020 • 2 minutes to read • Edit Online
Visual Basic fornisce il supporto del linguaggio integrato che consente l'interazione con LINQ to XML .
Cenni preliminari su LINQ to XML in Visual Basic Viene descritto il supporto di Visual Basic LINQ to XML .
Creazione di XML in Visual Basic Descrive come creare oggetti valore letterale XML usando
LINQ to XML.
Modifica di XML in Visual Basic Descrive come caricare e analizzare codice XML usando
Visual Basic.
Accesso a XML in Visual Basic Descrive le proprietà Axis XML e i metodi LINQ to XML per
l'accesso a elementi e attributi XML.
Vedere anche
System.Xml.Linq
Valori letterali XML
Proprietà Axis XML
LINQ to XML
Interoperabilità COM (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Il modello COM (Component Object Model) consente a un oggetto di esporre la relativa funzionalità agli altri
componenti e alle applicazioni host. La maggior parte del software in uso oggi include oggetti COM. Anche se
gli assembly .NET sono la scelta migliore per le nuove applicazioni, in alcuni casi può essere necessario usare
oggetti COM. In questa sezione vengono illustrati alcuni dei problemi associati alla creazione e all'utilizzo di
oggetti COM con Visual Basic.
Sezioni correlate
Interoperabilità con codice non gestito
Descrive i servizi di interoperabilità forniti da Common Language Runtime.
Esposizione di componenti COM a .NET Framework
Descrive il processo di chiamata dei tipi COM usando l'interoperabilità COM.
Esposizione di componenti .NET Framework a COM
Descrive la preparazione e l'uso dei tipi gestiti da COM.
Applicazione di attributi di interoperabilità
Descrive gli attributi che è possibile usare quando si lavora con codice non gestito.
Introduzione all'interoperabilità COM (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Il Component Object Model (COM) consente a un oggetto di esporre la funzionalità ad altri componenti e di
ospitare le applicazioni. Sebbene gli oggetti COM siano stati fondamentali per la programmazione di Windows
per molti anni, le applicazioni progettate per il Common Language Runtime (CLR) offrono molti vantaggi.
.NET Framework le applicazioni sostituiranno quelle sviluppate con COM. Fino ad allora, potrebbe essere
necessario usare o creare oggetti COM usando Visual Studio. L'interoperabilità con COM o l' interoperabilità
COM consente di utilizzare gli oggetti COM esistenti durante la transizione al .NET Framework al ritmo
dell'utente.
Utilizzando la .NET Framework per creare componenti COM, è possibile utilizzare l'interoperabilità COM senza
registrazione. In questo modo è possibile controllare la versione della DLL abilitata quando più di una versione
viene installata in un computer e consente agli utenti finali di utilizzare XCOPY o FTP per copiare l'applicazione
in una directory appropriata nel computer in cui è possibile eseguirla. Per altre informazioni, vedere
interoperabilità COM senza registrazione.
Assembly
Un assembly è il blocco predefinito principale di un'applicazione .NET Framework. Si tratta di una raccolta di
funzionalità compilata, con versione e distribuita come singola unità di implementazione contenente uno o più
file. Ogni assembly contiene un manifesto dell'assembly.
Assembly di interoperabilità
Gli assembly di interoperabilità sono .NET Framework assembly che eseguono il Bridge tra codice gestito e non
gestito, eseguendo il mapping dei membri di oggetti COM a membri gestiti .NET Framework equivalenti. Gli
assembly di interoperabilità creati da Visual Basic .NET gestiscono molti dei dettagli relativi all'utilizzo di oggetti
COM, ad esempio il marshalling di interoperabilità.
Marshalling di interoperabilità
Tutte le applicazioni .NET Framework condividono un set di tipi comuni che consentono l'interoperabilità degli
oggetti, indipendentemente dal linguaggio di programmazione usato. I parametri e i valori restituiti degli oggetti
COM utilizzano talvolta tipi di dati diversi da quelli utilizzati nel codice gestito. Il marshalling di interoperabilità è
il processo di creazione di pacchetti di parametri e valori restituiti in tipi di dati equivalenti durante il passaggio
da e verso oggetti com. Per ulteriori informazioni, vedere marshalling di interoperabilità.
Vedi anche
Interoperabilità COM
Procedura dettagliata: Implementazione dell'ereditarietà con gli oggetti COM
Interoperabilità con codice non gestito
Risoluzione dei problemi relativi all'interoperabilità
Assembly in .NET
Tlbimp.exe (utilità di importazione della libreria dei tipi)
Tlbexp.exe (utilità di esportazione della libreria dei tipi)
Marshalling di interoperabilità
Interoperabilità COM senza registrazione
Procedura: fare riferimento a oggetti COM da
Visual Basic
05/03/2021 • 4 minutes to read • Edit Online
In Visual Basic l'aggiunta di riferimenti a oggetti COM con librerie dei tipi richiede la creazione di un assembly di
interoperabilità per la libreria COM. I riferimenti ai membri dell'oggetto COM vengono instradati all'assembly di
interoperabilità e quindi inoltrati all'oggetto COM effettivo. Le risposte dall'oggetto COM vengono instradate
all'assembly di interoperabilità e inoltrate all'applicazione .NET Framework.
È possibile fare riferimento a un oggetto COM senza utilizzare un assembly di interoperabilità incorporando le
informazioni sul tipo per l'oggetto COM in un assembly .NET. Per incorporare le informazioni sul tipo, impostare
la Embed Interop Types proprietà su True per il riferimento all'oggetto com. Se si esegue la compilazione
utilizzando il compilatore da riga di comando, utilizzare l' /link opzione per fare riferimento alla libreria com.
Per ulteriori informazioni, vedere -link (Visual Basic).
Visual Basic crea automaticamente assembly di interoperabilità quando si aggiunge un riferimento a una libreria
dei tipi dall'Integrated Development Environment (IDE). Quando si utilizza la riga di comando, è possibile
utilizzare l'utilità Tlbimp per creare manualmente assembly di interoperabilità.
Per aggiungere riferimenti a oggetti COM
1. Scegliere Aggiungi riferimento dal menu progetto , quindi fare clic sulla scheda com nella finestra di
dialogo.
2. Consente di selezionare il componente che si desidera utilizzare dall'elenco di oggetti COM.
3. Per semplificare l'accesso all'assembly di interoperabilità, aggiungere un' Imports istruzione all'inizio
della classe o del modulo in cui si utilizzerà l'oggetto com. Ad esempio, nell'esempio di codice seguente
viene importato lo spazio dei nomi INKEDLib per gli oggetti a cui si fa riferimento nella
Microsoft InkEdit Control 1.0 libreria.
Imports INKEDLib
Class Sample
Private s As IInkCursor
End Class
È possibile utilizzare Tlbimp per creare assembly di interoperabilità per le librerie dei tipi, anche per gli
oggetti COM non registrati. Tuttavia, gli oggetti COM a cui fanno riferimento gli assembly di
interoperabilità devono essere registrati correttamente nel computer in cui devono essere utilizzati. È
possibile registrare un oggetto COM utilizzando l'utilità Regsvr32 inclusa nel sistema operativo Windows.
Vedi anche
Interoperabilità COM
Tlbimp.exe (utilità di importazione della libreria dei tipi)
Tlbexp.exe (utilità di esportazione della libreria dei tipi)
Procedura dettagliata: Implementazione dell'ereditarietà con gli oggetti COM
Risoluzione dei problemi relativi all'interoperabilità
Istruzione Imports (tipo e spazio dei nomi .NET)
Procedura: utilizzare i controlli ActiveX (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
I controlli ActiveX sono componenti COM o oggetti che è possibile inserire in una pagina Web o in un'altra
applicazione per riutilizzare le funzionalità in pacchetto che un altro utente ha programmato. È possibile usare i
controlli ActiveX sviluppati per Visual Basic 6,0 e versioni precedenti per aggiungere funzionalità alla casella
degli strumenti di Visual Studio.
Per aggiungere controlli ActiveX alla casella degli strumenti
1. Scegliere Scegli elementi della Casella degli strumenti dal menu Strumenti .
Verrà visualizzata la finestra di dialogo Scegli casella degli strumenti .
2. Fare clic sulla scheda componenti com .
3. Selezionare la casella di controllo accanto al controllo ActiveX che si desidera utilizzare e quindi fare clic
su OK .
Il nuovo controllo viene visualizzato con gli altri strumenti della casella degli strumenti.
NOTE
È possibile usare l'utilità AxImp per creare manualmente un assembly di interoperabilità per i controlli ActiveX. Per
ulteriori informazioni, vedere Aximp.exe (Windows Form utilità di importazione di controlli ActiveX).
Vedi anche
Interoperabilità COM
Procedura: aggiungere i controlli ActiveX a Windows Form
Aximp.exe (Windows Form utilità di importazione del controllo ActiveX)
Considerazioni sull'inserimento di controlli ActiveX in Windows Form
Risoluzione dei problemi relativi all'interoperabilità
Procedura dettagliata: chiamata delle API di
Windows (Visual Basic)
05/03/2021 • 17 minutes to read • Edit Online
Le API di Windows sono librerie a collegamento dinamico (dll) che fanno parte del sistema operativo Windows.
Vengono usati per eseguire attività quando è difficile scrivere procedure equivalenti personalizzate. Windows, ad
esempio, fornisce una funzione denominata FlashWindowEx che consente di fare in modo che la barra del titolo
di un'applicazione venga alternata tra le tonalità chiaro e scuro.
Il vantaggio di usare le API di Windows nel codice è che consentono di risparmiare tempo di sviluppo perché
contengono dozzine di funzioni utili già scritte e in attesa di essere usate. Lo svantaggio è che le API di Windows
possono essere difficili da utilizzare e non perdonare quando si verificano problemi.
Le API di Windows rappresentano una categoria speciale di interoperabilità. Le API Windows non utilizzano
codice gestito, non dispongono di librerie dei tipi predefinite e utilizzano tipi di dati diversi da quelli utilizzati con
Visual Studio. A causa di queste differenze, e poiché le API di Windows non sono oggetti COM, l'interoperabilità
con le API Windows e la .NET Framework viene eseguita utilizzando platform invoke o PInvoke. Platform Invoke
è un servizio che consente al codice gestito di chiamare funzioni non gestite implementate in dll. Per ulteriori
informazioni, vedere utilizzo di funzioni dll non gestite. È possibile utilizzare PInvoke in Visual Basic utilizzando l'
Declare istruzione o applicando l' DllImport attributo a una routine vuota.
Le chiamate all'API di Windows rappresentano una parte importante della programmazione Visual Basic in
passato, ma sono raramente necessarie con Visual Basic .NET. Quando possibile, è consigliabile usare codice
gestito dal .NET Framework per eseguire attività, anziché chiamate API Windows. In questa procedura dettagliata
vengono fornite informazioni sulle situazioni in cui è necessario utilizzare le API di Windows.
NOTE
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero
essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi
elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
NOTE
Per informazioni complete sulle API Windows, vedere la documentazione di Win32 SDK nell'API Windows di
Platform SDK. Per ulteriori informazioni sulle costanti utilizzate dalle API di Windows, esaminare i file di intestazione
come Windows. h inclusi in Platform SDK.
2. Aprire un nuovo progetto di applicazione Windows scegliendo nuovo dal menu file , quindi fare clic su
progetto . Verrà visualizzata la finestra di dialogo Nuovo progetto .
3. Selezionare applicazione Windows dall'elenco dei modelli di progetto Visual Basic. Verrà visualizzato il
nuovo progetto.
4. Aggiungere la Declare funzione seguente alla classe o al modulo in cui si vuole usare la dll:
NOTE
Le versioni precedenti di Visual Basic consentivano di dichiarare parametri As Any , vale a dire che potevano essere
utilizzati dati di qualsiasi tipo di dati. Visual Basic richiede l'utilizzo di un tipo di dati specifico per tutte le Declare
istruzioni.
3. Aggiungere istruzioni equivalenti Const alla classe o al modulo per rendere queste costanti disponibili
per l'applicazione. Ad esempio:
P e r c h i a ma re l a p ro c e d u ra DL L
1. Aggiungere un pulsante denominato Button1 al modulo di avvio per il progetto, quindi fare doppio clic
su di esso per visualizzarne il codice. Viene visualizzato il gestore eventi per il pulsante.
2. Aggiungere il codice al Click gestore eventi per il pulsante aggiunto, per chiamare la procedura e
fornire gli argomenti appropriati:
3. Eseguire il progetto premendo F5. La finestra di messaggio viene visualizzata con i pulsanti Sì e
Nessuna risposta. Fare clic su una delle due.
Marshalling dei dati
Visual Basic converte automaticamente i tipi di dati dei parametri e i valori restituiti per le chiamate API
Windows, ma è possibile usare l' MarshalAs attributo per specificare in modo esplicito i tipi di dati non gestiti
previsti da un'API. Per ulteriori informazioni sul marshalling di interoperabilità, vedere marshalling di
interoperabilità.
P e r u sa r e D E C L A R E e m a r sh a l l i n g i n u n a c h i a m a t a A P I
1. Determinare il nome della funzione che si desidera chiamare, più gli argomenti, i tipi di dati e il valore
restituito.
2. Per semplificare l'accesso all' MarshalAs attributo, aggiungere un' Imports istruzione all'inizio del codice
per la classe o il modulo, come nell'esempio seguente:
Imports System.Runtime.InteropServices
3. Aggiungere un prototipo di funzione per la funzione importata alla classe o al modulo in uso e applicare
l' MarshalAs attributo ai parametri o al valore restituito. Nell'esempio seguente viene effettuato il
marshalling di una chiamata API che prevede il tipo void* AsAny :
Imports System.Runtime.InteropServices
6. Dichiarare una funzione vuota che precede l' End Class istruzione per il form e assegnare un nome alla
funzione MoveFile .
7. Applicare i Public Shared modificatori e alla dichiarazione di funzione e impostare i parametri per
MoveFile in base agli argomenti utilizzati dalla funzione API di Windows:
La funzione può avere qualsiasi nome di routine valido; l' DllImport attributo specifica il nome nella dll.
Gestisce anche il marshalling di interoperabilità per i parametri e i valori restituiti, quindi è possibile
scegliere i tipi di dati di Visual Studio simili ai tipi di dati usati dall'API.
8. Applicare l' DllImport attributo alla funzione vuota. Il primo parametro è il nome e il percorso della DLL
che contiene la funzione che si sta chiamando. Non è necessario specificare il percorso per i file presenti
nelle directory di sistema di Windows. Il secondo parametro è un argomento denominato che specifica il
nome della funzione nell'API Windows. In questo esempio, l' DllImport attributo impone che le chiamate
a MoveFile vengano trasmesse a MoveFileW in KERNEL32.DLL. Il MoveFileW metodo copia un file dal
percorso src al percorso dst .
10. Creare un file denominato Test.txt e inserirlo nella directory C:\Tmp sul disco rigido. Se necessario, creare
la directory tmp.
11. Premere F5 per avviare l’applicazione. Viene visualizzato il form principale.
12. Fare clic su Button2 . Il messaggio "il file è stato spostato correttamente" viene visualizzato se il file può
essere spostato.
Vedi anche
DllImportAttribute
MarshalAsAttribute
Declare Statement
Auto
Alias
Interoperabilità COM
Creazione di prototipi nel codice gestito
Marshalling di un delegato come metodo di callback
Procedura: chiamare API di Windows (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
In questo esempio viene definita e chiamata la MessageBox funzione in user32.dll, quindi viene passata una
stringa.
Esempio
' Defines the MessageBox function.
Public Class Win32
Declare Auto Function MessageBox Lib "user32.dll" (
ByVal hWnd As Integer, ByVal txt As String,
ByVal caption As String, ByVal Type As Integer
) As Integer
End Class
Compilare il codice
L'esempio presenta i requisiti seguenti:
Un riferimento allo spazio dei nomi System.
Programmazione efficiente
Le seguenti condizioni possono generare un'eccezione:
Il metodo non è statico, è astratto oppure è stato definito in precedenza. Il tipo padre è un'interfaccia
oppure la lunghezza del nome o dllname è zero. (ArgumentException)
Il nome o dllname è Nothing . (ArgumentNullException)
Il tipo contenitore è stato creato in precedenza con CreateType . (InvalidOperationException)
Vedi anche
Informazioni dettagliate su platform invoke
Esempi di platform invoke
Utilizzo di funzioni di DLL non gestite
Definizione di un metodo tramite reflection emit
Procedura dettagliata: Chiamata delle API di Windows
Interoperabilità COM
Procedura: chiamare una funzione Windows che
accetta tipi senza segno (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Se si utilizza una classe, un modulo o una struttura con membri di tipi di Unsigned Integer, è possibile accedere a
questi membri con Visual Basic.
Per chiamare una funzione Windows che accetta un tipo senza segno
1. Utilizzare un' istruzione Declare per indicare Visual Basic quale libreria include la funzione, il nome della
libreria, il tipo di sequenza chiamante e come convertire le stringhe quando viene chiamato.
2. Nell' Declare istruzione usare,, UInteger ULong UShort o Byte come appropriato per ogni parametro
con un tipo senza segno.
3. Consultare la documentazione per la funzione di Windows che si sta chiamando per trovare i nomi e i
valori delle costanti che usa. Molti di questi vengono definiti nel file WinUser. h.
4. Dichiarare le costanti necessarie nel codice. Molte costanti di Windows sono valori senza segno a 32 bit
ed è necessario dichiararle As UInteger .
5. Chiamare la funzione in modo normale. Nell'esempio seguente viene chiamata la funzione di Windows
MessageBox , che accetta un argomento Unsigned Integer.
Cau t i on
I UInteger ULong UShort SByte tipi di dati,, e non fanno parte dell' indipendenza del linguaggio e di
Language-Independent Components (CLS), pertanto il codice conforme a CLS non può utilizzare un
componente che li utilizza.
IMPORTANT
Effettuando una chiamata a codice non gestito, ad esempio Windows Application Programming Interface (API), il
codice viene esposto a potenziali rischi per la sicurezza.
IMPORTANT
Per chiamare l'API Windows è necessaria l'autorizzazione per il codice non gestito, che può influire sulla sua
esecuzione in situazioni di attendibilità parziale. Per ulteriori informazioni, vedere SecurityPermission e
autorizzazioni di accesso al codice.
Vedi anche
Tipi di dati
Tipo di dati Integer
Tipo di dati UInteger
Declare Statement
Procedura dettagliata: Chiamata delle API di Windows
Procedura dettagliata: creazione di oggetti COM
con Visual Basic
05/03/2021 • 7 minutes to read • Edit Online
Quando si creano nuovi componenti o applicazioni, è consigliabile creare .NET Framework assembly. Tuttavia,
Visual Basic facilita anche l'esposizione di un componente .NET Framework a COM. In questo modo è possibile
fornire nuovi componenti per i gruppi di applicazioni precedenti che richiedono componenti COM. In questa
procedura dettagliata viene illustrato come utilizzare Visual Basic per esporre .NET Framework oggetti come
oggetti COM, sia con sia senza il modello di classe COM.
Il modo più semplice per esporre oggetti COM consiste nell'usare il modello di classe COM. Questo modello
crea una nuova classe, quindi configura il progetto per generare la classe con un livello di interoperabilità come
oggetto COM e la registra con il sistema operativo.
NOTE
Sebbene sia anche possibile esporre una classe creata in Visual Basic come oggetto COM per il codice non gestito da
usare, non è un vero oggetto COM e non può essere usata da Visual Basic. Per ulteriori informazioni, vedere
interoperabilità com nelle applicazioni .NET Framework.
NOTE
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero
essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi
elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
4. Scegliere Crea GUID dal menu Strumenti . Nella finestra di dialogo Crea GUID fare clic su Formato
del Registro di sistema e quindi fare clic su Copia . Fare clic su Esci .
5. Sostituire la stringa vuota per ClassId con il GUID, rimuovendo le parentesi graffe iniziali e finali. Se, ad
esempio, il GUID fornito da GUIDGEN è "{2C8B0AEE-02C9-486e-B809-C780A11530FE}" , il codice dovrebbe
essere simile al seguente.
6. Ripetere i passaggi precedenti per le InterfaceId EventsId costanti e, come nell'esempio seguente.
NOTE
Verificare che i GUID siano nuovi e univoci. in caso contrario, il componente COM potrebbe essere in conflitto con
altri componenti COM.
7. Aggiungere l' ComClass attributo a ComClass1 , specificando i GUID per l'ID di classe, l'ID di interfaccia e
l'ID degli eventi come nell'esempio seguente:
8. Le classi COM devono avere un Public Sub New() costruttore senza parametri o la classe non sarà
registrata correttamente. Aggiungere un costruttore senza parametri alla classe:
Public Sub New()
MyBase.New()
End Sub
9. Aggiungere proprietà, metodi ed eventi alla classe, terminando con un' End Class istruzione. Scegliere
Compila soluzione dal menu Compila . Visual Basic compila l'assembly e registra l'oggetto COM con il
sistema operativo.
NOTE
Gli oggetti COM generati con Visual Basic non possono essere utilizzati da altre applicazioni Visual Basic perché
non sono veri oggetti COM. I tentativi di aggiungere riferimenti a tali oggetti COM genereranno un errore. Per
informazioni dettagliate, vedere interoperabilità com nelle applicazioni .NET Framework.
Vedi anche
ComClassAttribute
Interoperabilità COM
Procedura dettagliata: Implementazione dell'ereditarietà con gli oggetti COM
#Region (direttiva)
Interoperabilità COM nelle applicazioni .NET Framework
Risoluzione dei problemi relativi all'interoperabilità
Risoluzione dei problemi relativi all'interoperabilità
(Visual Basic)
05/03/2021 • 18 minutes to read • Edit Online
Quando si interagisce tra COM e il codice gestito del .NET Framework, è possibile che si verifichino uno o più dei
seguenti problemi comuni.
Marshalling di interoperabilità
In alcuni casi, potrebbe essere necessario utilizzare tipi di dati che non fanno parte del .NET Framework. Gli
assembly di interoperabilità gestiscono la maggior parte del lavoro per gli oggetti COM, ma potrebbe essere
necessario controllare i tipi di dati utilizzati quando gli oggetti gestiti vengono esposti a COM. Ad esempio, le
strutture nelle librerie di classi devono specificare il BStr tipo non gestito sulle stringhe inviate a oggetti COM
creati da Visual Basic 6,0 e versioni precedenti. In questi casi, è possibile usare l'attributo per fare in modo che i
MarshalAsAttribute tipi gestiti vengano esposti come tipi non gestiti.
Metodi di overload
Sebbene sia possibile creare metodi di overload con Visual Basic, non sono supportati da COM. Quando una
classe che contiene metodi di overload viene esposta come oggetto COM, vengono generati nuovi nomi di
metodo per i metodi di overload.
Si consideri, ad esempio, una classe che dispone di due overload del Synch metodo. Quando la classe viene
esposta come oggetto COM, i nuovi nomi di metodo generati potrebbero essere Synch e Synch_2 .
La ridenominazione può causare due problemi per i consumer dell'oggetto COM.
1. I client potrebbero non prevedere i nomi dei metodi generati.
2. I nomi dei metodi generati nella classe esposti come oggetto COM possono essere modificati quando
vengono aggiunti nuovi overload alla classe o alla relativa classe di base. Questo può causare problemi di
controllo delle versioni.
Per risolvere entrambi i problemi, assegnare a ogni metodo un nome univoco, anziché usare l'overload, quando
si sviluppano oggetti che verranno esposti come oggetti COM.
Tuttavia, se si utilizza la classe COM come base per una classe derivata, è necessario utilizzare la classe di
interoperabilità che rappresenta la classe COM, come nel codice seguente:
Class DerivedCommand
Inherits ADODB.CommandClass
End Class
NOTE
Gli assembly di interoperabilità implementano in modo implicito interfacce che rappresentano classi COM. Non provare a
usare l' Implements istruzione per implementare queste interfacce o verrà generato un errore.
Dim db As DAO.Database
' Open the database.
Set db = DBEngine.OpenDatabase("C:\nwind.mdb")
' Use the database object.
Visual Basic .NET richiede di creare sempre istanze di oggetti COM prima di poter usare i relativi metodi. Per
usare questi metodi in Visual Basic, dichiarare una variabile della classe desiderata e usare la parola chiave New
per assegnare l'oggetto alla variabile oggetto. La Shared parola chiave può essere utilizzata quando si desidera
assicurarsi che venga creata una sola istanza della classe.
Sub DAOOpenRecordset()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim fld As DAO.Field
' Open the database.
db = DBEngine.OpenDatabase("C:\nwind.mdb")
ADODBConnect()
End Sub
' This is the event handler for the cn_ConnectComplete event raised
' by the ADODB.Connection object when a database is opened.
Dim x As Integer = 6
Dim y As Integer = 0
Try
x = CInt(x / y) ' Attempt to divide by zero.
' This procedure would fail silently without exception handling.
Catch ex As Exception
MsgBox("There was an error: " & ex.Message)
End Try
End Sub
Questo esempio genera un errore come previsto. Tuttavia, se si prova lo stesso esempio senza il
Try...Catch...Finally blocco, l'errore viene ignorato come se fosse stata usata l' OnError Resume Next
istruzione. Senza la gestione degli errori, la divisione per zero non riesce automaticamente. Poiché tali errori non
generano mai errori di eccezione non gestiti, è importante usare una forma di gestione delle eccezioni nei
gestori eventi che gestiscono gli eventi dagli oggetti COM.
Informazioni sugli errori di interoperabilità COM
Senza la gestione degli errori, le chiamate di interoperabilità generano spesso errori che forniscono scarse
informazioni. Quando possibile, usare la gestione degli errori strutturati per fornire altre informazioni sui
problemi che si verificano. Questo può essere particolarmente utile quando si esegue il debug delle applicazioni.
Ad esempio:
Try
' Place call to COM object here.
Catch ex As Exception
' Display information about the failed call.
End Try
È possibile trovare informazioni quali la descrizione dell'errore, HRESULT e l'origine di errori COM esaminando
il contenuto dell'oggetto eccezione.
Se non si ha accesso al codice sorgente per la routine chiamata, è possibile forzare il passaggio della proprietà in
base al valore aggiungendo un set aggiuntivo di parentesi quadre alla procedura chiamante. Ad esempio, in un
progetto che contiene un riferimento all'oggetto COM della libreria Microsoft ActiveX Data Objects 2,8, è
possibile usare:
Vedi anche
MarshalAsAttribute
Interoperabilità COM
Tlbimp.exe (utilità di importazione della libreria dei tipi)
Tlbexp.exe (utilità di esportazione della libreria dei tipi)
Procedura dettagliata: Implementazione dell'ereditarietà con gli oggetti COM
Inherits Statement
Global Assembly Cache
Interoperabilità COM nelle applicazioni .NET
Framework (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Quando si desidera utilizzare oggetti COM e .NET Framework oggetti nella stessa applicazione, è necessario
risolvere le differenze nella modalità di esistenza degli oggetti in memoria. Un oggetto .NET Framework si trova
in managed memory, ovvero la memoria controllata dal Common Language Runtime, e può essere spostato dal
runtime in base alle esigenze. Un oggetto COM si trova nella memoria non gestita e non prevede lo
spostamento in un'altra posizione di memoria. Visual Studio e il .NET Framework forniscono strumenti per
controllare l'interazione di questi componenti gestiti e non gestiti. Per altre informazioni sul codice gestito,
vedere Common Language Runtime.
Oltre a usare gli oggetti COM nelle applicazioni .NET, è anche possibile usare Visual Basic per sviluppare oggetti
accessibili da codice non gestito tramite COM.
I collegamenti in questa pagina forniscono informazioni dettagliate sulle interazioni tra gli oggetti COM e .NET
Framework.
Sezioni correlate
Interoperabilità con codice non gestito Descrive brevemente alcuni problemi di interazione tra
codice gestito e non gestito e fornisce collegamenti per
ulteriori studi.
Tlbimp.exe (utilità di importazione della libreria dei tipi) Viene illustrato lo strumento che è possibile utilizzare per
convertire le definizioni dei tipi presenti in una libreria dei tipi
COM in definizioni equivalenti in un assembly Common
Language Runtime.
Procedura dettagliata: implementazione
dell'ereditarietà con gli oggetti COM (Visual Basic)
05/03/2021 • 10 minutes to read • Edit Online
È possibile derivare Visual Basic classi da Public classi negli oggetti com, anche quelle create nelle versioni
precedenti di Visual Basic. Le proprietà e i metodi delle classi ereditate dagli oggetti COM possono essere
sottoposti a override o sottoposti a overload come le proprietà e i metodi di qualsiasi altra classe di base
possono essere sostituiti o sottoposti a overload. L'ereditarietà dagli oggetti COM è utile quando si dispone di
una libreria di classi esistente che non si desidera ricompilare.
Nella procedura seguente viene illustrato come utilizzare Visual Basic 6,0 per creare un oggetto COM
contenente una classe e quindi utilizzarlo come classe base.
NOTE
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero
essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi
elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
2. In Esplora progetti fare clic con il pulsante destro del mouse su Project1 e quindi scegliere Proprietà
Project1 . Verrà visualizzata la finestra di dialogo Proprietà progetto .
3. Nella scheda generale della finestra di dialogo Proprietà progetto modificare il nome del progetto
digitando ComObject1 nel campo nome progetto .
4. In Esplora progetti fare clic con il pulsante destro del mouse su Class1 , quindi scegliere proprietà .
Viene visualizzata la finestra Proprietà per la classe.
5. Modificare la Name Proprietà in MathFunctions .
6. In Esplora progetti fare clic con il pulsante destro del mouse su MathFunctions , quindi scegliere
Visualizza codice . Viene visualizzato l' editor di codice .
7. Aggiungere una variabile locale per conservare il valore della proprietà:
Function AddNumbers(
ByVal SomeNumber As Integer,
ByVal AnotherNumber As Integer) As Integer
10. Creare e registrare l'oggetto COM scegliendo Make ComObject1.dll dal menu file .
NOTE
Sebbene sia anche possibile esporre una classe creata con Visual Basic come oggetto COM, non è un vero oggetto
COM e non può essere utilizzata in questa procedura dettagliata. Per informazioni dettagliate, vedere
interoperabilità com nelle applicazioni .NET Framework.
Assembly di interoperabilità
Nella procedura seguente verrà creato un assembly di interoperabilità, che funge da Bridge tra codice non
gestito (ad esempio un oggetto COM) e il codice gestito utilizzato da Visual Studio. L'assembly di
interoperabilità creato da Visual Basic gestisce molti dettagli sull'utilizzo di oggetti COM, ad esempio il
marshalling di interoperabilità, il processo di creazione del pacchetto di parametri e la restituzione di valori in
tipi di dati equivalenti durante il passaggio da e verso oggetti com. Il riferimento nell'applicazione Visual Basic
punta all'assembly di interoperabilità, non all'oggetto COM effettivo.
Per usare un oggetto COM con Visual Basic 2005 e versioni successive
1. Aprire un nuovo progetto Applicazione Windows in Visual Basic.
2. Scegliere Aggiungi riferimento dal menu Progetto .
Viene visualizzata la finestra di dialogo Aggiungi riferimento .
3. Nella scheda com fare doppio clic ComObject1 nell'elenco nome componente e fare clic su OK .
4. Dal menu Progetto fare clic su Aggiungi nuovo elemento .
La finestra di dialogo Aggiungi nuovo elemento viene visualizzata.
5. Nel riquadro modelli fare clic su classe .
Il nome file predefinito, Class1.vb , viene visualizzato nel campo nome . Modificare questo campo in
MathClass. vb e fare clic su Aggiungi . Viene creata una classe denominata MathClass e viene
visualizzato il relativo codice.
6. Aggiungere il codice seguente all'inizio di MathClass per ereditare dalla classe com.
' The inherited class is called MathFunctions in the base class,
' but the interop assembly appends the word Class to the name.
Inherits ComObject1.MathFunctionsClass
7. Eseguire l'overload del metodo pubblico della classe base aggiungendo il codice seguente a MathClass :
' This method overloads the method AddNumbers from the base class.
Overloads Function AddNumbers(
ByVal SomeNumber As Integer,
ByVal AnotherNumber As Integer) As Integer
La nuova classe eredita le proprietà della classe di base nell'oggetto COM, sovraccarica un metodo e definisce
un nuovo metodo per estendere la classe.
Per testare la classe ereditata
1. Aggiungere un pulsante al form di avvio e quindi fare doppio clic su di esso per visualizzarne il codice.
2. Nella procedura relativa al Click gestore eventi del pulsante aggiungere il codice seguente per creare
un'istanza di MathClass e chiamare i metodi di overload:
Vedi anche
Interoperabilità COM nelle applicazioni .NET Framework
Inherits Statement
Tipo di dati Short
Riferimenti al linguaggio Visual Basic
05/03/2021 • 3 minutes to read • Edit Online
In questa sezione vengono fornite informazioni di riferimento per diversi aspetti del linguaggio Visual Basic.
Sezioni correlate
Compilatore della riga di comando di Visual Basic
Viene descritto come usare il compilatore da riga di comando come alternativa alla compilazione di programmi
dall'interno di Visual Studio Integrated Development Environment (IDE).
Selezionare la versione della lingua Visual Basic
05/03/2021 • 5 minutes to read • Edit Online
Per impostazione predefinita, il compilatore Visual Basic la versione principale più recente della lingua rilasciata.
È possibile scegliere di compilare tutti i progetti usando una nuova versione intermedia del linguaggio. La scelta
di una versione più recente del linguaggio consente al progetto di usare le nuove funzionalità del linguaggio. In
altri scenari può essere necessario verificare che un progetto viene compilato senza errori quando si usa una
versione precedente del linguaggio.
Questa funzionalità separa l'installazione delle nuove versioni dell'SDK e degli strumenti nell'ambiente di
sviluppo dalla decisione di incorporare nuove funzionalità del linguaggio in un progetto. È possibile installare
l'SDK e gli strumenti più recenti nel computer di compilazione. Ogni progetto può essere configurato per usare
una versione specifica del linguaggio in base alla relativa build.
Sono disponibili tre modi per impostare la versione della lingua:
Modificare manualmente il file con estensione vbproj
Impostare la versione della lingua per più progetti in una sottodirectory
Configurare l' -langversion opzione del compilatore
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
Il valore latest utilizza la versione secondaria più recente della lingua Visual Basic. I valori validi sono:
VA LO RE SIGN IF IC ATO
Le stringhe speciali default e latest si risolvono rispettivamente nelle versioni principale e secondaria più
recenti del linguaggio installate nel computer di compilazione.
<Project>
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
</Project>
A questo punto, compila in ogni sottodirectory della directory che contiene il file utilizzerà Visual Basic sintassi
della versione 15,5. Per altre informazioni, vedere l'articolo Personalizzare la compilazione.
Convenzioni tipografiche
ESEM P IO DESC RIZ IO N E
Sub , If , ChDir , Print , True , Debug Le parole chiave specifiche del linguaggio e i membri di
runtime hanno lettere maiuscole iniziali e sono formattati
come illustrato in questo esempio.
Istruzione Module I collegamenti che è possibile fare clic per passare a un'altra
pagina della guida sono formattati come illustrato in questo
esempio.
[Shadows], [ espressione ] Nella sintassi gli elementi facoltativi sono racchiusi tra
parentesi quadre.
{ Public | Friend | Private } Nella sintassi, quando è necessario effettuare una scelta tra
due o più elementi, gli elementi sono racchiusi tra parentesi
graffe e separati da barre verticali.
[ Protected | Friend ] Nella sintassi, quando è possibile scegliere tra due o più
elementi, gli elementi sono racchiusi tra parentesi quadre e
separati da barre verticali.
memberName 1, memberName 2, memberName 3 Più istanze dello stesso segnaposto sono differenziate dagli
indici, come illustrato nell'esempio.
ESEM P IO DESC RIZ IO N E
ALT+F1 Quando vengono visualizzati i segni più (+) tra i nomi delle
chiavi, è necessario mantenere premuto un tasto mentre si
preme l'altro. ALT + F1, ad esempio, consente di mantenere
premuto il tasto ALT mentre si preme il tasto F1.
L'istruzione precedente imposta il valore di sampleString Gli elementi di codice nel testo esplicativo sono visualizzati in
su "Hello, World!" un tipo di carattere a passo fisso, come illustrato in questo
esempio.
' This is a comment. I commenti del codice sono introdotti da un apostrofo (') o
dalla parola chiave REM.
REM This is also a comment.
sampleVar = "This is an " _ Uno spazio seguito da un carattere di sottolineatura (_) alla
fine di una riga indica che l'istruzione continua nella riga
& "example" _ seguente.
Vedi anche
Riferimenti al linguaggio Visual Basic
Parole chiave
Membri della libreria di runtime di Visual Basic
Convenzioni di denominazione di Visual Basic
Procedura: Interrompere e combinare istruzioni nel codice
Commenti nel codice
Membri della libreria di runtime di Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Lo Microsoft.VisualBasic spazio dei nomi contiene classi, moduli, costanti ed enumerazioni che costituiscono la
libreria di runtime Visual Basic. Questi membri della libreria forniscono procedure, proprietà e valori costanti
che è possibile usare nel codice. Ogni modulo e classe rappresenta una particolare categoria di funzionalità.
Tab VerticalTab
vbYesNo vbYesNoCancel
WeekdayName Year
Raise Raise
Write WriteLine
SYD
HideModuleNameAttribute
VbTypeName
Shell Switch
Bounds Length
Length
Randomize Rnd
Vedi anche
Costanti ed enumerazioni
Parole chiave
Parole chiave (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Le tabelle seguenti elencano tutte le parole chiave del linguaggio Visual Basic.
NOTE
Si consiglia di non usare nomi con caratteri di escape poiché possono rendere il codice di difficile lettura e causare errori
difficili da rilevare.
Imports (Tipo e spazio dei Imports (Spazio dei nomi In In (Modificatore generico)
nomi .NET) XML)
NotOverridable Object Of On
&= * *= /
/= \ \= ^
^= + += -
<<=
NOTE
EndIf , GoSub , Variant e Wend vengono mantenuti come parole chiave riservate, anche se non vengono più
utilizzate in Visual Basic. Il significato della parola chiave Let è stato modificato. Let viene ora usata nelle query LINQ.
Per ulteriori informazioni, vedere clausola Let.
Argomenti correlati
T ITO LO DESC RIZ IO N E
Riepilogo delle matrici Elenca gli elementi di linguaggio che consentono di creare,
definire e usare le matrici.
Riepilogo dell'oggetto Collection Elenca gli elementi del linguaggio usati per le raccolte.
Riepilogo del flusso di controllo Elenca le istruzioni usate per eseguire il ciclo e controllare il
flusso di routine.
Riepilogo della conversione Elenca le funzioni usate per convertire numeri, date, ore e
stringhe.
Data Types Summary Elenca i tipi di dati. Elenca anche le funzioni usate per
convertire e verificare i tipi di dati.
Riepilogo di data e ora Elenca gli elementi del linguaggio usati per date e ore.
Riepilogo delle dichiarazioni e delle costanti Elenca le istruzioni usate per dichiarare variabili, costanti,
classi, moduli e altri elementi di programmazione. Elenca
anche gli elementi del linguaggio usati per ottenere
informazioni sugli oggetti, gestire gli eventi e implementare
l'ereditarietà.
Riepilogo di directory e file Elenca le funzioni usate per controllare il file system ed
elaborare i file.
Riepilogo degli errori Elenca gli elementi del linguaggio usati per rilevare e
restituire i valori degli errori di run-time.
Riepilogo degli elementi finanziari Elenca le funzioni usate per eseguire calcoli finanziari.
Riepilogo di input e output Elenca le funzioni che consentono di leggere e scrivere nei
file, gestire i file e stampare l'output.
Riepilogo delle informazioni e dell'interazione Elenca le funzioni usate per eseguire altri programmi,
ottenere argomenti della riga di comando, modificare gli
oggetti COM, recuperare le informazioni di colore e usare le
finestre di dialogo di controllo.
Riepilogo degli elementi matematici Elenca le funzioni usate per eseguire calcoli trigonometrici e
altri calcoli matematici.
Riepilogo del Registro di sistema Elenca le funzioni usate per leggere, salvare ed eliminare le
impostazioni del programma.
Riepilogo della modifica delle stringhe Elenca le funzioni usate per modificare le stringhe.
Vedi anche
Membri della libreria di runtime di Visual Basic
Riepilogo delle matrici (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo dell'oggetto di Collection (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo del flusso di controllo (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo della conversione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Converte un tipo di dati in un altro. CBool, CByte, CDate, CDbl, CDec, CInt, CLng, CSng, CShort,
CStr, CType, Fix , Int
Converte la data in giorno, mese, giorno della settimana o Day, Month, Weekday, Year
anno.
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo dei tipi di dati (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Eseguire la conversione tra tipi di dati CBool, CByte, CChar, CDate, CDbl, CDec, CInt, CLng, CObj,
CShort, CSng, CStr, Fix , Int
Imposta tipi di dati intrinseci Booleano, byte, char, date, Decimal, Double, Integer, Long,
Object, short, Single, String
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo di data e ora (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo delle dichiarazioni e delle costanti (Visual
Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Dichiarare variabili o costanti. Const, Dim, private, protected, public, Shadows, Shared,
static
Dichiarare una classe, un delegato, un'enumerazione, un Classe, delegato, enumerazione, modulo, spazio dei nomi,
modulo, uno spazio dei nomi o una struttura. struttura
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo di directory e file (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
L'uso della My funzionalità garantisce una maggiore produttività e prestazioni nelle operazioni di I/O dei file
rispetto all'uso di questi membri. Per altre informazioni, vedere FileSystem.
A Z IO N E EL EM EN TO L A N GUA GE
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Lettura da file
Scrittura in file
Creazione, eliminazione e spostamento di file e directory
Analisi dei file di testo con l'oggetto TextFieldParser
Riepilogo degli errori (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Intercettare gli errori in fase di esecuzione. In errore, riprendere, provare... Rileva... Infine
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo degli elementi finanziari (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo delle informazioni e dell'interazione
(Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo di input e output (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Ottenere informazioni su un file. EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc,
LOF, Seek
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo degli elementi matematici (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Funzioni matematiche derivate
Parole chiave
Membri della libreria di runtime di Visual Basic
Funzioni matematiche derivate (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Nella tabella seguente vengono illustrate le funzioni matematiche non intrinseche che possono essere derivate
dalle funzioni matematiche intrinseche dell' System.Math oggetto. È possibile accedere alle funzioni
matematiche intrinseche aggiungendo Imports System.Math al file o al progetto.
F UN Z IO N E EQ UIVA L EN T I DERIVAT I
Coseno inverso (ARCCOS (x)) Atan (-x/sqrt (-x * x + 1)) + 2 * Atan (1)
Secante inversa (ASEC (x)) 2 * Atan (1) – Atan (Sign (x)/sqrt (x * x-1))
Tangente iperbolica (tanh (x)) (Exp (x) – exp (-x))/(exp (x) + exp (-x))
Cotangente iperbolica (coth (x)) (Exp (x) + exp (-x))/(exp (x) – exp (-x))
Cosecante iperbolica inversa (Acsch (x)) Log ((Sign (x) * sqrt (x * x + 1) + 1)/x)
La My funzionalità rende la programmazione più veloce e semplice grazie all'accesso intuitivo a metodi,
proprietà ed eventi usati comunemente. In questa tabella sono elencati gli oggetti contenuti in My e le azioni
che possono essere eseguite con ognuno di essi.
A Z IO N E O B JEC T
Accesso alle informazioni sull'applicazione e ai servizi. L'oggetto My.Application è costituito dalle classi seguenti:
Accesso al computer host e alle relative risorse, servizi e dati. My.Computer (Computer)
Vedi anche
Cenni preliminari sul modello di applicazione Visual Basic
Sviluppo con My
Riepilogo degli operatori (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Aritmetico ^, –, * , / , \ , Mod, + , =
Concatenazione &, +
Operazioni logiche/bit per bit Not, and, or, Xor, AndAlso, OrElse
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo del Registro di sistema (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio di Visual Studio e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
L'uso della My funzionalità garantisce una maggiore produttività e prestazioni nelle operazioni del registro di
sistema rispetto a questi elementi. Per altre informazioni, vedere RegistryProxy.
A Z IO N E EL EM EN TO L A N GUA GE
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Lettura e scrittura nel Registro di sistema
Riepilogo della modifica delle stringhe (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le parole chiave del linguaggio Visual Basic e i membri della libreria di runtime sono organizzati in base allo
scopo e usano.
A Z IO N E EL EM EN TO DI L IN GUA GGIO
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Attributi (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic offre diversi attributi che consentono agli oggetti di interagire con codice non gestito e un attributo
che consente l'accesso ai membri del modulo senza il nome del modulo. Nella tabella seguente sono elencati gli
attributi utilizzati da Visual Basic.
VBFixedArrayAttribute Indica che una matrice in una struttura o una variabile non
locale deve essere considerata come una matrice a lunghezza
fissa.
Vedi anche
Panoramica degli attributi
Costanti ed enumerazioni (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Visual Basic fornisce una serie di costanti ed enumerazioni predefinite per gli sviluppatori. Le costanti archiviano
i valori che rimangono costanti durante l'esecuzione di un'applicazione. Le enumerazioni offrono un modo
pratico per usare i set di costanti correlate e per associare i valori delle costanti ai nomi.
Costanti
Costanti di compilazione condizionale
Nella tabella seguente sono elencate le costanti predefinite disponibili per la compilazione condizionale.
Enumerazioni
Nella tabella seguente vengono elencate e descritte le enumerazioni fornite da Visual Basic.
Vedi anche
Riferimenti al linguaggio Visual Basic
Cenni preliminari sulle costanti
Cenni preliminari sulle enumerazioni
Riepilogo dei tipi di dati (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
La tabella seguente illustra i tipi di dati Visual Basic, i tipi di Common Language Runtime di supporto,
l'allocazione nominale dello spazio di archiviazione e i relativi intervalli di valori.
4.94065645841246544 e-
324 tramite
1.79769313486231570 E +
308 † per i valori positivi
Object Object classe 4 byte sulla piattaforma a Qualsiasi tipo può essere
32 bit archiviato in una variabile di
tipo Object
8 byte sulla piattaforma a
64 bit
Definito dall'utente (eredita da ValueType ) Dipende dalla piattaforma Ogni membro della
(struttura) di implementazione struttura ha un intervallo
determinato dal tipo di dati
e indipendente dagli
intervalli degli altri membri
†Nella notazione scientifica"E" si riferisce a una potenza di 10. Quindi 3.56 E + 2 significa 3,56 x 102 o 356 e 3.56
e-2 indica 3,56/102 o 0,0356.
NOTE
Per le stringhe contenenti testo, usare la StrConv funzione per convertire un formato di testo in un altro.
Oltre a specificare un tipo di dati in un'istruzione di dichiarazione, è possibile forzare il tipo di dati di alcuni
elementi di programmazione usando un carattere di tipo. Vedere caratteri di tipo.
Consumo di memoria
Quando si dichiara un tipo di dati Elementary, non è sicuro supporre che il consumo di memoria corrisponda a
quello dell'allocazione nominale di archiviazione. Questo problema è dovuto alle considerazioni seguenti:
Assegnazione di archiviazione. Il Common Language Runtime può assegnare lo spazio di
archiviazione in base alle caratteristiche correnti della piattaforma in cui è in esecuzione l'applicazione. Se
la memoria è quasi piena, potrebbe comprimere gli elementi dichiarati nel più vicino possibile. In altri
casi, è possibile allineare gli indirizzi di memoria ai limiti hardware naturali per ottimizzare le prestazioni.
Larghezza della piattaforma. L'assegnazione di archiviazione in una piattaforma a 64 bit è diversa
dall'assegnazione in una piattaforma a 32 bit.
Tipi di dati compositi
Le stesse considerazioni si applicano a ogni membro di un tipo di dati composito, ad esempio una struttura o
una matrice. Non è possibile basarsi semplicemente sull'aggiunta delle allocazioni di archiviazione nominale dei
membri del tipo. Sono inoltre presenti altre considerazioni, ad esempio le seguenti:
Overhead. Alcuni tipi compositi hanno requisiti di memoria aggiuntivi. Una matrice, ad esempio, utilizza
memoria aggiuntiva per la matrice stessa, nonché per ogni dimensione. In una piattaforma a 32 bit,
questo overhead è attualmente di 12 byte più 8 byte per ogni dimensione. In una piattaforma a 64 bit
questo requisito è raddoppiato.
Layout di archiviazione. Non è possibile presupporre in modo sicuro che l'ordine di archiviazione in
memoria corrisponda a quello dell'ordine di dichiarazione. Non è inoltre possibile creare presupposti
sull'allineamento dei byte, ad esempio un limite di 2 o 4 byte. Se si definisce una classe o una struttura ed
è necessario controllare il layout di archiviazione dei relativi membri, è possibile applicare l'
StructLayoutAttribute attributo alla classe o alla struttura.
Overhead oggetto
Un Object riferimento a un tipo di dati elementare o composito utilizza 4 byte oltre ai dati contenuti nel tipo di
dati.
Vedi anche
StrConv
StructLayoutAttribute
CString
Riepilogo della conversione
Caratteri tipo
Utilizzo efficiente dei tipi di dati
Tipo di dati Boolean (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Include valori che possono essere solo True o False . Le parole chiave True e False corrispondono ai due
stati di Boolean variabili.
Commenti
Usare il tipo di dati booleano (Visual Basic) per contenere valori a due Stati, ad esempio true/false, Yes/No o
on/off.
Il valore predefinito di Boolean è False .
Boolean i valori non vengono archiviati come numeri e i valori archiviati non sono destinati a essere equivalenti
ai numeri. Non scrivere mai codice che si basa su valori numerici equivalenti per True e False . Laddove
possibile, è consigliabile limitare l'utilizzo delle Boolean variabili ai valori logici per i quali sono stati progettati.
Conversione di tipi
Quando Visual Basic converte i valori del tipo di dati numerico in Boolean , 0 diventa False e tutti gli altri
valori diventano True . Quando Visual Basic converte Boolean i valori in tipi numerici, False diventa 0 e True
diventa-1.
Quando si esegue la conversione tra Boolean valori e tipi di dati numerici, tenere presente che i metodi di
conversione .NET Framework non producono sempre gli stessi risultati delle parole chiave di conversione di
Visual Basic. Ciò è dovuto al fatto che la conversione Visual Basic mantiene il comportamento compatibile con le
versioni precedenti. Per ulteriori informazioni, vedere "il tipo booleano non viene convertito in un tipo numerico
con precisione" nella risoluzione dei problemirelativi ai tipi di dati.
Esempio
Nell'esempio seguente runningVB è una Boolean variabile che archivia una semplice impostazione Yes/No.
Vedi anche
System.Boolean
Tipi di dati
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Risoluzione dei problemi relativi ai tipi di dati
CType Function
Tipo di dati byte (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Include interi senza segno a 8 bit (1 byte) che variano in valore compreso tra 0 e 255.
Commenti
Utilizzare il Byte tipo di dati per contenere dati binari.
Il valore predefinito di Byte è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Dim number As Byte = &H_6A
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
Esempio
Nell'esempio seguente b è una Byte variabile. Le istruzioni illustrano l'intervallo della variabile e
l'applicazione degli operatori di spostamento di bit.
' The valid range of a Byte variable is 0 through 255.
Dim b As Byte
b = 30
' The following statement causes an error because the value is too large.
'b = 256
' The following statement causes an error because the value is negative.
'b = -5
' The following statement sets b to 6.
b = CByte(5.7)
Vedi anche
System.Byte
Tipi di dati
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Tipo di dati Char (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Include punti di codice senza segno a 16 bit (2 byte) compresi tra 0 e 65535. Ogni punto di codice, o codice
carattere, rappresenta un singolo carattere Unicode.
Commenti
Utilizzare il Char tipo di dati quando è necessario mantenere un solo carattere e non è necessario il
sovraccarico di String . In alcuni casi è possibile usare Char() , una matrice di Char elementi, per mantenere
più caratteri.
Il valore predefinito di Char è il carattere con un punto di codice 0.
Caratteri Unicode
I primi 128 punti di codice (0-127) di Unicode corrispondono a lettere e simboli in una tastiera standard degli
Stati Uniti. Questi primi 128 punti di codice corrispondono a quelli definiti dal set di caratteri ASCII. I due punti di
codice 128 (128-255) rappresentano caratteri speciali, ad esempio lettere di alfabeto latino, accenti, simboli di
valuta e frazioni. Unicode usa i punti di codice rimanenti (256-65535) per un'ampia gamma di simboli, inclusi i
caratteri testuali in tutto il mondo, i segni diacritici e i simboli matematici e tecnici.
È possibile utilizzare metodi quali IsDigit e IsPunctuation su una Char variabile per determinare la relativa
classificazione Unicode.
Conversione di tipi
Visual Basic non esegue la conversione direttamente tra Char e i tipi numerici. È possibile utilizzare la Asc AscW
funzione o per convertire un Char valore in un oggetto Integer che rappresenta il punto di codice. È possibile
usare la Chr ChrW funzione o per convertire un Integer valore in un oggetto con Char tale punto di codice.
Se l'opzione di controllo del tipo (l' istruzione Option Strict) è impostata su on, è necessario aggiungere il
carattere di tipo letterale a un valore letterale stringa a carattere singolo per identificarlo come Char tipo di dati.
Questa condizione è illustrata nell'esempio seguente. La prima assegnazione alla charVar variabile genera
l'errore del compilatore BC30512 perché Option Strict è on. Il secondo compila correttamente perché il c
carattere di tipo letterale identifica il valore letterale come Char valore.
Option Strict On
Module CharType
Public Sub Main()
Dim charVar As Char
' This statement generates compiler error BC30512 because Option Strict is On.
charVar = "Z"
Vedi anche
System.Char
Asc
AscW
Chr
ChrW
Tipi di dati
Tipo di dati String
CString
Riepilogo della conversione
Procedura: Chiamare una funzione Windows che accetta tipi senza segno
Utilizzo efficiente dei tipi di dati
Tipo di dati Date (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Contiene valori a 64 bit (8 byte) conformi alle specifiche IEEE che rappresentano le date comprese tra l'1
gennaio dell'anno 0001 e il 31 dicembre dell'anno 9999 e le ore comprese tra le 00.00.00 (mezzanotte) e le
23.59.59.9999999. Ogni incremento rappresenta 100 nanosecondi di tempo trascorso dall'inizio del 1° gennaio
dell'anno 1 del calendario gregoriano. Il valore massimo rappresenta 100 nanosecondi prima dell'inizio del 1°
gennaio dell'anno 10000.
Commenti
Usare il tipo di dati Date per contenere valori di data, di ora o entrambi.
Il valore predefinito di Date è 00.00.00 (mezzanotte) del 1° gennaio 0001.
È possibile ottenere la data e l'ora corrente dalla classe DateAndTime.
Requisiti di formato
È necessario racchiudere un valore letterale Date tra simboli di cancelletto ( # # ). Il valore della data deve
essere specificato nel formato M/g/aaaa, ad esempio #5/31/1993# , oppure aaaa-MM-gg, ad esempio
#1993-5-31# . Quando si specifica prima l'anno, è possibile usare le barre. Questo requisito è indipendente dalle
impostazioni locali usate e dalle impostazioni relative al formato di data e ora del computer.
Il motivo di questa limitazione è che il significato del codice non deve mai cambiare a seconda delle
impostazioni locali con cui l'applicazione viene eseguita. Si supponga di impostare come hardcoded il valore
letterale Date``#3/4/1998# per rappresentare la data del 4 marzo 1998. Se nelle impostazioni locali è definito il
formato mm/gg/aaaa, la compilazione di 3/4/1998 viene eseguita nel modo desiderato. Si supponga, tuttavia, di
distribuire l'applicazione in molti paesi o aree geografiche. Se nelle impostazioni locali è definito il formato
gg/mm/aaaa, il valore letterale hardcoded verrà compilato come 3 aprile 1998. Se invece è definito il formato
aaaa/mm/gg, il valore letterale non sarà valido (1998 aprile 0003) e verrà generato un errore del compilatore.
Soluzioni alternative
Per convertire un valore letterale Date nel formato delle impostazioni locali in uso o in un formato
personalizzato, fornire il valore letterale alla funzione Format, specificando un formato di data predefinito o
definito dall'utente. L'esempio seguente illustra questa operazione.
In alternativa, si può usare uno dei costruttori di overload della struttura DateTime per assemblare un valore di
data e ora. L'esempio seguente crea un valore per rappresentare le ore 12.14 del 31 maggio 1993.
Formato dell'ora
È possibile specificare il valore dell'ora nel formato 12 o 24 ore, ad esempio #1:15:30 PM# o #13:15:30# .
Tuttavia, se non si specificano i minuti o i secondi, è necessario indicare AM o PM.
Valori predefiniti di data e ora
Se non si include una data in un valore letterale di data/ora, Visual Basic imposta la parte del valore relativa alla
data sul 1° gennaio 0001. Se non si include un'ora in un valore letterale di data/ora, Visual Basic imposta la
parte del valore relativa all'ora sull'inizio della giornata, ossia mezzanotte (00.00.00).
Conversione di tipi
Se un valore Date viene convertito nel tipo String , Visual Basic esegue il rendering della data e dell'ora
rispettivamente in base al formato breve e al formato 12 o 24 ore specificati nelle impostazioni locali di runtime.
Esempio
Una variabile o una costante del tipo di dati Date contiene sia la data che l'ora. Questa condizione è illustrata
nell'esempio seguente.
Vedi anche
System.DateTime
Tipi di dati
Stringhe di formato di data e ora standard
Stringhe di formato di data e ora personalizzato
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Tipo di dati Decimal (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Contiene valori Signed a 128 bit (16 byte) che rappresentano numeri di tipo Integer a 96 bit (12 byte) scalati in
base a una potenza variabile di 10. Il fattore di scala specifica il numero di cifre a destra del separatore decimale.
l'intervallo è compreso tra 0 e 28. Con una scala pari a 0 (senza posizioni decimali), il valore massimo possibile è
+/-79.228.162.514.264.337.593.543.950.335 (+/-7.9228162514264337593543950335E + 28). Con 28 cifre
decimali, il valore più grande è +/-7.9228162514264337593543950335 e il valore diverso da zero è +/-
0,0000000000000000000000000001 (+/-1E-28).
Commenti
Il Decimal tipo di dati fornisce il maggior numero di cifre significative per un numero. Supporta fino a 29 cifre
significative e può rappresentare valori superiori a 7,9228 x 10 ^ 28. È particolarmente adatto per i calcoli, ad
esempio Financial, che richiedono un numero elevato di cifre ma non tollerano errori di arrotondamento.
Il valore predefinito di Decimal è 0.
Range
Potrebbe essere necessario usare il D carattere tipo per assegnare un valore di grandi dimensioni a una
Decimal variabile o a una costante. Questo requisito è dovuto al fatto che il compilatore interpreta un valore
letterale come a Long meno che un carattere di tipo letterale non segua il valore letterale, come illustrato
nell'esempio seguente.
La dichiarazione per bigDec1 non produce un overflow perché il valore assegnato è compreso nell'intervallo
per Long . Il Long valore può essere assegnato alla Decimal variabile.
La dichiarazione per bigDec2 genera un errore di overflow perché il valore assegnato è troppo grande per
Long . Poiché il valore letterale numerico non può essere prima interpretato come Long , non può essere
assegnato alla Decimal variabile.
Per bigDec3 , il carattere di tipo letterale D risolve il problema forzando il compilatore a interpretare il valore
letterale come Decimal anziché come Long .
Vedi anche
System.Decimal
Decimal
Math.Round
Tipi di dati
Tipo di dati Single
Tipo di dati Double
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Tipo di dati Double (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Include numeri a virgola mobile a precisione doppia IEEE a 64 bit (8 byte) che variano in base al valore da-
1.79769313486231570 E + 308 a-4.94065645841246544 E-324 per i valori negativi e da
4.94065645841246544 E-324 a 1.79769313486231570 E + 308 per i valori positivi. I numeri a precisione
doppia archiviano un'approssimazione di un numero reale.
Commenti
Il Double tipo di dati fornisce le Magnitude più grandi e minime possibili per un numero.
Il valore predefinito di Double è 0.
' Visual Basic expands the 4 in the statement Dim dub As Double = 4R to 4.0:
Dim dub As Double = 4.0R
Dim num# = 3
Vedi anche
System.Double
Tipi di dati
Tipo di dati Decimal
Tipo di dati Single
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Risoluzione dei problemi relativi ai tipi di dati
Caratteri tipo
Tipo di dati Integer (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Contiene valori integer con segno a 32 bit (4 byte) in un intervallo compreso tra -2.147.483.648 e
2.147.483.647.
Commenti
Il tipo di dati Integer consente di ottenere prestazioni ottimali su processori a 32 bit. Gli altri tipi integrali
vengono caricati e memorizzati più lentamente.
Il valore predefinito di Integer è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
Dim intValue1 As Integer = 90_946
Console.WriteLine(intValue1)
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
I valori letterali numerici possono includere anche il I carattere tipo per indicare il Integer tipo di dati, come
illustrato nell'esempio seguente.
Range
Se si tenta di impostare una variabile di un tipo integrale su un numero esterno all'intervallo valido per tale tipo,
verrà generato un errore. Se si tenta di impostarlo in una frazione, il numero viene arrotondato all'intero pari
più vicino. Se il numero è egualmente vicino a due valori interi, il valore viene arrotondato all'intero pari più
vicino. Questo comportamento riduce al minimo gli errori di arrotondamento risultanti dall'arrotondamento
coerente di un valore del punto centrale in una singola direzione. Nel codice riportato di seguito vengono
illustrati esempi di arrotondamento.
Vedi anche
System.Int32
Tipi di dati
Tipo di dati Long
Tipo di dati Short
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Tipo di dati Long (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Commenti
Utilizzare il Long tipo di dati per contenere numeri interi troppo grandi per il tipo di Integer dati.
Il valore predefinito di Long è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
Dim longValue1 As Long = 4_294_967_296
Console.WriteLine(longValue1)
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
I valori letterali numerici possono includere anche il L carattere tipo per indicare il Long tipo di dati, come
illustrato nell'esempio seguente.
Vedi anche
Int64
Tipi di dati
Tipo di dati Integer
Tipo di dati Short
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Object Data Type
05/03/2021 • 5 minutes to read • Edit Online
Include indirizzi che fanno riferimento a oggetti. È possibile assegnare qualsiasi tipo di riferimento (stringa,
matrice, classe o interfaccia) a una Object variabile. Una Object variabile può anche fare riferimento a dati di
qualsiasi tipo di valore (numeric,,,, Boolean Char Date Structure o Enumeration).
Commenti
Il Object tipo di dati può puntare a dati di qualsiasi tipo di dati, inclusa qualsiasi istanza di oggetto riconosciuta
dall'applicazione. Usare Object quando non si conosce in fase di compilazione a quale tipo di dati può puntare
la variabile.
Il valore predefinito di Object è Nothing (un riferimento null).
Tipi di dati
È possibile assegnare una variabile, una costante o un'espressione di qualsiasi tipo di dati a una Object
variabile. Per determinare il tipo di dati Object a cui fa attualmente riferimento una variabile, è possibile usare il
GetTypeCode metodo della System.Type classe. Questa condizione è illustrata nell'esempio seguente.
Il Object tipo di dati è un tipo di riferimento. Tuttavia, Visual Basic considera una Object variabile come tipo di
valore quando fa riferimento ai dati di un tipo di valore.
Archiviazione
Indipendentemente dal tipo di dati a cui fa riferimento, una Object variabile non contiene il valore di dati
stesso, bensì un puntatore al valore. Usa sempre quattro byte nella memoria del computer, ma non include
l'archiviazione per i dati che rappresentano il valore della variabile. A causa del codice che usa il puntatore per
individuare i dati, le Object variabili che mantengono i tipi di valore sono leggermente più lente per accedere
alle variabili tipizzate in modo esplicito.
Esempio
Nell'esempio seguente viene illustrata una Object variabile che punta a un'istanza dell'oggetto.
Vedi anche
Object
Tipi di dati
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Procedura: determinare se due oggetti sono correlati
Procedura: determinare se due oggetti sono identici
Tipo di dati SByte (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Commenti
Utilizzare il SByte tipo di dati per contenere valori integer che non richiedono la larghezza dei dati completa di
Integer o persino la lunghezza della metà dei dati di Short . In alcuni casi, il Common Language Runtime
potrebbe essere in grado di comprimere le variabili in modo SByte stretto e di risparmiare sull'utilizzo della
memoria.
Il valore predefinito di SByte è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Dim number As SByte = &H_F9
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
Se il valore letterale integer è esterno all'intervallo di SByte , vale a dire se è minore di SByte.MinValue o
maggiore di SByte.MaxValue, si verifica un errore di compilazione. Quando un valore letterale integer non ha
alcun suffisso, viene dedotto un valore integer . Se il valore letterale integer non è compreso nell'intervallo del
Integer tipo, viene dedotto un valore Long . Ciò significa che, negli esempi precedenti, i valori letterali numerici
0x9A e 0b10011010 vengono interpretati come interi con segno a 32 bit con un valore di 156, che supera
SByte.MaxValue . Per compilare correttamente codice simile a questo che assegna un Integer non decimale a un
SByte , è possibile eseguire una delle operazioni seguenti:
Disabilitare i controlli dei limiti Integer compilando con l' /removeintchecks opzione del compilatore.
Usare un carattere tipo per definire in modo esplicito il valore letterale che si vuole assegnare a SByte .
Nell'esempio seguente viene assegnato un valore letterale negativo Short a un oggetto SByte . Si noti
che, per i numeri negativi, è necessario impostare il bit più significativo della parola più ordinata del
valore letterale numerico. Nel caso dell'esempio, si tratta del bit 15 del valore letterale Short .
Vedi anche
System.SByte
Tipi di dati
CString
Riepilogo della conversione
Tipo di dati Short
Tipo di dati Integer
Tipo di dati Long
Utilizzo efficiente dei tipi di dati
Tipo di dati short (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Commenti
Utilizzare il Short tipo di dati per contenere valori integer per i quali non è necessaria la larghezza dei dati
completa di Integer . In alcuni casi, il Common Language Runtime è in grado di comprimere le variabili in
modo Short stretto e di risparmiare sull'utilizzo della memoria.
Il valore predefinito di Short è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
I valori letterali numerici possono includere anche il S carattere tipo per indicare il Short tipo di dati, come
illustrato nell'esempio seguente.
Vedi anche
System.Int16
Tipi di dati
CString
Riepilogo della conversione
Tipo di dati Integer
Tipo di dati Long
Utilizzo efficiente dei tipi di dati
Tipo di dati Single (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Include numeri a virgola mobile a precisione singola IEEE a 32 bit (4 byte) compresi tra-3.4028235 E + 38 e-
401298E E-45 per i valori negativi e da 401298E E-45 a 3.4028235 E + 38 per i valori positivi. I numeri a
precisione singola archiviano un'approssimazione di un numero reale.
Commenti
Utilizzare il Single tipo di dati per contenere valori a virgola mobile che non richiedono la larghezza dei dati
completa di Double . In alcuni casi è possibile che il Common Language Runtime sia in grado di comprimere le
variabili in modo Single stretto e di risparmiare sull'utilizzo della memoria.
Il valore predefinito di Single è 0.
Vedi anche
System.Single
Tipi di dati
Tipo di dati Decimal
Tipo di dati Double
CString
Riepilogo della conversione
Utilizzo efficiente dei tipi di dati
Risoluzione dei problemi relativi ai tipi di dati
Tipo di dati String (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Include sequenze di punti di codice senza segno a 16 bit (2 byte) che variano da 0 a 65535. Ogni punto di
codice, o codice carattere, rappresenta un singolo carattere Unicode. Una stringa può contenere da 0 a circa 2
miliardi (2 ^ 31) caratteri Unicode.
Commenti
Usare il String tipo di dati per mantenere più caratteri senza l'overhead di gestione della matrice di Char() ,
una matrice di Char elementi.
Il valore predefinito di String è Nothing (un riferimento null). Si noti che questa operazione non corrisponde
alla stringa vuota (valore "" ).
Caratteri Unicode
I primi 128 punti di codice (0-127) di Unicode corrispondono a lettere e simboli in una tastiera standard degli
Stati Uniti. Questi primi 128 punti di codice corrispondono a quelli definiti dal set di caratteri ASCII. I due punti di
codice 128 (128-255) rappresentano caratteri speciali, ad esempio lettere di alfabeto latino, accenti, simboli di
valuta e frazioni. Unicode usa i punti di codice rimanenti (256-65535) per un'ampia gamma di simboli. Sono
inclusi i caratteri testuali, i segni diacritici e i simboli matematici e tecnici in tutto il mondo.
È possibile utilizzare metodi quali IsDigit e IsPunctuation su un singolo carattere in una String variabile per
determinare la relativa classificazione Unicode.
Requisiti di formato
È necessario racchiudere un String valore letterale racchiuso tra virgolette ( " " ). Se è necessario includere
una virgoletta come uno dei caratteri nella stringa, è possibile utilizzare due virgolette contigue ( "" ). Questa
condizione è illustrata nell'esempio seguente.
Si noti che le virgolette contigue che rappresentano le virgolette nella stringa sono indipendenti dalle virgolette
che iniziano e terminano il String valore letterale.
Una stringa creata da un altro componente potrebbe essere riempita con spazi iniziali o finali. Se si riceve una
stringa di questo tipo, è possibile usare le Trim LTrim funzioni, e RTrim per rimuovere questi spazi.
Per ulteriori informazioni sulle modifiche delle stringhe, vedere stringhe.
Vedi anche
System.String
Tipi di dati
Tipo di dati Char
CString
Riepilogo della conversione
Procedura: Chiamare una funzione Windows che accetta tipi senza segno
Utilizzo efficiente dei tipi di dati
UInteger (tipo di dati)
05/03/2021 • 5 minutes to read • Edit Online
Commenti
Il UInteger tipo di dati fornisce il valore senza segno più grande nella larghezza dei dati più efficiente.
Il valore predefinito di UInteger è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
Dim uintValue1 As UInteger = 3_000_000_000ui
Console.WriteLine(uintValue1)
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
I valori letterali numerici possono includere anche il UI ui carattere di tipo o per indicare il UInteger tipo di
dati, come illustrato nell'esempio riportato di seguito.
Vedi anche
UInt32
Tipi di dati
CString
Riepilogo della conversione
Procedura: Chiamare una funzione Windows che accetta tipi senza segno
Utilizzo efficiente dei tipi di dati
Tipo di dati ULong (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Include interi senza segno a 64 bit (8 byte) compresi tra 0 e 18.446.744.073.709.551.615 (più di 1,84 volte 10 ^
19).
Commenti
Utilizzare il ULong tipo di dati per contenere dati binari troppo grandi per UInteger o i valori Unsigned Integer
più grandi possibili.
Il valore predefinito di ULong è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
Dim longValue1 As Long = 4_294_967_296
Console.WriteLine(longValue1)
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
I valori letterali numerici possono includere anche il UL ul carattere di tipo o per indicare il ULong tipo di dati,
come illustrato nell'esempio riportato di seguito.
Vedi anche
UInt64
Tipi di dati
CString
Riepilogo della conversione
Procedura: Chiamare una funzione Windows che accetta tipi senza segno
Utilizzo efficiente dei tipi di dati
Tipo di dati definito dall'utente
05/03/2021 • 4 minutes to read • Edit Online
Include i dati in un formato definito dall'utente. L' Structure istruzione definisce il formato.
Le versioni precedenti di Visual Basic supportano il tipo definito dall'utente (UDT). La versione corrente espande
il tipo definito dall'utente a una struttura. Una struttura è una concatenazione di uno o più membri di diversi tipi
di dati. Visual Basic considera una struttura come una singola unità, sebbene sia anche possibile accedere
singolarmente ai relativi membri.
Commenti
Definire e usare un tipo di dati di struttura quando è necessario combinare diversi tipi di dati in una singola
unità o quando nessuno dei tipi di dati elementari soddisfa le proprie esigenze.
Il valore predefinito di un tipo di dati della struttura è costituito dalla combinazione dei valori predefiniti di
ognuno dei relativi membri.
Esempio
Nel paradigma seguente viene illustrato il contorno della dichiarazione di una struttura.
Vedi anche
ValueType
StructLayoutAttribute
Tipi di dati
CString
Riepilogo della conversione
Istruzione Structure
Widening
Narrowing
Strutture
Utilizzo efficiente dei tipi di dati
Tipo di dati UShort (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Commenti
Utilizzare il UShort tipo di dati per contenere dati binari troppo grandi per Byte .
Il valore predefinito di UShort è 0.
NOTE
Usare il prefisso &h o &H per indicare un valore letterale esadecimale, il prefisso &b o &B per indicare un valore
letterale binario e il prefisso &o o &O per indicare un valore letterale ottale. I valori letterali decimali non hanno prefissi.
A partire da Visual Basic 2017, è anche possibile usare il carattere di sottolineatura, _ , come separatore di cifre
per migliorare la leggibilità, come illustrato nell'esempio seguente.
A partire da Visual Basic 15,5, è anche possibile usare il carattere di sottolineatura ( _ ) come separatore iniziale
tra il prefisso e le cifre esadecimali, binarie o ottali. Ad esempio:
Per usare il carattere di sottolineatura come separatore iniziale, è necessario aggiungere l'elemento seguente al
file di progetto (*.vbproj) di Visual Basic:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere Impostazione della versione del linguaggio Visual Basic.
I valori letterali numerici possono includere anche il US us carattere di tipo o per indicare il UShort tipo di
dati, come illustrato nell'esempio riportato di seguito.
Vedi anche
UInt16
Tipi di dati
CString
Riepilogo della conversione
Procedura: Chiamare una funzione Windows che accetta tipi senza segno
Utilizzo efficiente dei tipi di dati
Direttiva #Const
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
#Const constname = expression
Parti
constname
Obbligatorio. Nome della costante da definire.
expression
Obbligatorio. Valore letterale, altra costante del compilatore condizionale o qualsiasi combinazione che includa
tutti gli operatori aritmetici o logici eccetto Is .
Commenti
Le costanti del compilatore condizionale sono sempre private per il file in cui sono visualizzate. Non è possibile
creare costanti del compilatore pubbliche usando la #Const direttiva. è possibile crearle solo nell'interfaccia
utente o con l' /define opzione del compilatore.
È possibile utilizzare solo le costanti del compilatore condizionale e i valori letterali in expression . L'uso di una
costante standard definita con Const causa un errore. Viceversa, è possibile utilizzare le costanti definite con la
#Const parola chiave solo per la compilazione condizionale. Le costanti possono anche essere indefinite, nel
qual caso hanno un valore di Nothing .
Esempio
In questo esempio viene usata la direttiva #Const .
Vedi anche
-define (Visual Basic)
#If... Direttive then... #Else
Istruzione Const
Compilazione condizionale
Istruzione If...Then...Else
Direttiva #ExternalSource
05/03/2021 • 2 minutes to read • Edit Online
Indica un mapping tra le righe specifiche del codice sorgente e il testo esterno all'origine.
Sintassi
#ExternalSource( StringLiteral , IntLiteral )
[ LogicalLine+ ]
#End ExternalSource
Parti
StringLiteral
Percorso dell'origine esterna.
IntLiteral
Il numero di riga della prima riga dell'origine esterna.
LogicalLine
Riga in cui si è verificato l'errore nell'origine esterna.
#End ExternalSource
Termina il blocco #ExternalSource .
Commenti
Questa direttiva viene utilizzata solo dal compilatore e dal debugger.
Un file di origine può includere direttive di origine esterne, che indicano un mapping tra righe specifiche di
codice nel file di origine e testo esterno all'origine, ad esempio un file aspx. Se durante la compilazione vengono
rilevati errori nel codice sorgente designato, vengono identificati come provenienti dall'origine esterna.
Le direttive external source non hanno alcun effetto sulla compilazione e non possono essere annidate. Sono
destinate esclusivamente all'uso interno da parte dell'applicazione.
Vedi anche
Compilazione condizionale
Direttive #If...Then...#Else
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
#If expression Then
statements
[ #ElseIf expression Then
[ statements ]
...
#ElseIf expression Then
[ statements ] ]
[ #Else
[ statements ] ]
#End If
Parti
expression
Obbligatorio per #If le #ElseIf istruzioni e, facoltativo altrove. Qualsiasi espressione, costituita
esclusivamente da una o più costanti del compilatore condizionali, valori letterali e operatori, che restituiscono
True o False .
statements
Obbligatorio per il #If blocco di istruzioni, facoltativo altrove. Visual Basic linee di programma o direttive del
compilatore compilate se l'espressione associata restituisce True .
#End If
Termina il #If blocco di istruzioni.
Commenti
Nell'area, il comportamento delle #If...Then...#Else direttive appare come quello delle If...Then...Else
istruzioni. Tuttavia, le #If...Then...#Else direttive valutano gli elementi compilati dal compilatore, mentre le
If...Then...Else istruzioni valutano le condizioni in fase di esecuzione.
La compilazione condizionale viene in genere utilizzata per compilare lo stesso programma per piattaforme
diverse. Viene inoltre usato per impedire che il codice di debug venga visualizzato in un file eseguibile. Il codice
escluso durante la compilazione condizionale viene omesso completamente dal file eseguibile finale, quindi non
ha alcun effetto sulle dimensioni o sulle prestazioni.
Indipendentemente dal risultato di una valutazione, tutte le espressioni vengono valutate mediante
Option Compare Binary . L' Option Compare istruzione non influisce sulle espressioni #If nelle #ElseIf
istruzioni e.
NOTE
Non esiste alcuna forma a riga singola #If delle #Else #ElseIf direttive,, e #End If . Non è possibile visualizzare
altro codice nella stessa riga delle direttive.
Le istruzioni all'interno di un blocco di compilazione condizionale devono essere istruzioni logiche complete. Ad
esempio, non è possibile compilare in modo condizionale solo gli attributi di una funzione, ma è possibile
dichiarare la funzione in modo condizionale insieme ai relativi attributi:
Esempio
Questo esempio usa il #If...Then...#Else costrutto per determinare se compilare determinate istruzioni.
#Const CustomerNumber = 36
#If CustomerNumber = 35 Then
' Insert code to be compiled for customer # 35.
#ElseIf CustomerNumber = 36 Then
' Insert code to be compiled for customer # 36.
#Else
' Insert code to be compiled for all other customers.
#End If
Vedi anche
#Const (direttiva)
Istruzione If...Then...Else
Compilazione condizionale
System.Diagnostics.ConditionalAttribute
Direttiva #Region
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
#Region "identifier_string"
#End Region
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Usare la direttiva #Region per specificare un blocco di codice da espandere o comprimere durante l'uso della
funzionalità di struttura dell'editor di Visual Studio Code. È possibile inserire, o annidare, le aree all'interno di
altre aree per raggruppare aree simili.
Esempio
In questo esempio viene usata la direttiva #Region .
#Region "MathFunctions"
' Insert code for the Math functions here.
#End Region
Vedi anche
#If... Direttive then... #Else
struttura
Procedura: Comprimere e nascondere sezioni di codice
Direttive #Disable e #Enable (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Le #Disable #Enable direttive e sono Visual Basic direttive del compilatore del codice sorgente. Vengono usati
per disabilitare e riabilitare avvisi specifici per le aree di codice.
Vedi anche
Riferimenti al linguaggio Visual Basic
Come disattivare gli avvisi di analisi del codice
Funzioni (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Gli argomenti di questa sezione contengono tabelle delle funzioni membro di runtime di Visual Basic.
NOTE
È anche possibile creare funzioni e chiamarle. Per alte informazioni, vedere Istruzione Function e Procedura: Creare una
routine che restituisce un valore.
Sezioni correlate
Riferimenti al linguaggio Visual Basic
Funzioni di conversione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Asc
AscW
CBool (funzione)
CByte (funzione)
CChar (funzione)
CDate (funzione)
CDbl (funzione)
CDec (funzione)
Chr
ChrW
Funzione CInt
CLng (funzione)
CObj (funzione)
CSByte (funzione)
CShort (funzione)
CSng (funzione)
CStr (funzione)
CType Function
CUInt (funzione)
CULng (funzione)
CUShort (funzione)
Format
Hex
Oct
Str
Val
Vedi anche
CString
Conversione dei tipi di dati
Funzioni matematiche (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
I metodi della System.Math classe forniscono funzioni trigonometriche, logaritmiche e altre funzioni
matematiche comuni.
Commenti
Nella tabella seguente sono elencati i metodi della System.Math classe. È possibile usarli in un programma
Visual Basic:
La tabella seguente elenca i metodi della System.Math classe che non esistono in .NET Framework ma che
vengono aggiunti in .NET standard o .NET Core:
Acosh Restituisce l'angolo il cui coseno A partire da .NET Core 2,1 e .NET
iperbolico è il numero specificato. Standard 2,1
Asinh Restituisce l'angolo il cui seno A partire da .NET Core 2,1 e .NET
iperbolico è il numero specificato. Standard 2,1
Atanh Restituisce l'angolo la cui tangente A partire da .NET Core 2,1 e .NET
iperbolica è il numero specificato. Standard 2,1
Clamp Restituisce il valore value fissato A partire da .NET Core 2,0 e .NET
all'intervallo inclusivo di min e max . Standard 2,1
M ETO DO . N ET DESC RIZ IO N E DISP O N IB IL E IN
ILogB Restituisce la parte intera del logaritmo A partire da .NET Core 3,0
in base 2 del numero specificato.
MaxMagnitude Restituisce la grandezza più elevata tra A partire da .NET Core 3,0
due numeri a virgola mobile e
precisione doppia.
Per usare queste funzioni senza qualifica, importare lo System.Math spazio dei nomi nel progetto aggiungendo
il codice seguente all'inizio del file di origine:
Imports System.Math
Esempio-ABS
In questo esempio viene usato il Abs metodo della Math classe per calcolare il valore assoluto di un numero.
Esempio: atan
In questo esempio viene usato il Atan metodo della Math classe per calcolare il valore di pi greco.
Esempio-cos
In questo esempio viene usato il Cos metodo della Math classe per restituire il coseno di un angolo.
Esempio: Exp
In questo esempio viene usato il Exp metodo della Math classe per restituire e elevato a una potenza.
Esempio-log
In questo esempio viene usato il Log metodo della Math classe per restituire il logaritmo naturale di un numero.
Esempio-round
In questo esempio viene usato il Round metodo della Math classe per arrotondare un numero all'intero più
vicino.
Esempio-firma
In questo esempio viene usato il Sign metodo della Math classe per determinare il segno di un numero.
Dim mySign1 As Integer = Math.Sign(12)
Dim mySign2 As Integer = Math.Sign(-2.4)
Dim mySign3 As Integer = Math.Sign(0)
Console.WriteLine(mySign1)
Console.WriteLine(mySign2)
Console.WriteLine(mySign3)
' The code produces the following output:
' 1
' -1
' 0
Esempio-sin
In questo esempio viene usato il Sin metodo della Math classe per restituire il seno di un angolo.
Esempio-sqrt
In questo esempio viene usato il Sqrt metodo della Math classe per calcolare la radice quadrata di un numero.
Esempio-Tan
In questo esempio viene usato il Tan metodo della Math classe per restituire la tangente di un angolo.
Vedi anche
Rnd
Randomize
NaN
Funzioni matematiche derivate
Operatori aritmetici
Funzioni stringa (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Nella tabella seguente sono elencate le funzioni fornite da Visual Basic nella Microsoft.VisualBasic.Strings classe
per la ricerca e la modifica delle stringhe. Possono essere considerati come Visual Basic funzioni intrinseche;
ovvero non è necessario chiamarli come membri espliciti di una classe, come illustrato negli esempi. Nella classe
sono disponibili metodi aggiuntivi e, in alcuni casi, metodi complementari System.String .
Filter Restituisce una matrice con indice in base zero che contiene
un sottoinsieme di una matrice String definito in base ai
criteri di filtro specificati.
È possibile utilizzare l'istruzione Option Compare per impostare se le stringhe vengono confrontate utilizzando
un ordinamento del testo senza distinzione tra maiuscole e minuscole determinato dalle impostazioni locali del
sistema ( Text ) o dalle rappresentazioni binarie interne dei caratteri ( Binary ). Il metodo di confronto del
testo predefinito è Binary .
Esempio: UCase
Nell'esempio seguente la funzione UCase viene utilizzata per restituire una versione in lettere maiuscole di una
stringa:
Esempio: LTrim
In questo esempio vengono utilizzate la funzione LTrim per rimuovere gli spazi iniziali e la funzione RTrim per
rimuovere gli spazi finali da una variabile String. Viene utilizzata la funzione Trim per eliminare entrambi i tipi
di spazi.
Esempio: Mid
In questo esempio viene utilizzata la Mid funzione per restituire un numero specificato di caratteri da una
stringa.
Esempio: Len
Nell'esempio riportato di seguito la funzione Len viene utilizzata per restituire il numero di caratteri di una
stringa.
Esempio: InStr
Nell'esempio riportato di seguito la funzione InStr viene utilizzata per restituire la posizione della prima
occorrenza di una stringa in un'altra:
' Returns 0.
testPos = InStr(1, searchString, "W")
Esempio: Format
In questo esempio sono presentati vari utilizzi della funzione Format per formattare valori mediante formati sia
di tipo String che definiti dall'utente. Per quanto riguarda il separatore della data ( / ), dell'ora ( : ) e gli
indicatori AM/PM ( t e tt ), l'output formattato visualizzato dal sistema dipende dalle impostazioni locali
utilizzate per il codice. Nell'ambiente di sviluppo la data e l'ora vengono visualizzate nel formato breve delle
impostazioni locali.
NOTE
Per le impostazioni locali che utilizzano il formato 24 ore, gli indicatori AM/PM ( t e tt ) non visualizzano alcun output.
Dim testDateTime As Date = #1/27/2001 5:04:23 PM#
Dim testStr As String
' Returns current system time in the system-defined long time format.
testStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
testStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
testStr = Format(Now(), "D")
Vedi anche
Parole chiave
Membri della libreria di runtime di Visual Basic
Riepilogo della modifica delle stringhe
Metodi della classe System. String
Funzioni di conversione del tipo (Visual Basic)
05/03/2021 • 23 minutes to read • Edit Online
Queste funzioni vengono compilate inline, ovvero il codice di conversione fa parte del codice che valuta
l'espressione. A volte non viene eseguita alcuna chiamata a una procedura per eseguire la conversione,
migliorando le prestazioni. Ogni funzione assegna un'espressione a un tipo di dati specifico.
Sintassi
CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)
Parte
expression
Obbligatorio. Qualsiasi espressione del tipo di dati di origine.
IN T ERVA L LO P ER EXPRESSION
N O M E DEL L A F UN Z IO N E T IP O DI DAT I REST IT UITO A RGO M EN TO
A partire da Visual Basic 15,8, le prestazioni della conversione da virgola mobile a integer sono ottimizzate
quando si passa Single il Double valore o restituito dai metodi seguenti a una delle funzioni di conversione
integer ( CByte , CShort , CInt , CLng , CSByte , CUShort , CUInt , CULng ):
Conversion.Fix(Double)
Conversion.Fix(Object)
Conversion.Fix(Single)
Conversion.Int(Double)
Conversion.Int(Object)
Conversion.Int(Single)
Math.Ceiling(Double)
Math.Floor(Double)
Math.Round(Double)
Math.Truncate(Double)
Questa ottimizzazione consente di eseguire il codice che esegue un numero elevato di conversioni di valori
integer fino a due volte più velocemente. Nell'esempio seguente vengono illustrate le conversioni a virgola
mobile ottimizzate:
Comportamento
Coercizione. In generale, è possibile utilizzare le funzioni di conversione del tipo di dati per assegnare il
risultato di un'operazione a un tipo di dati specifico anziché al tipo di dati predefinito. Usare, ad esempio,
CDec per forzare l'aritmetica decimale nei casi in cui normalmente si verificano calcoli di precisione
singola, a precisione doppia o Integer.
Conversioni non riuscite. Se l'oggetto expression passato alla funzione non è compreso
nell'intervallo del tipo di dati in cui deve essere convertito, OverflowException si verifica un errore.
Par ti frazionarie. Quando si converte un valore non integrale in un tipo integrale, le funzioni di
conversione di valori integer ( CByte ,, CInt CLng , CSByte , CShort , CUInt , CULng e CUShort )
rimuovono la parte frazionaria e arrotondano il valore all'intero più vicino.
Se la parte frazionaria è esattamente 0,5, le funzioni di conversione integer arrotondano al numero intero
pari più vicino. 0,5, ad esempio, viene arrotondato a 0, 1,5 e 2,5 entrambi arrotondati a 2. Questa
operazione viene talvolta denominata arrotondamento del banco e il suo scopo consiste nel compensare
la distorsione che potrebbe accumularsi durante l'aggiunta di molti di questi numeri.
CInt e CLng differiscono dalle Int Fix funzioni e, che troncano, anziché arrotondare, la parte frazionaria
di un numero. Inoltre, Fix e Int restituiscono sempre un valore dello stesso tipo di dati passato.
Conversioni di data e ora. Utilizzare la IsDate funzione per determinare se un valore può essere
convertito in una data e ora. CDate riconosce i valori letterali di data e ora, ma non i valori numerici. Per
convertire un valore Visual Basic 6,0 Date in un Date valore in Visual Basic 2005 o versioni successive,
è possibile usare il DateTime.FromOADate metodo.
Valori di data/ora neutri. Il tipo di dati date contiene sempre le informazioni di data e ora. Ai fini della
conversione del tipo, Visual Basic considera 1/1/0001 (1 gennaio dell'anno 1) come valore neutro per la
data e 00:00:00 (mezzanotte) come valore neutro per l'ora. Se si converte un Date valore in una stringa,
CStr in non sono inclusi valori neutri nella stringa risultante. Se ad esempio si esegue
#January 1, 0001 9:30:00# la conversione in una stringa, il risultato sarà "9:30:00 AM"; le informazioni
sulla data vengono annullate. Tuttavia, le informazioni sulla data sono ancora presenti nel Date valore
originale e possono essere ripristinate con funzioni come DatePart Function.
Sensibilità delle impostazioni cultura. Le funzioni di conversione dei tipi che coinvolgono stringhe
eseguono conversioni in base alle impostazioni cultura correnti dell'applicazione. Ad esempio, CDate
riconosce i formati di data in base alle impostazioni locali del sistema. È necessario specificare il giorno, il
mese e l'anno nell'ordine corretto per le impostazioni locali o la data potrebbe non essere interpretata
correttamente. Un formato di data estesa non viene riconosciuto se contiene una stringa del giorno della
settimana, ad esempio "mercoledì".
Se è necessario eseguire la conversione da o verso una rappresentazione di stringa di un valore in un
formato diverso da quello specificato dalle impostazioni locali, non è possibile usare le funzioni di
conversione del tipo di Visual Basic. A tale scopo, usare i ToString(IFormatProvider)
Parse(String, IFormatProvider) metodi e del tipo di tale valore. Utilizzare, ad esempio, Double.Parse
quando si converte una stringa in un oggetto Double e Double.ToString si utilizza quando si converte un
valore di tipo Double in una stringa.
CType Function
La funzione CType accetta un secondo argomento, typename , e viene assegnato expression a typename , dove
typename può essere qualsiasi tipo di dati, struttura, classe o interfaccia a cui esiste una conversione valida.
Per un confronto di CType con le altre parole chiave di conversione dei tipi, vedere Operatore DirectCast e
operatore TryCast.
Esempio di CBool
Nell'esempio seguente viene utilizzata la CBool funzione per convertire espressioni in Boolean valori. Se
un'espressione restituisce un valore diverso da zero, CBool restituisce True ; in caso contrario, restituisce
False .
Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)
Esempio di CByte
Nell'esempio seguente viene usata la CByte funzione per convertire un'espressione in un oggetto Byte .
Esempio di CChar
Nell'esempio seguente viene usata la CChar funzione per convertire il primo carattere di un' String
espressione in un Char tipo.
Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)
L'argomento di input per CChar deve essere di tipo di dati Char o String . Non è possibile utilizzare CChar
per convertire un numero in un carattere, perché CChar non è in grado di accettare un tipo di dati numerico.
Nell'esempio seguente viene ottenuto un numero che rappresenta un punto di codice (codice carattere) e lo
converte nel carattere corrispondente. Usa la InputBox funzione per ottenere la stringa di cifre, CInt per
convertire la stringa nel tipo Integer e ChrW per convertire il numero nel tipo Char .
Esempio di CDate
Nell'esempio seguente viene usata la CDate funzione per convertire le stringhe in Date valori. In generale, le
date e le ore di codifica hardcoded come stringhe, come illustrato in questo esempio, non sono consigliate.
Usare i valori letterali di data e ora, ad esempio #Feb 12, 1969 # e #4:45:23 PM #, in alternativa.
Esempio di CDbl
Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)
Esempio di CDec
Nell'esempio seguente viene usata la CDec funzione per convertire un valore numerico in Decimal .
Esempio di CInt
Nell'esempio seguente viene usata la CInt funzione per convertire un valore in Integer .
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
Esempio di CLng
Nell'esempio seguente viene usata la CLng funzione per convertire i valori in Long .
Esempio di CObj
Nell'esempio seguente viene usata la CObj funzione per convertire un valore numerico in Object . La Object
variabile stessa contiene solo un puntatore a quattro byte, che punta al Double valore assegnato.
Esempio di CSByte
Nell'esempio seguente viene usata la CSByte funzione per convertire un valore numerico in SByte .
Esempio di CShort
Nell'esempio seguente viene usata la CShort funzione per convertire un valore numerico in Short .
Esempio di CSng
Nell'esempio seguente viene usata la CSng funzione per convertire i valori in Single .
Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)
Esempio di CStr
Nell'esempio seguente viene usata la CStr funzione per convertire un valore numerico in String .
Nell'esempio seguente viene usata la CStr funzione per convertire Date i valori in String valori.
CStr esegue sempre il rendering di un Date valore nel formato abbreviato standard per le impostazioni locali
correnti, ad esempio, "6/15/2003 4:35:47 PM". Tuttavia, non vengono CStr eliminati i valori neutri di 1/1/0001
per la data e 00:00:00 per l'ora.
Per informazioni più dettagliate sui valori restituiti da CStr , vedere valori restituiti per la funzione CStr.
Esempio di CUInt
Nell'esempio seguente viene usata la CUInt funzione per convertire un valore numerico in UInteger .
Esempio di CULng
Nell'esempio seguente viene usata la CULng funzione per convertire un valore numerico in ULong .
Esempio di CUShort
Nell'esempio seguente viene usata la CUShort funzione per convertire un valore numerico in UShort .
Vedi anche
Asc
AscW
Chr
ChrW
Int
Fix
Format
Hex
Oct
Str
Val
Funzioni di conversione
Conversioni di tipi in Visual Basic
Valori restituiti dalla funzione CStr (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Nella tabella seguente vengono descritti i valori restituiti per CStr per diversi tipi di dati di expression .
Tipo di dati Date Stringa contenente un Date valore (data e ora) nel formato
di data breve del sistema.
CStr e data
Il Date tipo contiene sempre le informazioni di data e ora. Ai fini della conversione del tipo, Visual Basic
considera 1/1/0001 (1 gennaio dell'anno 1) come valore neutro per la data e 00:00:00 (mezzanotte) come
valore neutro per l'ora. CStr non include valori neutri nella stringa risultante. Se ad esempio si esegue
#January 1, 0001 9:30:00# la conversione in una stringa, il risultato sarà "9:30:00 AM"; le informazioni sulla data
vengono annullate. Tuttavia, le informazioni sulla data sono ancora presenti nel Date valore originale e possono
essere ripristinate con funzioni come DatePart .
NOTE
La CStr funzione esegue la conversione in base alle impostazioni cultura correnti dell'applicazione. Per ottenere la
rappresentazione di stringa di un numero in determinate impostazioni cultura, usare il metodo del numero
ToString(IFormatProvider) . Ad esempio, usare Double.ToString quando si converte un valore di tipo Double in un
oggetto String .
Vedi anche
DatePart
CString
Tipo di dati Boolean
Tipo di dati Date
Funzione CType (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Restituisce il risultato della conversione esplicita di un'espressione in un tipo di dati, oggetto, struttura, classe o
interfaccia specificati.
Sintassi
CType(expression, typename)
Parti
expression Qualsiasi espressione valida. Se il valore di non expression è compreso nell'intervallo consentito
da typename , Visual Basic genera un'eccezione.
typename Qualsiasi espressione valida all'interno di una As clausola in un' Dim istruzione, ovvero il nome di
qualsiasi tipo di dati, oggetto, struttura, classe o interfaccia.
Commenti
TIP
Per eseguire una conversione del tipo è inoltre possibile utilizzare le funzioni seguenti:
Funzioni di conversione dei tipi CByte , ad esempio, CDbl e CInt che eseguono una conversione in un tipo di dati
specifico. Per altre informazioni, vedere Funzioni di conversione del tipo.
Operatore DirectCast o operatore TryCast. Questi operatori richiedono che un tipo erediti da o implementi l'altro tipo.
Possono fornire prestazioni leggermente migliori rispetto CType a quando si esegue la conversione da e verso il
Object tipo di dati.
CType viene compilato inline, il che significa che il codice di conversione fa parte del codice che valuta
l'espressione. In alcuni casi, il codice viene eseguito più velocemente perché non viene chiamata alcuna routine
per eseguire la conversione.
Se non viene definita alcuna conversione da expression a typename (ad esempio, da Integer a Date ), Visual
Basic Visualizza un messaggio di errore in fase di compilazione.
Se una conversione non riesce in fase di esecuzione, viene generata l'eccezione appropriata. Se una conversione
verso un tipo di caratteri più piccolo non riesce, OverflowException è il risultato più comune. Se la conversione
non è definita, viene InvalidCastException generata un'eccezione. Questo può verificarsi, ad esempio, se
expression è di tipo Object e il tipo in fase di esecuzione non dispone di conversione in typename .
Se il tipo di dati di expression o typename è una classe o una struttura definita, è possibile definire CType su
tale classe o struttura come operatore di conversione. In questo CType modo, funge da operatore di overload. In
tal caso, è possibile controllare il comportamento delle conversioni da e verso la classe o la struttura, incluse le
eccezioni che possono essere generate.
Overload
CType È inoltre possibile eseguire l'overload dell'operatore in una classe o in una struttura definita all'esterno
del codice. Se il codice viene convertito in o da tale classe o struttura, assicurarsi di comprendere il
comportamento dell' CType operatore. Per altre informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene utilizzata la CType funzione per convertire un'espressione nel Single tipo di dati.
Vedi anche
OverflowException
InvalidCastException
CString
Funzioni di conversione
Operator Statement
Procedura: Definire un operatore di conversione
Conversione di tipi in .NET Framework
Modificatori (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sezioni correlate
Riferimenti al linguaggio Visual Basic
Ansi (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che Visual Basic deve effettuare il marshalling di tutte le stringhe in valori di American National
Standards Institute (ANSI) indipendentemente dal nome della procedura esterna dichiarata.
Quando si chiama una routine definita all'esterno del progetto, il compilatore Visual Basic non ha accesso alle
informazioni necessarie per chiamare correttamente la stored procedure. Queste informazioni includono la
posizione in cui si trova la stored procedure, la modalità di identificazione, la sequenza chiamante e il tipo
restituito e il set di caratteri stringa utilizzato. L' istruzione Declare crea un riferimento a una procedura esterna e
fornisce le informazioni necessarie.
La charsetmodifier parte nell' Declare istruzione fornisce le informazioni sul set di caratteri per il marshalling
delle stringhe durante una chiamata alla procedura esterna. Influiscono inoltre sul modo in cui Visual Basic
Cerca nel file esterno il nome della procedura esterna. Il Ansi modificatore specifica che Visual Basic deve
effettuare il marshalling di tutte le stringhe in valori ANSI ed esaminare la procedura senza modificarne il nome
durante la ricerca.
Se non viene specificato alcun modificatore del set di caratteri, Ansi è il valore predefinito.
Commenti
Il Ansi modificatore può essere usato in questo contesto:
Declare Statement
Vedi anche
Auto
Unicode
Parole chiave
Assembly (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che un attributo all'inizio di un file di origine viene applicato all'intero assembly.
Commenti
Molti attributi riguardano un singolo elemento di programmazione, ad esempio una classe o una proprietà.
Applicare tale attributo alleghindo il blocco di attributi, racchiuso tra parentesi acute ( < > ), direttamente
all'istruzione di dichiarazione.
Se un attributo riguarda non solo l'elemento seguente ma l'intero assembly, inserire il blocco di attributi
all'inizio del file di origine e identificare l'attributo con la Assembly parola chiave. Se si applica al modulo di
assembly corrente, usare la parola chiave Module .
È anche possibile applicare un attributo a un assembly nel file AssemblyInfo. vb, nel qual caso non è necessario
usare un blocco di attributi nel file del codice sorgente principale.
Vedi anche
Modulo <keyword>
Panoramica degli attributi
Async (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Il Async modificatore indica che il metodo o l' espressione lambda modificata è asincrona. Questi metodi sono
detti metodi asincroni.
Un metodo asincrono è un modo pratico per eseguire le operazioni potenzialmente di lunga durata senza
bloccare il thread del chiamante. Il chiamante di un metodo asincrono può riprendere il proprio lavoro senza
attendere il completamento del metodo asincrono.
NOTE
Le parole chiave Async e Await sono state introdotte in Visual Studio 2012. Per un'introduzione alla programmazione
asincrona, vedere programmazione asincrona con Async e await.
Nell'esempio seguente viene illustrata la struttura di un metodo async. Per convenzione, i nomi dei metodi async
terminano con "Async".
' . . .
' The return statement completes the task. Any method that is
' awaiting ExampleMethodAsync can now get the integer result.
Return exampleInt
End Function
In genere, un metodo modificato dalla Async parola chiave contiene almeno un'espressione o un'istruzione
await . Il metodo funziona in modo sincrono fino al primo Await , a quel punto viene sospeso finché l'attività di
cui si è in attesa non viene completata. Nel frattempo, il controllo viene restituito al chiamante del metodo. Se il
metodo non contiene un' Await espressione o un'istruzione, il metodo non viene sospeso ed eseguito come
metodo sincrono. Un avviso del compilatore segnala eventuali metodi asincroni che non contengono Await
perché questa situazione potrebbe indicare un errore. Per ulteriori informazioni, vedere l' errore del compilatore.
La parola chiave Async è una parola chiave non riservata. È una parola chiave quando si modifica un metodo o
un'espressione lambda. In tutti gli altri contesti, viene interpretata come identificatore.
Tipi restituiti
Un metodo asincrono è una routine Sub o una routine di funzione con un tipo restituito Task o Task<TResult> . Il
metodo non può dichiarare parametri ByRef .
Specificare Task(Of TResult) per il tipo restituito di un metodo asincrono se l'istruzione Return del metodo ha
un operando di tipo TResult. Utilizzare Task se non viene restituito alcun valore significativo al completamento
del metodo. In altre parole, una chiamata al metodo restituisce Task , ma quando Task viene completato, ogni
istruzione Await in attesa di Task non produce un valore risultante.
Le subroutine async vengono utilizzate principalmente per definire i gestori eventi in cui è richiesta una
procedura Sub . Il chiamante di una subroutine async non può attendere il metodo e non può intercettare le
eccezioni generate dal metodo.
Per altre informazioni ed esempi, vedere Tipi restituiti asincroni.
Esempio
Negli esempi seguenti viene illustrato un gestore eventi async, un'espressione lambda async e un metodo async.
Per un esempio completo in cui vengono usati questi elementi, vedere procedura dettagliata: accesso al Web
tramite Async e await. È possibile scaricare il codice della procedura dettagliata dalla pagina Developer Code
Samples (Esempi di codice per sviluppatori).
' Send the request to the Internet resource and wait for
' the response.
Using response As WebResponse = Await webReq.GetResponseAsync()
' Get the data stream that is associated with the specified URL.
Using responseStream As Stream = response.GetResponseStream()
' Read the bytes in responseStream and copy them to content.
' CopyToAsync returns a Task, not a Task<T>.
Await responseStream.CopyToAsync(content)
End Using
End Using
Vedi anche
AsyncStateMachineAttribute
Operatore await
Programmazione asincrona con Async e Await
Procedura dettagliata: accesso al Web tramite Async e await
Auto (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che Visual Basic deve effettuare il marshalling delle stringhe in base alle regole di .NET Framework in
base al nome esterno della procedura esterna dichiarata.
Quando si chiama una routine definita all'esterno del progetto, il compilatore Visual Basic non ha accesso alle
informazioni necessarie per chiamare correttamente la stored procedure. Queste informazioni includono la
posizione in cui si trova la stored procedure, la modalità di identificazione, la sequenza chiamante e il tipo
restituito e il set di caratteri stringa utilizzato. L' istruzione Declare crea un riferimento a una procedura esterna e
fornisce le informazioni necessarie.
La charsetmodifier parte nell' Declare istruzione fornisce le informazioni sul set di caratteri per il marshalling
delle stringhe durante una chiamata alla procedura esterna. Influiscono inoltre sul modo in cui Visual Basic
Cerca nel file esterno il nome della procedura esterna. Il Auto modificatore specifica che Visual Basic deve
effettuare il marshalling delle stringhe in base alle regole di .NET Framework e che deve determinare il set di
caratteri di base della piattaforma di runtime ed eventualmente modificare il nome della procedura esterna se la
ricerca iniziale ha esito negativo. Per ulteriori informazioni, vedere "set di caratteri" nell' istruzione Declare.
Se non viene specificato alcun modificatore del set di caratteri, Ansi è il valore predefinito.
Commenti
Il Auto modificatore può essere usato in questo contesto:
Declare Statement
Vedi anche
ANSI
Unicode
Parole chiave
ByRef (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che un argomento viene passato in modo tale che la routine chiamata possa modificare il valore di una
variabile sottostante l'argomento nel codice chiamante.
Commenti
Il modificatore ByRef può essere usato nei contesti seguenti:
Declare Statement
Istruzione Function
Istruzione Sub
Vedi anche
Parole chiave
Passaggio di argomenti per valore e per riferimento
ByVal (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che un argomento viene passato per valore, in modo che la routine o proprietà chiamata non possa
modificare il valore di una variabile sottostante l'argomento nel codice chiamante. Se non si specifica alcun
modificatore, ByVal è il valore predefinito.
NOTE
Poiché è l'impostazione predefinita, non è necessario specificare in modo esplicito la ByVal parola chiave nelle firme dei
metodi. Tende a produrre codice rumoroso e spesso conduce alla parola chiave non predefinita da ByRef trascurare.
Commenti
Il modificatore ByVal può essere usato nei contesti seguenti:
Declare Statement
Istruzione Function
Operator Statement
Property Statement
Istruzione Sub
Esempio
Nell'esempio seguente viene illustrato l'utilizzo del ByVal meccanismo di passaggio del parametro con un
argomento di tipo riferimento. Nell'esempio, l'argomento è c1 , un'istanza della classe Class1 . ByVal
impedisce al codice nelle procedure di modificare il valore sottostante dell'argomento di riferimento, c1 , ma
non protegge i campi e le proprietà accessibili di c1 .
Module Module1
Sub Main()
' Declare an instance of the class and assign a value to its field.
Dim c1 As New Class1()
c1.Field = 5
Console.WriteLine(c1.Field)
' Output: 5
' ByVal does not prevent changing the value of a field or property.
ChangeFieldValue(c1)
Console.WriteLine(c1.Field)
' Output: 500
Console.ReadKey()
End Sub
End Module
Vedi anche
Parole chiave
Passaggio di argomenti per valore e per riferimento
Default (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Identifica una proprietà come proprietà predefinita della relativa classe, struttura o interfaccia.
Commenti
Una classe, una struttura o un'interfaccia può definire al massimo una delle proprietà come proprietà
predefinita, purché la proprietà accetti almeno un parametro. Se il codice fa riferimento a una classe o a una
struttura senza specificare un membro, Visual Basic risolve il riferimento alla proprietà predefinita.
Le proprietà predefinite possono causare una riduzione ridotta dei caratteri di codice sorgente, ma possono
rendere il codice più difficile da leggere. Se il codice chiamante non ha familiarità con la classe o la struttura,
quando fa riferimento al nome della classe o della struttura, non può essere certo se il riferimento accede alla
classe o alla struttura o a una proprietà predefinita. Questo può causare errori del compilatore o errori di logica
di run-time sottili.
È possibile ridurre in qualche modo la probabilità di errori di proprietà predefiniti usando sempre l' istruzione
Option Strict per impostare il controllo dei tipi del compilatore su On .
Se si prevede di usare una classe o una struttura predefinita nel codice, è necessario determinare se dispone di
una proprietà predefinita e, in caso affermativo, il nome.
A causa di questi svantaggi, è consigliabile non definire le proprietà predefinite. Per la leggibilità del codice, è
consigliabile considerare sempre il riferimento a tutte le proprietà in modo esplicito, anche le proprietà
predefinite.
Il Default modificatore può essere usato in questo contesto:
Property Statement
Vedi anche
Procedura: dichiarare e chiamare una proprietà predefinita in Visual Basic
Parole chiave
Friend (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Specifica che uno o più elementi di programmazione dichiarati sono accessibili solo all'interno dell'assembly
che contiene la relativa dichiarazione.
Commenti
In molti casi, si desidera che gli elementi di programmazione come classi e strutture siano utilizzati dall'intero
assembly, non solo dal componente che li dichiara. Tuttavia, è possibile che non si desideri che siano accessibili
dal codice all'esterno dell'assembly (ad esempio, se l'applicazione è proprietaria). Se si vuole limitare l'accesso a
un elemento in questo modo, è possibile dichiararlo usando il Friend modificatore.
Il codice in altre classi, strutture e moduli compilati nello stesso assembly può accedere a tutti gli Friend
elementi in tale assembly.
Friend l'accesso è spesso il livello preferenziale per gli elementi di programmazione di un'applicazione e
Friend rappresenta il livello di accesso predefinito di un'interfaccia, un modulo, una classe o una struttura.
È possibile usare Friend solo a livello di modulo, interfaccia o spazio dei nomi. Il contesto di dichiarazione per
un Friend elemento deve pertanto essere un file di origine, uno spazio dei nomi, un'interfaccia, un modulo, una
classe o una struttura e non può essere una routine.
NOTE
È anche possibile usare il modificatore di accesso Friend protetto , che rende accessibile un membro della classe da tale
classe, dalle classi derivate e dallo stesso assembly in cui è definita la classe. Per limitare l'accesso a un membro dall'interno
della relativa classe e dalle classi derivate nello stesso assembly, usare il modificatore di accesso privato protetto .
Per un confronto tra Friend e gli altri modificatori di accesso, vedere livelli di accesso in Visual Basic.
NOTE
È possibile specificare che un altro assembly è un assembly Friend, che consente di accedere a tutti i tipi e membri
contrassegnati come Friend . Per ulteriori informazioni, vedere assembly Friend.
Esempio
La classe seguente usa il Friend modificatore per consentire ad altri elementi di programmazione all'interno
dello stesso assembly di accedere a determinati membri.
Class CustomerInfo
End Sub
' Require that a customer identifier be specified for the public constructor.
Public Sub New(ByVal customerID As Integer)
p_CustomerID = customerID
End Sub
Utilizzo
È possibile usare il Friend modificatore in questi contesti:
Istruzione Class
Istruzione Const
Declare Statement
Istruzione Delegate
Istruzione Dim
Istruzione Enum
Istruzione Event
Istruzione Function
Istruzione Interface
Istruzione Module
Property Statement
Istruzione Structure
Istruzione Sub
Vedi anche
InternalsVisibleToAttribute
Pubblica
Protetto
Privata
Privato protetto
Protected Friend
Livelli di accesso in Visual Basic
Procedure
Strutture
Oggetti e classi
In (modificatore generico) (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Per i parametri di tipo generico, la parola chiave In specifica che il parametro di tipo è controvariante.
Commenti
La controvarianza consente di usare un tipo meno derivato di quello specificato dal parametro generico. Ciò
consente la conversione implicita di classi che implementano interfacce varianti e la conversione implicita di tipi
delegati.
Per altre informazioni, vedere Covarianza e controvarianza.
Regole
È possibile usare la parola chiave In in interfacce e delegati generici.
Un parametro di tipo può essere dichiarato controvariante in un'interfaccia o in un delegato generico se viene
usato solo come tipo di argomenti del metodo e non viene usato come tipo restituito del metodo. ByRef i
parametri non possono essere covarianti o controvarianti.
Covarianza e controvarianza sono supportate per i tipi di riferimento e non sono supportate per i tipi di valore.
In Visual Basic non è possibile dichiarare eventi in interfacce controvarianti senza specificare il tipo delegato.
Inoltre, le interfacce controvarianti non possono avere classi, enumerazioni o strutture annidate, ma possono
avere interfacce nidificate.
Comportamento
Un'interfaccia che dispone di un parametro di tipo controvariante consente ai metodi di accettare argomenti di
tipi meno derivati di quelli specificati dal parametro di tipo di interfaccia. Poiché, ad esempio, in .NET Framework
4, nell' IComparer<T> interfaccia, il tipo T è controvariante, è possibile assegnare un oggetto di
IComparer(Of Person) tipo a un oggetto del IComparer(Of Employee) tipo senza usare alcun metodo di
conversione speciale se Employee eredita da Person .
A un delegato controvariante può essere assegnato un altro delegato dello stesso tipo, ma con un parametro di
tipo generico meno derivato.
Sub Main()
Dim iobj As IContravariant(Of Object) = New Sample(Of Object)()
Dim istr As IContravariant(Of String) = New Sample(Of String)()
Vedi anche
Varianza nelle interfacce generiche
Out
Iteratore (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Commenti
Un iteratore esegue un'iterazione personalizzata su una raccolta. Un iteratore usa l'istruzione yield per restituire
ogni elemento della raccolta uno alla volta. Quando Yield viene raggiunta un'istruzione, viene mantenuta la
posizione corrente nel codice. L'esecuzione viene riavviata a partire da quella posizione la volta successiva che
viene chiamata la funzione iteratore.
Un iteratore può essere implementato come funzione o come funzione Get di accesso di una definizione di
proprietà. Il Iterator modificatore viene visualizzato nella dichiarazione della funzione o della funzione di
accesso iteratore Get .
È possibile chiamare un iteratore dal codice client usando un per ogni... Istruzione successiva.
Il tipo restituito di una funzione o di una funzione di accesso iteratore Get può essere IEnumerable ,,
IEnumerable<T> IEnumerator o IEnumerator<T> .
Un iteratore non può avere ByRef parametri.
Un iteratore non può verificarsi in un evento, costruttore di istanza, costruttore statico o distruttore statico.
Un iteratore può essere una funzione anonima. Per ulteriori informazioni, vedere iteratori.
Utilizzo
Il modificatore Iterator può essere usato nei contesti seguenti:
Istruzione Function
Property Statement
Esempio
Nell'esempio seguente viene illustrata una funzione iteratore. La funzione iteratore ha un' Yield istruzione che
si trova all'interno di un oggetto per... Ciclo successivo . Ogni iterazione del corpo dell'istruzione for each in
Main Crea una chiamata alla Power funzione iteratore. Ogni chiamata alla funzione iteratore procede fino alla
prossima esecuzione dell'istruzione Yield , che si verifica durante l'iterazione successiva del ciclo For…Next .
Sub Main()
For Each number In Power(2, 8)
Console.Write(number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
Console.ReadKey()
End Sub
Dim result = 1
Esempio
Nell'esempio seguente viene illustrata una funzione di accesso Get che è un iteratore. Il Iterator modificatore
si trova nella dichiarazione della proprietà.
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In theGalaxies.NextGalaxy
With theGalaxy
Console.WriteLine(.Name & " " & .MegaLightYears)
End With
Next
Console.ReadKey()
End Sub
Vedi anche
IteratorStateMachineAttribute
Iterators
Istruzione Yield
Key (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
La Key parola chiave consente di specificare il comportamento per le proprietà dei tipi anonimi. Solo le
proprietà designate come proprietà chiave partecipano ai test di uguaglianza tra le istanze di tipo anonimo o il
calcolo dei valori del codice hash. Non è possibile modificare i valori delle proprietà chiave.
Per definire una proprietà di un tipo anonimo come proprietà chiave, inserire la parola chiave davanti alla Key
relativa dichiarazione nell'elenco di inizializzazione. Nell'esempio seguente Airline e FlightNo sono proprietà
chiave, ma non lo Gate è.
Quando viene creato un nuovo tipo anonimo, esso eredita direttamente da Object . Il compilatore esegue
l'override di tre membri ereditati: Equals , GetHashCode e ToString . Il codice di sostituzione prodotto per Equals
e GetHashCode si basa sulle proprietà chiave. Se non sono presenti proprietà chiave nel tipo GetHashCode e
Equals non vengono sottoposte a override.
Uguaglianza
Due istanze di tipo anonimo sono uguali se sono istanze dello stesso tipo e se i valori delle relative proprietà
chiave sono uguali. Negli esempi seguenti flight2 è uguale all' flight1 esempio precedente, perché sono
istanze dello stesso tipo anonimo e hanno valori corrispondenti per le relative proprietà chiave. Tuttavia,
flight3 non è uguale a flight1 perché ha un valore diverso per una proprietà chiave FlightNo . flight4
L'istanza non è dello stesso tipo di flight1 perché designa proprietà diverse come proprietà chiave.
Se due istanze sono dichiarate solo con proprietà non chiave, identiche in nome, tipo, ordine e valore, le due
istanze non sono uguali. Un'istanza senza proprietà chiave è uguale solo a se stessa.
Per ulteriori informazioni sulle condizioni in cui due istanze di tipo anonimo sono istanze dello stesso tipo
anonimo, vedere tipi anonimi.
Calcolo del codice hash
Analogamente Equals , la funzione hash definita in GetHashCode per un tipo anonimo si basa sulle proprietà
chiave del tipo. Negli esempi seguenti viene illustrata l'interazione tra le proprietà chiave e i valori del codice
hash.
Le istanze di un tipo anonimo che hanno gli stessi valori per tutte le proprietà chiave hanno lo stesso valore di
codice hash, anche se le proprietà non chiave non hanno valori corrispondenti. L'istruzione seguente restituisce
True .
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
Le istanze di un tipo anonimo con valori diversi per una o più proprietà chiave hanno valori di codice hash
diversi. L'istruzione seguente restituisce False .
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Le istanze di tipi anonimi che designano proprietà diverse come proprietà chiave non sono istanze dello stesso
tipo. Hanno valori di codice hash diversi anche quando i nomi e i valori di tutte le proprietà sono uguali.
L'istruzione seguente restituisce False .
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
Valori Read-Only
Non è possibile modificare i valori delle proprietà chiave. Negli flight1 esempi precedenti, ad esempio, i
Airline campi e sono di sola FlightNo lettura, ma Gate possono essere modificati.
' The following statement will not compile, because FlightNo is a key
' property and cannot be changed.
' flight1.FlightNo = 1234
'
' Gate is not a key property. Its value can be changed.
flight1.Gate = "C5"
Vedi anche
Definizione di tipo anonimo
Procedura: dedurre tipi e nomi di proprietà nelle dichiarazioni di tipo anonimo
Tipi anonimi
Modulo <keyword> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che un attributo all'inizio di un file di origine viene applicato al modulo di assembly corrente.
Commenti
Molti attributi riguardano un singolo elemento di programmazione, ad esempio una classe o una proprietà.
Applicare tale attributo alleghindo il blocco di attributi, racchiuso tra parentesi acute ( < > ), direttamente
all'istruzione di dichiarazione.
Se un attributo riguarda non solo l'elemento seguente ma al modulo di assembly corrente, il blocco di attributi
viene inserito all'inizio del file di origine e l'attributo viene identificato con la Module parola chiave. Se si applica
all'intero assembly, usare la parola chiave assembly .
Il Module modificatore non è uguale all' istruzione Module.
Vedi anche
Assembly
Istruzione Module
Panoramica degli attributi
MustInherit (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Specifica che una classe può essere utilizzata solo come classe base e che non è possibile creare un oggetto
direttamente da tale classe.
Commenti
Lo scopo di una classe di base (nota anche come classe astratta) consiste nel definire la funzionalità comune a
tutte le classi derivate. Questo consente di salvare le classi derivate dalla necessità di ridefinire gli elementi
comuni. In alcuni casi, questa funzionalità comune non è sufficientemente completa per creare un oggetto
utilizzabile e ogni classe derivata definisce la funzionalità mancante. In tal caso, si desidera che il codice
consumer crei oggetti solo dalle classi derivate. Usare MustInherit nella classe di base per applicare questa
operazione.
Un altro uso di una MustInherit classe consiste nel limitare una variabile a un set di classi correlate. È possibile
definire una classe di base e derivare tutte le classi correlate. La classe base non deve fornire funzionalità
comuni a tutte le classi derivate, ma può fungere da filtro per l'assegnazione di valori alle variabili. Se il codice
consumer dichiara una variabile come classe di base, Visual Basic consente di assegnare a tale variabile solo un
oggetto da una delle classi derivate.
Il .NET Framework definisce diverse MustInherit classi, tra cui Array , Enum e ValueType . ValueType è un
esempio di una classe di base che limita una variabile. Tutti i tipi di valore derivano da ValueType . Se si dichiara
una variabile come ValueType , è possibile assegnare solo tipi valore a tale variabile.
Regole
Contesto della dichiarazione. È possibile utilizzare MustInherit solo in un' Class istruzione.
Modificatori combinati. Non è possibile specificare MustInherit insieme NotInheritable a nella
stessa dichiarazione.
Esempio
Nell'esempio seguente viene illustrata l'ereditarietà forzata e l'override forzato. La classe base shape definisce
una variabile acrossLine . Le classi circle e square derivano da shape . Ereditano la definizione di
acrossLine , ma devono definire la funzione area perché il calcolo è diverso per ogni tipo di forma.
Public MustInherit Class shape
Public acrossLine As Double
Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
Public Overrides Function area() As Double
Return Math.PI * acrossLine
End Function
End Class
Public Class square : Inherits shape
Public Overrides Function area() As Double
Return acrossLine * acrossLine
End Function
End Class
Public Class consumeShapes
Public Sub makeShapes()
Dim shape1, shape2 As shape
shape1 = New circle
shape2 = New square
End Sub
End Class
È possibile dichiarare shape1 e shape2 per essere di tipo shape . Tuttavia, non è possibile creare un oggetto da
shape perché manca la funzionalità della funzione area ed è contrassegnato MustInherit .
Poiché sono dichiarati come shape , le variabili shape1 e shape2 sono limitate agli oggetti delle classi derivate
circle e square . Visual Basic non consente di assegnare altri oggetti a queste variabili, che offre un livello
elevato di indipendenza dai tipi.
Utilizzo
Il MustInherit modificatore può essere usato in questo contesto:
Istruzione Class
Vedi anche
Inherits Statement
NotInheritable
Parole chiave
Nozioni fondamentali sull'ereditarietà
MustOverride (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che una proprietà o una routine non è implementata in questa classe e deve essere sottoposta a
override in una classe derivata prima di poter essere utilizzata.
Commenti
È possibile utilizzare MustOverride solo in un'istruzione di dichiarazione di proprietà o di routine. La proprietà o
la routine che specifica MustOverride deve essere un membro di una classe e la classe deve essere
contrassegnata come MustInherit.
Regole
Dichiarazione incompleta. Quando si specifica MustOverride , non vengono fornite righe di codice
aggiuntive per la proprietà o la routine, non anche per l' End Function End Property istruzione, o
End Sub .
Vedi anche
NotOverridable
Overridable
Override
MustInherit
Parole chiave
Shadowing in Visual Basic
Narrowing (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Indica che un operatore di conversione ( CType ) converte una classe o una struttura in un tipo che potrebbe
non essere in grado di contenere alcuni dei possibili valori della classe o della struttura originale.
Vedi anche
Operator Statement
Widening
Widening and Narrowing Conversions
Procedura: definire un operatore
CType Function
Option Strict Statement
NotInheritable (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che una classe non può essere utilizzata come classe base.
Commenti
Termini alternativi . Una classe che non può essere ereditata è talvolta denominata classe sealed .
Il NotInheritable modificatore può essere usato in questo contesto:
Istruzione Class
Vedi anche
Inherits Statement
MustInherit
Parole chiave
NotOverridable (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che una proprietà o una routine non può essere sottoposta a override in una classe derivata.
Commenti
Il NotOverridable modificatore impedisce che una proprietà o un metodo venga sottoposto a override in una
classe derivata. Il modificatore Overridable consente di eseguire l'override di una proprietà o di un metodo in
una classe in una classe derivata. Per altre informazioni, vedere Nozioni fondamentali sull'ereditarietà.
Se il Overridable NotOverridable modificatore o non è specificato, l'impostazione predefinita dipende dalla
proprietà o dal metodo che esegue l'override di una proprietà o di un metodo della classe base. Se la proprietà o
il metodo esegue l'override di una proprietà o di un metodo della classe base, l'impostazione predefinita è
Overridable ; in caso contrario, è NotOverridable .
Un elemento che non può essere sottoposto a override è talvolta denominato elemento sealed .
È possibile utilizzare NotOverridable solo in un'istruzione di dichiarazione di proprietà o di routine. È possibile
specificare NotOverridable solo su una proprietà o una routine che esegue l'override di un'altra proprietà o
routine, ovvero solo in combinazione con Overrides .
Modificatori combinati
Non è possibile specificare Overridable o NotOverridable per un Private metodo.
Non è possibile specificare NotOverridable insieme a MustOverride , Overridable o Shared nella stessa
dichiarazione.
Utilizzo
Il modificatore NotOverridable può essere usato nei contesti seguenti:
Istruzione Function
Property Statement
Istruzione Sub
Vedi anche
Modificatori
Nozioni fondamentali sull'ereditarietà
MustOverride
Overridable
Override
Parole chiave
Shadowing in Visual Basic
Optional (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che un argomento di routine può essere omesso quando viene chiamata la stored procedure.
Commenti
Per ogni parametro facoltativo, è necessario specificare un'espressione costante come valore predefinito del
parametro. Se l'espressione restituisce Nothing, il valore predefinito del tipo di dati value viene utilizzato come
valore predefinito del parametro.
Se l'elenco di parametri contiene un parametro facoltativo, anche ogni parametro che lo segue deve essere
facoltativo.
Il modificatore Optional può essere usato nei contesti seguenti:
Declare Statement
Istruzione Function
Property Statement
Istruzione Sub
NOTE
Quando si chiama una routine con o senza parametri facoltativi, è possibile passare gli argomenti in base alla posizione o
al nome. Per ulteriori informazioni, vedere passaggio di argomenti in base alla posizione e al nome.
NOTE
È anche possibile definire una routine con parametri facoltativi tramite l'overload. Se si dispone di un parametro
facoltativo, è possibile definire due versioni di overload della stored procedure, una che accetta il parametro e l'altra. Per
altre informazioni, vedere Procedure Overloading.
Esempio
Nell'esempio seguente viene definita una routine con un parametro facoltativo.
Public Function FindMatches(ByRef values As List(Of String),
ByVal searchString As String,
Optional ByVal matchCase As Boolean = False) As List(Of String)
If matchCase Then
results = From v In values
Where v.Contains(searchString)
Else
results = From v In values
Where UCase(v).Contains(UCase(searchString))
End If
Return results.ToList()
End Function
Esempio
Nell'esempio seguente viene illustrato come chiamare una stored procedure con argomenti passati in base alla
posizione e con argomenti passati in base al nome. La procedura include due parametri facoltativi.
' Omit one optional argument by holding its place with a comma.
studentInfo("Mary", , #9/21/1981#)
Vedi anche
Elenco parametri
Parametri facoltativi
Parole chiave
Out (modificatore generico) (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Per i parametri di tipo generico, la Out parola chiave specifica che il tipo è covariante.
Commenti
La covarianza consente di usare un tipo più derivato di quello specificato dal parametro generico. Ciò consente
la conversione implicita di classi che implementano interfacce varianti e la conversione implicita di tipi delegati.
Per altre informazioni, vedere Covarianza e controvarianza.
Regole
È possibile usare la parola chiave Out in interfacce e delegati generici.
In un'interfaccia generica un parametro di tipo può essere dichiarato covariante se soddisfa le condizioni
seguenti:
Il parametro di tipo viene usato solo come tipo restituito di metodi di interfaccia e non viene usato come
tipo di argomenti del metodo.
NOTE
Esiste un'eccezione a questa regola. Se in un'interfaccia covariante è presente un delegato generico controvariante
come parametro del metodo, è possibile usare il tipo covariante come parametro di tipo generico per questo
delegato. Per altre informazioni sui delegati generici covarianti e controvarianti, vedere Varianza nei delegati e Uso
della varianza per i delegati generici Func e Action.
Il parametro di tipo non viene usato come vincolo generico per i metodi di interfaccia.
In un delegato generico, un parametro di tipo può essere dichiarato covariante se viene usato solo come tipo
restituito del metodo e non usato per gli argomenti del metodo.
La covarianza e la controvarianza sono supportate per i tipi di riferimento, ma non per i tipi di valore.
In Visual Basic non è possibile dichiarare gli eventi nelle interfacce covariante senza specificare il tipo delegato.
Inoltre, le interfacce covariante non possono avere classi, enumerazioni o strutture annidate, ma possono avere
interfacce nidificate.
Comportamento
Un'interfaccia che dispone di un parametro di tipo covariante consente ai metodi di restituire tipi più derivati di
quelli specificati dal parametro di tipo. Poiché, ad esempio, in .NET Framework 4, nell'interfaccia
IEnumerable<T>, il tipo T è covariante, è possibile assegnare un oggetto di tipo IEnumerable(Of String) a un
oggetto di tipo IEnumerable(Of Object) senza usare alcun metodo di conversione speciale.
A un delegato covariante può essere assegnato un altro delegato dello stesso tipo, ma con un parametro di tipo
generico più derivato.
Esempio
L'esempio seguente illustra come dichiarare, estendere e implementare un'interfaccia generica covariante.
L'esempio descrive anche come usare la conversione implicita per le classi che implementano un'interfaccia
covariante.
Sub Main()
Dim iobj As ICovariant(Of Object) = New Sample(Of Object)()
Dim istr As ICovariant(Of String) = New Sample(Of String)()
Esempio
L'esempio seguente illustra come dichiarare, creare un'istanza e richiamare un delegato generico covariante.
Viene inoltre illustrato come è possibile utilizzare la conversione implicita per i tipi delegati.
Vedi anche
Varianza nelle interfacce generiche
In
Overloads (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Specifica che una proprietà o una routine ridichiara una o più proprietà o routine esistenti con lo stesso nome.
Commenti
L' Overload è la pratica di fornire più di una definizione per un nome di proprietà o di routine specifico nello
stesso ambito. La ridichiarazione di una proprietà o di una routine con una firma diversa viene talvolta chiamata
nascosta dalla firma.
Regole
Contesto della dichiarazione. È possibile utilizzare Overloads solo in un'istruzione di dichiarazione di
proprietà o di routine.
Modificatori combinati. Non è possibile specificare Overloads insieme a Shadows nella stessa
dichiarazione di routine.
Differenze necessarie. La firma in questa dichiarazione deve essere diversa dalla firma di ogni
proprietà o routine che viene sovraccaricata. La firma comprende il nome della proprietà o della routine e
gli elementi seguenti:
numero dei parametri
ordine dei parametri
tipi di dati dei parametri
numero dei parametri di tipo (per una routine generica)
tipo restituito (solo per una routine di operatore di conversione)
Tutti gli overload devono avere lo stesso nome, ma ognuno deve essere diverso da tutti gli altri per uno o
più elementi tra quelli elencati in precedenza. Questo consente al compilatore di distinguere la versione
da usare quando il codice chiama la proprietà o la routine.
Differenze non consentite. Poiché gli elementi riportati di seguito non fanno parte della firma, la
relativa modifica non è valida per l'overload di una proprietà o di una routine:
la capacità di restituire un valore (per una routine)
il tipo di dati del valore restituito (ad eccezione di un operatore di conversione)
i nomi dei parametri o dei parametri di tipo
i vincoli definiti sui parametri di tipo (per una routine generica)
le parole chiave di modificatori di parametro (ad esempio ByRef o Optional )
e parole chiave di modificatori di proprietà o di routine (ad esempio Public o Shared )
Modificatore facoltativo. Non è necessario usare il Overloads modificatore quando si definiscono più
proprietà o routine di overload nella stessa classe. Se tuttavia si usa Overloads in una dichiarazione, è
necessario usarlo in tutte.
Ombreggiatura e overload. Overloads può anche essere usato per nascondere un membro esistente
o un set di membri di overload in una classe base. Quando si usa Overloads a questo scopo, è necessario
dichiarare la proprietà o il metodo con lo stesso nome e lo stesso elenco di parametri del membro della
classe base, senza specificare la parola chiave Shadows .
Se si usa Overrides , il compilatore aggiunge implicitamente Overloads in modo che le API della libreria
funzionino più facilmente con C#.
Il modificatore Overloads può essere usato nei contesti seguenti:
Istruzione Function
Operator Statement
Property Statement
Istruzione Sub
Vedi anche
Ombreggiature
Overload della routine
Generic Types in Visual Basic
Routine di operatore
Procedura: Definire un operatore di conversione
Overridable (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che una proprietà o una routine può essere sottoposta a override da una proprietà o una routine con
nome identico in una classe derivata.
Commenti
Il Overridable modificatore consente di eseguire l'override di una proprietà o di un metodo in una classe in una
classe derivata. Il modificatore NotOverridable impedisce l'override di una proprietà o di un metodo in una
classe derivata. Per altre informazioni, vedere Nozioni fondamentali sull'ereditarietà.
Se il Overridable NotOverridable modificatore o non è specificato, l'impostazione predefinita dipende dalla
proprietà o dal metodo che esegue l'override di una proprietà o di un metodo della classe base. Se la proprietà o
il metodo esegue l'override di una proprietà o di un metodo della classe base, l'impostazione predefinita è
Overridable ; in caso contrario, è NotOverridable .
È possibile eseguire l'ombreggiatura o l'override per ridefinire un elemento ereditato, ma esistono differenze
significative tra i due approcci. Per ulteriori informazioni, vedere shadowing in Visual Basic.
Un elemento di cui è possibile eseguire l'override viene talvolta definito come elemento virtuale . Se è possibile
eseguirne l'override, ma non è necessario, viene talvolta chiamato anche elemento concreto .
È possibile utilizzare Overridable solo in un'istruzione di dichiarazione di proprietà o di routine.
Modificatori combinati
Non è possibile specificare Overridable o NotOverridable per un Private metodo.
Non è possibile specificare Overridable insieme a MustOverride , NotOverridable o Shared nella stessa
dichiarazione.
Poiché un elemento che esegue l'override può essere implicitamente sottoposto a override, non è possibile
combinare Overridable e Overrides .
Utilizzo
Il modificatore Overridable può essere usato nei contesti seguenti:
Istruzione Function
Property Statement
Istruzione Sub
Vedi anche
Modificatori
Nozioni fondamentali sull'ereditarietà
MustOverride
NotOverridable
Override
Parole chiave
Shadowing in Visual Basic
Overrides (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che una proprietà o una routine esegue l'override di una proprietà o una routine con nome identico
ereditata da una classe base.
Regole
Contesto della dichiarazione. È possibile utilizzare Overrides solo in un'istruzione di dichiarazione di
proprietà o di routine.
Modificatori combinati. Non è possibile specificare Overrides insieme a Shadows o Shared nella
stessa dichiarazione. Poiché un elemento che esegue l'override può essere implicitamente sottoposto a
override, non è possibile combinare Overridable e Overrides .
Firme corrispondenti. La firma di questa dichiarazione deve corrispondere esattamente alla firma della
proprietà o della routine sottoposta a override. In altre parole, gli elenchi di parametri devono presentare
lo stesso numero di parametri, nel medesimo ordine, e contenere gli stessi tipi di dati.
Oltre alla firma, la dichiarazione che esegue l'override deve anche corrispondere esattamente a quanto
segue.
Livello di accesso
Tipo restituito, se disponibile
Firme generiche. Nel caso di una routine generica la firma include il numero di parametri del tipo. La
dichiarazione che esegue l'override, quindi, deve corrispondere alla versione della classe base anche in
relazione a tali caratteristiche.
Corrispondenze aggiuntive. Oltre a corrispondere alla firma della versione della classe base, la
dichiarazione deve presentare anche le corrispondenze seguenti:
Modificatore a livello di accesso (ad esempio public)
Passaggio del meccanismo di ogni parametro (ByVal o ByRef)
Elenchi di vincoli su ogni parametro di tipo di una routine generica
Shadowing e override. Sebbene lo shadowing e l'override ridefiniscano entrambi un elemento
ereditato, tra i due metodi esistono differenze sostanziali. Per ulteriori informazioni, vedere shadowing in
Visual Basic.
Se si usa Overrides , il compilatore aggiunge implicitamente Overloads in modo che le API della libreria
funzionino più facilmente con C#.
Il modificatore Overrides può essere usato nei contesti seguenti:
Istruzione Function
Property Statement
Istruzione Sub
Vedi anche
MustOverride
NotOverridable
Overridable
Parole chiave
Shadowing in Visual Basic
Generic Types in Visual Basic
Type List
ParamArray (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che un parametro di routine accetta una matrice facoltativa di elementi del tipo specificato. ParamArray
può essere usato solo nell'ultimo parametro di un elenco di parametri.
Commenti
ParamArray consente di passare un numero arbitrario di argomenti alla procedura. Un ParamArray parametro
viene sempre dichiarato utilizzando ByVal.
È possibile specificare uno o più argomenti per un ParamArray parametro passando una matrice del tipo di dati
appropriato, un elenco delimitato da virgole di valori o nulla. Per informazioni dettagliate, vedere la sezione
relativa alla chiamata a ParamArray in matrici di parametri.
IMPORTANT
Ogni volta che si tratta di una matrice che può essere indefinitamente grande, esiste il rischio di sovraeseguire una
capacità interna dell'applicazione. Se si accetta una matrice di parametri dal codice chiamante, è necessario testarne la
lunghezza ed eseguire le operazioni appropriate se è troppo grande per l'applicazione.
Vedi anche
Parole chiave
Matrici di parametri
Partial (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Indica che una dichiarazione di tipo è una definizione parziale del tipo.
Si può dividere la definizione di un tipo tra più dichiarazioni mediante la parola chiave Partial . Si può usare il
numero di dichiarazioni parziali desiderato, in un numero qualsiasi di file di origine differenti. Tutte le
dichiarazioni, tuttavia, devono trovarsi nello stesso assembly e nello stesso spazio dei nomi.
NOTE
Visual Basic supporta i metodi parziali, che in genere sono implementati nelle classi parziali. Per altre informazioni, vedere
metodi parziali e istruzione secondaria.
Sintassi
[ <attrlist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] _
Partial { Class | Structure | Interface | Module } name [ (Of typelist) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ variabledeclarations ]
[ proceduredeclarations ]
{ End Class | End Structure }
Parti
T ERM IN E DEF IN IZ IO N E
End Class o End Structure Termina questa definizione Class o Structure parziale.
Commenti
Visual Basic usa definizioni di classi parziali per separare il codice generato dal codice creato dall'utente in file di
origine distinti. Ad esempio, Progettazione Windows Form definisce classi parziali per controlli come Form.
In questi controlli il codice generato non deve essere modificato.
Durante la creazione di un tipo parziale vengono applicate tutte le regole per la creazione delle classi, delle
strutture, delle interfacce e dei moduli, ad esempio quelle relative all'uso dei modificatori e all'ereditarietà.
Procedure consigliate
In condizioni normali, non è consigliabile suddividere lo sviluppo di un singolo tipo in due o più
dichiarazioni. Pertanto, nella maggior parte dei casi non occorre specificare la parola chiave Partial .
Per migliorare la leggibilità, ogni dichiarazione parziale di un tipo deve includere la parola chiave
Partial . Il compilatore consente che la parola chiave venga omessa al massimo in una dichiarazione
parziale. Se viene omessa in due o più dichiarazioni, viene segnalato un errore.
Comportamento
Unione delle dichiarazioni Il compilatore considera il tipo come l'unione di tutte le relative
dichiarazioni parziali. Ogni modificatore di ciascuna definizione parziale si applica all'intero tipo e ogni
membro di ciascuna definizione parziale è disponibile per l'intero tipo.
Promozione tipo non consentita per i tipi parziali nei moduli. Se una definizione parziale si trova
all'interno di un modulo, l'effetto della promozione tipo di tale tipo viene automaticamente annullato. In
questo caso, un set di definizioni parziali può generare risultati imprevisti e persino errori del
compilatore. Per ulteriori informazioni, vedere promozione del tipo.
Il compilatore unisce le definizioni parziali solo se i relativi percorsi completi sono identici.
È possibile usare la parola chiave Partial nei contesti seguenti:
Istruzione Class
Istruzione Structure
Esempio
L'esempio seguente suddivide la definizione della classe sampleClass in due dichiarazioni, ognuna delle quali
definisce una routine Sub differente.
Le due definizioni parziali nell'esempio precedente possono trovarsi nello stesso file di origine o in due file di
origine differenti.
Vedi anche
Istruzione Class
Istruzione Structure
Promozione tipo
Ombreggiature
Generic Types in Visual Basic
Metodi parziali
Private (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che uno o più elementi di programmazione dichiarati sono accessibili solo dall'interno del contesto di
dichiarazione, incluso all'interno di qualsiasi tipo contenuto.
Commenti
Se un elemento di programmazione rappresenta una funzionalità proprietaria o contiene dati riservati, in
genere si vuole limitarne l'accesso al più possibile. Si ottiene la massima limitazione consentendo solo il
modulo, la classe o la struttura che lo definisce per accedervi. Per limitare l'accesso a un elemento in questo
modo, è possibile dichiararlo con Private .
NOTE
È anche possibile usare il modificatore di accesso privato protetto , che rende accessibile un membro all'interno di tale
classe e dalle classi derivate presenti nell'assembly contenitore.
Regole
Contesto della dichiarazione. Si può usare Private solo a livello di modulo. Ciò significa che il contesto
di dichiarazione per un Private elemento deve essere un modulo, una classe o una struttura e non può
essere un file di origine, uno spazio dei nomi, un'interfaccia o una routine.
Comportamento
Livello di accesso. Tutto il codice all'interno di un contesto di dichiarazione può accedere ai relativi
Private elementi. Incluso il codice all'interno di un tipo contenuto, ad esempio una classe annidata o
un'espressione di assegnazione in un'enumerazione. Nessun codice esterno al contesto di dichiarazione
può accedere ai relativi Private elementi.
Modificatori di accesso. Le parole chiave che specificano il livello di accesso sono denominate
modificatori di accesso. Per un confronto dei modificatori di accesso, vedere livelli di accesso in Visual
Basic.
Il modificatore Private può essere usato nei contesti seguenti:
Istruzione Class
Istruzione Const
Declare Statement
Istruzione Delegate
Istruzione Dim
Istruzione Enum
Istruzione Event
Istruzione Function
Istruzione Interface
Property Statement
Istruzione Structure
Istruzione Sub
Vedi anche
Pubblica
Protetto
Friend
Privato protetto
Protected Friend
Livelli di accesso in Visual Basic
Procedure
Strutture
Oggetti e classi
Privato protetto (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Il Private Protected modificatore di accesso è supportato da Visual Basic 15,5 e versioni successive. Per usarlo,
è possibile aggiungere l'elemento seguente al file del progetto di Visual Basic ( * . vbproj). Fino a quando nel
sistema è installato Visual Basic 15,5 o versione successiva, è possibile sfruttare tutte le funzionalità del
linguaggio supportate dalla versione più recente del compilatore Visual Basic:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
Per ulteriori informazioni, vedere impostazione della versione della lingua Visual Basic.
NOTE
In Visual Studio, selezionando la Guida sensibile al contesto, private protected viene fornita una guida per privato o
protetto. L'IDE sceglie il singolo token sotto il cursore anziché la parola composta.
Regole
Contesto della dichiarazione. È possibile usare Private Protected solo a livello di classe. Ciò significa che
il contesto di dichiarazione per un Protected elemento deve essere una classe e non può essere un file di
origine, uno spazio dei nomi, un'interfaccia, un modulo, una struttura o una procedura.
Comportamento
Livello di accesso. Tutto il codice in una classe può accedere ai relativi elementi. Il codice in qualsiasi
classe che deriva da una classe base e che è contenuto nello stesso assembly può accedere a tutti gli
Private Protected elementi della classe di base. Tuttavia, il codice in qualsiasi classe che deriva da una
classe base e che è contenuto in un assembly diverso non può accedere agli elementi della classe di base
Private Protected .
Modificatori di accesso. Le parole chiave che specificano il livello di accesso sono denominate
modificatori di accesso. Per un confronto dei modificatori di accesso, vedere livelli di accesso in Visual
Basic.
Il modificatore Private Protected può essere usato nei contesti seguenti:
Istruzione Class di una classe annidata
Istruzione Const
Declare Statement
Istruzione Delegate di un delegato annidato in una classe
Istruzione Dim
Istruzione enum di un'enumerazione annidata in una classe
Istruzione Event
Istruzione Function
Istruzione Interface di un'interfaccia annidata in una classe
Property Statement
Istruzione Structure di una struttura annidata in una classe
Istruzione Sub
Vedi anche
Pubblica
Protetto
Friend
Privata
Protected Friend
Livelli di accesso in Visual Basic
Procedure
Strutture
Oggetti e classi
Protected (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Un modificatore di accesso ai membri che specifica che uno o più elementi di programmazione dichiarati sono
accessibili solo dall'interno della propria classe o da una classe derivata.
Commenti
A volte un elemento di programmazione dichiarato in una classe contiene dati sensibili o codice limitato e si
vuole limitare l'accesso all'elemento. Tuttavia, se la classe è ereditabile e si prevede una gerarchia di classi
derivate, potrebbe essere necessario che queste classi derivate accedano ai dati o al codice. In tal caso, è
necessario che l'elemento sia accessibile sia dalla classe di base che da tutte le classi derivate. Per limitare
l'accesso a un elemento in questo modo, è possibile dichiararlo con Protected .
NOTE
Il Protected modificatore di accesso può essere combinato con altri due modificatori:
Il modificatore Friend protetto rende accessibile un membro della classe da tale classe, dalle classi derivate e dallo
stesso assembly in cui è definita la classe.
Il modificatore protected privato rende accessibile a un membro della classe i tipi derivati, ma solo all'interno
dell'assembly che lo contiene.
Regole
Contesto della dichiarazione. È possibile usare Protected solo a livello di classe. Ciò significa che il contesto
di dichiarazione per un Protected elemento deve essere una classe e non può essere un file di origine, uno
spazio dei nomi, un'interfaccia, un modulo, una struttura o una procedura.
Comportamento
Livello di accesso. Tutto il codice in una classe può accedere ai relativi elementi. Il codice in qualsiasi
classe che deriva da una classe base può accedere a tutti gli Protected elementi della classe di base.
Questo vale per tutte le generazioni di derivazione. Ciò significa che una classe può accedere Protected
agli elementi della classe di base della classe di base e così via.
L'accesso protetto non è un superset o un subset di accesso Friend.
Modificatori di accesso. Le parole chiave che specificano il livello di accesso sono denominate
modificatori di accesso. Per un confronto dei modificatori di accesso, vedere livelli di accesso in Visual
Basic.
Il modificatore Protected può essere usato nei contesti seguenti:
Istruzione Class
Istruzione Const
Declare Statement
Istruzione Delegate
Istruzione Dim
Istruzione Enum
Istruzione Event
Istruzione Function
Istruzione Interface
Property Statement
Istruzione Structure
Istruzione Sub
Vedi anche
Pubblica
Friend
Privata
Privato protetto
Protected Friend
Livelli di accesso in Visual Basic
Procedure
Strutture
Oggetti e classi
Friend protetto (Visual Basic)
18/03/2021 • 2 minutes to read • Edit Online
La combinazione delle parole chiave Protected Friend è un modificatore di accesso ai membri. Conferisce sia
l'accesso Friend che l'accesso protetto sugli elementi dichiarati, in modo che siano accessibili da qualsiasi punto
dello stesso assembly, dalla propria classe e dalle classi derivate. È possibile specificare Protected Friend solo
per i membri delle classi. non è possibile applicare Protected Friend ai membri di una struttura perché le
strutture non possono essere ereditate.
NOTE
In Visual Studio, selezionando la Guida sensibile al contesto, Protected Friend viene fornita una guida per protected o
Friend. L'IDE sceglie il singolo token sotto il cursore anziché la parola composta.
Vedi anche
Pubblica
Protetto
Friend
Privata
Privato protetto
Livelli di accesso in Visual Basic
Procedure
Strutture
Oggetti e classi
Public (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che uno o più elementi di programmazione dichiarati non hanno restrizioni di accesso.
Commenti
Se si pubblica un componente o un set di componenti, ad esempio una libreria di classi, in genere si vuole che
gli elementi di programmazione siano accessibili da qualsiasi codice che interagisce con l'assembly. Per
conferire l'accesso illimitato a un elemento, è possibile dichiararlo con Public .
L'accesso pubblico è il livello normale per un elemento di programmazione quando non è necessario limitarne
l'accesso. Si noti che il livello di accesso di un elemento dichiarato all'interno di un'interfaccia, di un modulo, di
una classe o di una struttura viene impostato sul valore predefinito Public se non viene dichiarato in caso
contrario.
Regole
Contesto della dichiarazione. È possibile usare Public solo a livello di modulo, interfaccia o spazio dei
nomi. Ciò significa che il contesto di dichiarazione per un Public elemento deve essere un file di origine,
uno spazio dei nomi, un'interfaccia, un modulo, una classe o una struttura e non può essere una routine.
Comportamento
Livello di accesso. Tutto il codice che può accedere a un modulo, una classe o una struttura può
accedere ai relativi Public elementi.
Accesso predefinito. Per impostazione predefinita, le variabili locali all'interno di una stored procedure
non possono usare alcun modificatore di accesso.
Modificatori di accesso. Le parole chiave che specificano il livello di accesso sono denominate
modificatori di accesso. Per un confronto dei modificatori di accesso, vedere livelli di accesso in Visual
Basic.
Il modificatore Public può essere usato nei contesti seguenti:
Istruzione Class
Istruzione Const
Declare Statement
Istruzione Delegate
Istruzione Dim
Istruzione Enum
Istruzione Event
Istruzione Function
Istruzione Interface
Istruzione Module
Operator Statement
Property Statement
Istruzione Structure
Istruzione Sub
Vedi anche
Protetto
Friend
Privata
Privato protetto
Protected Friend
Livelli di accesso in Visual Basic
Procedure
Strutture
Oggetti e classi
ReadOnly (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Specifica che una variabile o una proprietà può essere letta ma non scritta.
Commenti
Regole
Contesto della dichiarazione. Si può usare ReadOnly solo a livello di modulo. Ciò significa che il
contesto di dichiarazione per un ReadOnly elemento deve essere una classe, una struttura o un modulo e
non può essere un file di origine, uno spazio dei nomi o una procedura.
Modificatori combinati. Non è possibile specificare ReadOnly insieme Static a nella stessa
dichiarazione.
Assegnazione di un valore. Il codice che utilizza una ReadOnly proprietà non può impostarne il valore.
Il codice che ha accesso all'archiviazione sottostante può tuttavia assegnare o modificare il valore in
qualsiasi momento.
È possibile assegnare un valore a una ReadOnly variabile solo nella relativa dichiarazione o nel
costruttore di una classe o struttura in cui è definito.
IMPORTANT
Se il tipo di dati della variabile è un tipo di riferimento, ad esempio una matrice o un'istanza di classe, i relativi membri
possono essere modificati anche se la variabile stessa è ReadOnly . Questa condizione è illustrata nell'esempio seguente.
Quando viene inizializzato, la matrice a cui fa riferimento characterArray() include "x", "y" e "z". Poiché la
variabile characterArray è ReadOnly , non è possibile modificarne il valore dopo l'inizializzazione, ovvero non è
possibile assegnarvi una nuova matrice. Tuttavia, è possibile modificare i valori di uno o più membri della
matrice. In seguito a una chiamata alla routine ChangeArrayElement , la matrice a cui fa riferimento
characterArray() include "x", "M" e "z".
Si noti che questo comportamento è simile alla dichiarazione di un parametro di routine come ByVal, che
impedisce alla routine di modificare l'argomento chiamante stesso ma ne consente la modifica dei membri.
Esempio
Nell'esempio seguente viene definita una ReadOnly proprietà per la data di assunzione di un dipendente. La
classe archivia il valore della proprietà internamente come Private variabile e solo il codice all'interno della
classe può modificare tale valore. Tuttavia, la proprietà è Public e qualsiasi codice in grado di accedere alla
classe può leggere la proprietà.
Class employee
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
End Class
Vedi anche
WriteOnly
Parole chiave
Shadows (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Specifica che un elemento di programmazione dichiarato ridichiara e nasconde un elemento con nome identico
o un set di elementi in overload in una classe base.
Commenti
Lo scopo principale dello shadowing, noto anche come nascondiglio per nome, è quello di mantenere la
definizione dei membri della classe. La classe base può subire una modifica che crea un elemento con lo stesso
nome di uno già definito. In tal caso, il Shadows modificatore impone la risoluzione dei riferimenti attraverso la
classe al membro definito, anziché al nuovo elemento della classe di base.
Sebbene lo shadowing e l'override ridefiniscano entrambi un elemento ereditato, tra i due metodi esistono
differenze sostanziali. Per ulteriori informazioni, vedere shadowing in Visual Basic.
Regole
Contesto della dichiarazione. È possibile usare Shadows solo a livello di classe. Ciò significa che il
contesto di dichiarazione per un Shadows elemento deve essere una classe e non può essere un file di
origine, uno spazio dei nomi, un'interfaccia, un modulo, una struttura o una procedura.
In una singola istruzione di dichiarazione è possibile dichiarare un solo elemento shadowing.
Modificatori combinati. Non è possibile specificare Shadows insieme a Overloads , Overrides o
Static nella stessa dichiarazione.
Tipi di elemento. È possibile nascondere qualsiasi tipo di elemento dichiarato con qualsiasi altro tipo.
Se si nasconde una proprietà o una routine con un'altra proprietà o routine, i parametri e il tipo restituito
non devono corrispondere a quelli della routine o della proprietà della classe base.
Accesso. L'elemento ombreggiato nella classe base non è in genere disponibile all'interno della classe
derivata che lo nasconde. Tuttavia, si applicano le considerazioni seguenti.
Se l'elemento shadowing non è accessibile dal codice che vi fa riferimento, il riferimento viene
risolto nell'elemento ombreggiato. Se, ad esempio, un Private elemento nasconde un elemento
della classe base, il codice che non dispone dell'autorizzazione per accedere all'elemento Private
accede all'elemento della classe di base.
Se si nasconde un elemento, è comunque possibile accedere all'elemento ombreggiato tramite un
oggetto dichiarato con il tipo della classe di base. È anche possibile accedervi tramite MyBase .
Il modificatore Shadows può essere usato nei contesti seguenti:
Istruzione Class
Istruzione Const
Declare Statement
Istruzione Delegate
Istruzione Dim
Istruzione Enum
Istruzione Event
Istruzione Function
Istruzione Interface
Property Statement
Istruzione Structure
Istruzione Sub
Vedi anche
Condivisa
Statico
Privata
Me, My, MyBase e MyClass
Nozioni fondamentali sull'ereditarietà
MustOverride
NotOverridable
Overload
Overridable
Override
Shadowing in Visual Basic
Shared (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
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.
Regole
Contesto della dichiarazione. Si può usare Shared solo a livello di modulo. Ciò significa che il
contesto di dichiarazione per un Shared elemento deve essere una classe o una struttura e non può
essere un file di origine, uno spazio dei nomi o una procedura.
Modificatori combinati. Non è possibile specificare Shared insieme a override, Overridable,
NotOverridable, MustOverrideo static nella stessa dichiarazione.
Accesso. Per accedere a un elemento condiviso, è necessario qualificarlo con il nome della classe o della
struttura, non con il nome della variabile di un'istanza specifica della classe o della 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 procedura condivisa IsNaN esposta dalla Double struttura.
Condivisione implicita. Non è possibile usare il Shared modificatore in un' istruzione Const, ma le
costanti sono implicitamente condivise. Analogamente, non è possibile dichiarare un membro di un
modulo o un'interfaccia come Shared , ma sono implicitamente condivisi.
Comportamento
Archiviazione. Una variabile o un evento condiviso viene archiviato in memoria una sola volta,
indipendentemente dal numero di istanze create dalla classe o dalla struttura. Analogamente, una routine
o una proprietà condivisa include un solo set di variabili locali.
Accesso tramite una variabile di istanza. È possibile accedere a un elemento condiviso qualificando
il nome di una variabile che contiene un'istanza specifica della classe o della struttura. Sebbene questo in
genere funzioni 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 consente di
accedere tramite il nome della classe o della struttura anziché di valutare l'espressione. Questo accesso
produce risultati imprevisti se si desidera che l'espressione esegua altre azioni, oltre a restituire l'istanza.
Nell'esempio seguente viene illustrata questa situazione.
Sub Main()
' The following line is the preferred way to access Total.
ShareTotal.Total = 10
Nell'esempio precedente, il compilatore genera un messaggio di avviso entrambe le volte che il codice
accede alla proprietà condivisa Total tramite un'istanza. In ogni caso, consente di accedere direttamente
alla classe e non ShareTotal usa alcuna istanza. Nel caso della chiamata prevista alla procedura
ReturnClass , ciò significa che non viene anche generata una chiamata a ReturnClass , quindi non viene
eseguita l'azione aggiuntiva di visualizzazione della funzione "ReturnClass () chiamata".
Il modificatore Shared può essere usato nei contesti seguenti:
Istruzione Dim
Istruzione Event
Istruzione Function
Operator Statement
Property Statement
Istruzione Sub
Vedi anche
Ombreggiature
Statico
Durata in Visual Basic
Procedure
Strutture
Oggetti e classi
Static (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Specifica che una o più variabili locali dichiarate devono continuare a esistere e mantenere i valori più recenti
dopo la terminazione della routine in cui sono dichiarate.
Commenti
In genere, una variabile locale di una routine cessa di esistere non appena la procedura viene arrestata. Una
variabile statica continua a esistere e mantiene il valore più recente. Alla successiva chiamata della stored
procedure da parte del codice, la variabile non viene reinizializzata e continua a contenere l'ultimo valore
assegnato. Una variabile statica continua a esistere per la durata della classe o del modulo in cui è definita.
Regole
Contesto della dichiarazione. È possibile utilizzare Static solo su variabili locali. Ciò significa che il
contesto di dichiarazione per una Static variabile deve essere una routine o un blocco in una routine e
non può essere un file di origine, uno spazio dei nomi, una classe, una struttura o un modulo.
Non è possibile utilizzare Static all'interno di una routine della struttura.
Static Non è possibile dedurre i tipi di dati delle variabili locali. Per altre informazioni, vedere inferenza
dei tipi locali.
Modificatori combinati. Non è possibile specificare Static insieme a ReadOnly , Shadows o Shared
nella stessa dichiarazione.
Comportamento
Quando si dichiara una variabile statica in una Shared routine, solo una copia della variabile statica è
disponibile per l'intera applicazione. È possibile chiamare una Shared stored procedure usando il nome della
classe, non una variabile che punta a un'istanza della classe.
Quando si dichiara una variabile statica in una routine che non è Shared , solo una copia della variabile è
disponibile per ogni istanza della classe. Una routine non condivisa viene chiamata utilizzando una variabile che
punta a un'istanza specifica della classe.
Esempio
L'esempio seguente illustra l'uso di Static .
La variabile totalSales viene inizializzata su 0 solo una volta. Ogni volta che si immette
Static updateSales ,
totalSales dispone ancora del valore più recente calcolato.
Vedi anche
Ombreggiature
Condivisa
Durata in Visual Basic
Dichiarazione di variabile
Strutture
Inferenza del tipo di variabile locale
Oggetti e classi
Unicode (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che Visual Basic deve effettuare il marshalling di tutte le stringhe in valori Unicode indipendentemente
dal nome della procedura esterna dichiarata.
Quando si chiama una routine definita all'esterno del progetto, il compilatore Visual Basic non ha accesso alle
informazioni necessarie per chiamare correttamente la stored procedure. Queste informazioni includono la
posizione in cui si trova la stored procedure, la modalità di identificazione, la sequenza chiamante e il tipo
restituito e il set di caratteri stringa utilizzato. L' istruzione Declare crea un riferimento a una procedura esterna e
fornisce le informazioni necessarie.
La charsetmodifier parte nell' Declare istruzione fornisce le informazioni sul set di caratteri per il marshalling
delle stringhe durante una chiamata alla procedura esterna. Influiscono inoltre sul modo in cui Visual Basic
Cerca nel file esterno il nome della procedura esterna. Il Unicode modificatore specifica che Visual Basic
necessario effettuare il marshalling di tutte le stringhe in valori Unicode e cercare la routine senza modificarne il
nome durante la ricerca.
Se non viene specificato alcun modificatore del set di caratteri, Ansi è il valore predefinito.
Commenti
Il Unicode modificatore può essere usato in questo contesto:
Declare Statement
Vedi anche
ANSI
Auto
Parole chiave
Widening (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Indica che un operatore di conversione ( CType ) converte una classe o una struttura in un tipo che può
conservare tutti i valori possibili della classe o della struttura originale.
Vedi anche
Operator Statement
Narrowing
Widening and Narrowing Conversions
Procedura: definire un operatore
CType Function
Option Strict Statement
Procedura: Definire un operatore di conversione
WithEvents (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica che una o più variabili membro dichiarate fanno riferimento a un'istanza di una classe che può
generare eventi.
Commenti
Quando una variabile viene definita tramite WithEvents , è possibile specificare in modo dichiarativo che un
metodo gestisce gli eventi della variabile utilizzando la Handles parola chiave.
È possibile usare WithEvents solo a livello di classe o di modulo. Ciò significa che il contesto di dichiarazione per
una WithEvents variabile deve essere una classe o un modulo e non può essere un file di origine, uno spazio dei
nomi, una struttura o una procedura.
Non è possibile usare WithEvents in un membro di struttura.
È possibile dichiarare solo singole variabili, non matrici, con WithEvents .
Regole
Tipi di elemento. È necessario dichiarare le WithEvents variabili come variabili oggetto in modo che possano
accettare istanze di classe. Tuttavia, non è possibile dichiararli come Object . È necessario dichiararli come la
classe specifica che può generare gli eventi.
Il WithEvents modificatore può essere usato in questo contesto: istruzione Dim
Esempio
Dim WithEvents app As Application
Vedere anche
Selettori
Parole chiave
Eventi
WriteOnly (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Commenti
Regole
Contesto della dichiarazione. Si può usare WriteOnly solo a livello di modulo. Ciò significa che il contesto di
dichiarazione per una WriteOnly proprietà deve essere una classe, una struttura o un modulo e non può essere
un file di origine, uno spazio dei nomi o una procedura.
È possibile dichiarare una proprietà come WriteOnly , ma non come variabile.
IMPORTANT
Quando si definisce e si usa una WriteOnly proprietà, tenere presenti le misure di protezione aggiuntive seguenti:
Vedi anche
ReadOnly
Privata
Parole chiave
Moduli (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic offre diversi moduli che consentono di semplificare le attività comuni nel codice, tra cui la
manipolazione delle stringhe, l'esecuzione di calcoli matematici, l'ottenimento di informazioni sul sistema,
l'esecuzione di operazioni su file e directory e così via. La tabella seguente elenca i moduli forniti da Visual Basic.
Vedi anche
Riferimenti al linguaggio Visual Basic
Parola chiave Nothing (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Rappresenta il valore predefinito di qualsiasi tipo di dati. Per i tipi di riferimento, il valore predefinito è il null
riferimento. Per i tipi di valore, il valore predefinito dipende dal tipo di valore che ammette valori null.
NOTE
Per i tipi di valore non nullable, Nothing in Visual Basic differisce da null in C#. In Visual Basic, se si imposta una
variabile di un tipo di valore non nullable su Nothing , la variabile viene impostata sul valore predefinito per il tipo
dichiarato. In C#, se si assegna una variabile di un tipo di valore non nullable a null , si verifica un errore in fase di
compilazione.
Commenti
Nothing rappresenta il valore predefinito di un tipo di dati. Il valore predefinito dipende dal fatto che la variabile
sia di un tipo di valore o di un tipo di riferimento.
Una variabile di un tipo di valore contiene direttamente il relativo valore. I tipi di valore includono tutti i tipi di
dati numerici,,, Boolean Char Date , tutte le strutture e tutte le enumerazioni. Una variabile di un tipo
riferimento archivia un riferimento a un'istanza dell'oggetto in memoria. I tipi di riferimento includono classi,
matrici, delegati e stringhe. Per altre informazioni, vedere Value Types and Reference Types.
Se una variabile è di un tipo valore, il comportamento di Nothing varia a seconda che la variabile sia di un tipo
di dati nullable. Per rappresentare un tipo di valore Nullable, aggiungere un ? modificatore al nome del tipo. Se
Nothing si assegna a una variabile nullable, il valore viene impostato su null . Per ulteriori informazioni ed
esempi, vedere tipi di valore Nullable.
Se una variabile è di un tipo valore che non ammette valori null, l'assegnazione a tale variabile lo Nothing
imposta sul valore predefinito per il tipo dichiarato. Se il tipo contiene membri variabili, vengono impostati tutti
sui rispettivi valori predefiniti. Nell'esempio seguente viene illustrato questo per i tipi scalari.
Module Module1
Sub Main()
Dim ts As TestStruct
Dim i As Integer
Dim b As Boolean
Console.WriteLine($"ts.Name: {ts.Name}")
Console.WriteLine($"ts.Number: {ts.Number}")
Console.WriteLine($"i: {i}")
Console.WriteLine($"b: {b}")
Console.ReadKey()
End Sub
Se una variabile è di un tipo riferimento, l'assegnazione Nothing alla variabile lo imposta su un null
riferimento del tipo della variabile. Una variabile impostata su un null riferimento non è associata ad alcun
oggetto. Questo concetto è illustrato nell'esempio seguente:
Module Module1
Sub Main()
End Sub
Class TestClass
Public Field1 As Integer
' . . .
End Class
End Module
Quando si verifica se una variabile di riferimento (o tipo di valore Nullable) è null , non usare = Nothing o
<> Nothing . Usare sempre Is Nothing o IsNot Nothing .
Per le stringhe in Visual Basic, la stringa vuota è uguale a Nothing . Pertanto, "" = Nothing è true.
Nell'esempio seguente vengono illustrati i confronti che utilizzano gli Is IsNot operatori e:
Module Module1
Sub Main()
n = 4
Console.WriteLine(n Is Nothing)
' Output: False
n = Nothing
Console.WriteLine(n IsNot Nothing)
' Output: False
Console.ReadKey()
End Sub
Class TestClass
Public Field1 As Integer
Private field2 As Boolean
End Class
End Module
Se si dichiara una variabile senza usare una As clausola e la si imposta su Nothing , la variabile ha un tipo di
Object . Un esempio è Dim something = Nothing . In questo caso si verifica un errore in fase di compilazione
quando Option Strict è Option Infer attivo ed è disattivato.
Quando si assegna Nothing a una variabile oggetto, non fa più riferimento a un'istanza dell'oggetto. Se la
variabile ha precedentemente fatto riferimento a un'istanza, impostarla su Nothing non termina l'istanza stessa.
L'istanza viene terminata e le risorse di memoria e di sistema associate vengono rilasciate, solo dopo che il
Garbage Collector (GC) rileva che non sono presenti riferimenti attivi rimanenti.
Nothing differisce dall' DBNull oggetto, che rappresenta una variante non inizializzata o una colonna di
database non esistente.
Vedi anche
Istruzione Dim
Durata degli oggetti: come creare e distruggere oggetti
Durata in Visual Basic
Operatore Is
Operatore IsNot
Tipi di valore Nullable
Oggetti (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Questo argomento contiene collegamenti ad altri argomenti che illustrano gli oggetti runtime di Visual Basic e
contengono tabelle di procedure, proprietà ed eventi dei relativi membri.
L'oggetto My.Application è costituito dalle classi seguenti: Specifica i dati associati solo all'applicazione o DLL corrente.
Nessuna informazione a livello di sistema può essere
ApplicationBase specifica i membri disponibili in tutti i modificata con My.Application .
progetti.
Alcuni membri sono disponibili solo per le applicazioni
WindowsFormsApplicationBase specifica i membri disponibili console o Windows Form.
nelle applicazioni Windows Form.
My.Computer.FileSystem (FileSystem) Specifica proprietà e metodi per l'uso di unità, file e directory.
My.Computer.Ports (Ports) Specifica una proprietà e un metodo per l'accesso alle porte
seriali del computer.
Vedi anche
Riferimenti al linguaggio Visual Basic
Oggetto My.Application
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e sulle proprietà dell' My.Application oggetto, vedere le risorse seguenti:
ApplicationBase per i membri disponibili in tutti i progetti.
WindowsFormsApplicationBase per i membri disponibili nelle applicazioni Windows Form.
ConsoleApplicationBase per i membri disponibili nelle applicazioni console.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.ApplicationServices
Classe: WindowsFormsApplicationBase la classe base ConsoleApplicationBase fornisce i membri disponibili
nelle applicazioni console e la relativa classe di base ApplicationBase fornisce i membri disponibili in tutti i
progetti.
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Application.Info
My.Application.Log (oggetto)
Oggetto My.Application.Info
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Application.Info , vedere AssemblyInfo.
NOTE
È possibile utilizzare le proprietà della System.Diagnostics.FileVersionInfo classe per ottenere informazioni su un file su
disco.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.ApplicationServices
Classe:AssemblyInfo
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Application
My.Application.Log (oggetto)
05/03/2021 • 2 minutes to read • Edit Online
Fornisce una proprietà e i metodi per scrivere le informazioni relative a eventi ed eccezioni nei listener di log
dell'applicazione.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Application.Log , vedere Log.
Per ulteriori informazioni, vedere registrazione di informazioni dall'applicazione.
NOTE
È anche possibile usare le classi in .NET Framework per registrare informazioni dall'applicazione. Per altre informazioni,
vedere Tracing and Instrumenting Applications.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Logging
Classe:Log
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Application
Oggetto My.Computer
05/03/2021 • 2 minutes to read • Edit Online
Specifica le proprietà per la modifica dei componenti del computer, ad esempio audio, orologio, tastiera, file
system e così via.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer , vedere Computer. La classe base
ServerComputer fornisce i membri disponibili in tutti i progetti.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe: Computer la classe base ServerComputer fornisce i membri disponibili in tutti i progetti.
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer.Audio
Oggetto My.Computer.Clipboard
Oggetto My.Computer.Clock
Oggetto My.Computer.FileSystem
Oggetto My.Computer.FileSystem.SpecialDirectories
Oggetto My.Computer.Info
Oggetto My.Computer.Keyboard
Oggetto My.Computer.Mouse
Oggetto My.Computer.Network
Oggetto My.Computer.Ports
Oggetto My.Computer.Registry
Oggetto My.Computer.Audio
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Audio , vedere Audio.
Per ulteriori informazioni, vedere riproduzione di suoni.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe:Audio
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Computer.Clipboard
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Clipboard , vedere ClipboardProxy.
Per ulteriori informazioni, vedere archiviazione e lettura di dati negli Appunti.
NOTE
È anche possibile usare i metodi della System.Windows.Forms.Clipboard classe per modificare gli Appunti.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.MyServices
Classe: ClipboardProxy (fornisce l'accesso a Clipboard )
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Clipboard
Oggetto My.Computer
Oggetto My.Computer.Clock
05/03/2021 • 2 minutes to read • Edit Online
Offre proprietà che consentono di accedere all'ora locale corrente e all'ora UTC (Universal Coordinated Time),
equivalente all'ora di Greenwich, dal clock di sistema.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Clock , vedere Clock.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe:Clock
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Computer.FileSystem
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.FileSystem , vedere FileSystem.
Per ulteriori informazioni, vedere accesso ai file con Visual Basic.
NOTE
È anche possibile usare le classi nello System.IO spazio dei nomi per lavorare con unità, file e directory.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.MyServices
Classe: FileSystemProxy (fornisce l'accesso a FileSystem )
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer.FileSystem.SpecialDirectories
Oggetto My.Computer
Oggetto My.Computer.FileSystem.SpecialDirectories
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.FileSystem.SpecialDirectories , vedere
SpecialDirectories.
Per ulteriori informazioni, vedere procedura: recuperare il contenuto della directory documenti.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.MyServices
Classe: SpecialDirectoriesProxy (fornisce l'accesso a SpecialDirectories )
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer.FileSystem
Oggetto My.Computer
Oggetto My.Computer.Info
05/03/2021 • 2 minutes to read • Edit Online
Offre proprietà che consentono di ottenere informazioni su memoria del computer, assembly caricati, nome e
sistema operativo.
Commenti
Per informazioni sulle proprietà dell' My.Computer.Info oggetto, vedere ComputerInfo .
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe:ComputerInfo
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Computer.Keyboard
05/03/2021 • 2 minutes to read • Edit Online
Offre proprietà che consentono di accedere allo stato corrente della tastiera, per sapere ad esempio quali tasti
vengono attualmente premuti, e un metodo per inviare le sequenze di tasti alla finestra attiva.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Keyword , vedere Keyboard.
Per altre informazioni, vedere Accesso alla tastiera.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe:Keyboard
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Computer.Mouse
05/03/2021 • 2 minutes to read • Edit Online
Fornisce le proprietà per il recupero delle informazioni relative al formato e alla configurazione del mouse
installato sul computer locale.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Mouse , vedere Mouse.
Per ulteriori informazioni, vedere accesso al mouse.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe:Mouse
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Computer.Network
05/03/2021 • 2 minutes to read • Edit Online
Fornisce una proprietà, un evento e i metodi per l'interazione con la rete a cui è connesso il computer.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Network , vedere Network.
Per ulteriori informazioni, vedere esecuzione di operazioni di rete.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe:Network
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Computer.Ports
05/03/2021 • 2 minutes to read • Edit Online
Specifica una proprietà e un metodo per l'accesso alle porte seriali del computer.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Ports , vedere Ports.
Per ulteriori informazioni, vedere accesso alle porte del computer.
NOTE
È inoltre possibile utilizzare le proprietà e i metodi della System.IO.Ports.SerialPort classe per accedere alle porte seriali del
computer.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Devices
Classe:Ports
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Computer.Registry
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Computer.Registry , vedere RegistryProxy.
Per ulteriori informazioni, vedere lettura e scrittura nel registro di sistema.
NOTE
È anche possibile modificare il registro di sistema usando i metodi della Microsoft.Win32.Registry classe.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.MyServices
Classe: RegistryProxy (fornisce l'accesso a Registry )
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Oggetto My.Computer
Oggetto My.Forms
05/03/2021 • 5 minutes to read • Edit Online
Fornisce le proprietà per l'accesso a un'istanza di ogni Windows Form dichiarato nel progetto corrente.
Commenti
L' My.Forms oggetto fornisce un'istanza di ogni form nel progetto corrente. Il nome della proprietà è uguale al
nome del modulo a cui accede la proprietà.
È possibile accedere ai moduli forniti dall' My.Forms oggetto utilizzando il nome del form, senza qualifica. Poiché
il nome della proprietà è uguale al nome del tipo del form, questo consente di accedere a un form come se
disponesse di un'istanza predefinita. Ad esempio, My.Forms.Form1.Show equivale a Form1.Show .
L' My.Forms oggetto espone solo i form associati al progetto corrente. Non fornisce l'accesso ai moduli
dichiarati in dll a cui si fa riferimento. Per accedere a un modulo fornito da una DLL, è necessario utilizzare il
nome completo del modulo, scritto come dllname. FormName.
È possibile usare la OpenForms proprietà per ottenere una raccolta di tutti i form aperti dell'applicazione.
L'oggetto e le relative proprietà sono disponibili solo per le applicazioni Windows.
Proprietà
Ogni proprietà dell' My.Forms oggetto fornisce l'accesso a un'istanza di un form nel progetto corrente. Il nome
della proprietà è uguale al nome del modulo a cui accede la proprietà e il tipo della proprietà è uguale al tipo del
form.
NOTE
Se si verifica un conflitto di nomi, il nome della proprietà per accedere a un modulo è RootNamespace _ spazio dei nomi _
FormName. Si considerino, ad esempio, due moduli denominati Form1. se uno di questi moduli è nello spazio dei nomi
radice WindowsApplication1 e nello spazio dei nomi Namespace1 , si accederà a tale modulo tramite
My.Forms.WindowsApplication1_Namespace1_Form1 .
L' My.Forms oggetto consente di accedere all'istanza del modulo principale dell'applicazione creato all'avvio. Per
tutti gli altri form, l' My.Forms oggetto crea una nuova istanza del form quando vi si accede e la archivia. I
tentativi successivi di accesso a tale proprietà restituiscono tale istanza del form.
È possibile eliminare un form assegnando Nothing alla proprietà per il form. Il setter della proprietà chiama il
Close metodo del form, quindi assegna il Nothing valore archiviato. Se si assegna un valore diverso Nothing da
alla proprietà, il setter genera un' ArgumentException eccezione.
È possibile verificare se una proprietà dell' My.Forms oggetto archivia un'istanza del form utilizzando l' Is
IsNot operatore OR. È possibile utilizzare gli operatori per verificare se il valore della proprietà è Nothing .
NOTE
In genere, Is l' IsNot operatore o deve leggere il valore della proprietà per eseguire il confronto. Tuttavia, se la
proprietà è attualmente archiviata Nothing , la proprietà crea una nuova istanza del form e quindi restituisce tale istanza.
Tuttavia, il compilatore Visual Basic considera le proprietà dell' My.Forms oggetto in modo diverso e consente Is all'
IsNot operatore OR di controllare lo stato della proprietà senza modificarne il valore.
Esempio
In questo esempio viene modificato il titolo del SidebarMenu modulo predefinito.
Per il corretto funzionamento di questo esempio, il progetto deve avere un formato denominato SidebarMenu .
Questo codice funzionerà solo in un progetto di applicazione Windows.
Requisiti
Disponibilità per tipo di progetto
T IP O DI P RO GET TO DISP O N IB IL E
Applicazione Windows Sì
Libreria di classi No
Applicazione console No
Servizio Windows No
Sito Web No
Vedere anche
OpenForms
Form
Close
Oggetti
Operatore Is
Operatore IsNot
Accesso ai moduli dell'applicazione
Oggetto My.Log
05/03/2021 • 2 minutes to read • Edit Online
Fornisce la proprietà e i metodi per la scrittura dell'evento e delle informazioni sulle eccezioni nei listener del log
dell'applicazione.
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.Log , vedere AspLog.
L' My.Log oggetto è disponibile solo per le applicazioni ASP.NET. Per le applicazioni client, usare l'oggetto My.
Application. log.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.Logging
Classe:AspLog
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Oggetto My.Request
05/03/2021 • 2 minutes to read • Edit Online
Commenti
L'oggetto My.Request contiene informazioni sulla richiesta HTTP corrente.
L'oggetto My.Request è disponibile solo per le applicazioni ASP.NET.
Esempio
Nell'esempio seguente viene ottenuta la raccolta di intestazioni dall' My.Request oggetto e viene utilizzato l'
My.Response oggetto per scriverlo nella pagina ASP.NET.
<script runat="server">
Public Sub ShowHeaders()
' Load the header collection from the Request object.
Dim coll As System.Collections.Specialized.NameValueCollection
coll = My.Request.Headers
Vedi anche
HttpRequest
Oggetto My.Response
Oggetto My.Response
05/03/2021 • 2 minutes to read • Edit Online
Ottiene l' HttpResponse oggetto associato all'oggetto Page . Questo oggetto consente di inviare dati di risposta
HTTP a un client e contiene informazioni su tale risposta.
Commenti
L' My.Response oggetto contiene l' HttpResponse oggetto corrente associato alla pagina.
L' My.Response oggetto è disponibile solo per le applicazioni ASP.NET.
Esempio
Nell'esempio seguente viene ottenuta la raccolta di intestazioni dall' My.Request oggetto e viene utilizzato l'
My.Response oggetto per scriverlo nella pagina ASP.NET.
<script runat="server">
Public Sub ShowHeaders()
' Load the header collection from the Request object.
Dim coll As System.Collections.Specialized.NameValueCollection
coll = My.Request.Headers
Vedi anche
HttpResponse
Oggetto My.Request
Oggetto My.Resources
05/03/2021 • 6 minutes to read • Edit Online
Commenti
L' My.Resources oggetto fornisce l'accesso alle risorse dell'applicazione e consente di recuperare
dinamicamente le risorse per l'applicazione. Per ulteriori informazioni, vedere gestione delle risorse
dell'applicazione (.NET).
L' My.Resources oggetto espone solo le risorse globali. Non fornisce l'accesso ai file di risorse associati ai
moduli. È necessario accedere alle risorse del modulo dal form.
È possibile accedere ai file di risorse specifici delle impostazioni cultura dell'applicazione dall' My.Resources
oggetto. Per impostazione predefinita, l' My.Resources oggetto cerca le risorse dal file di risorse che corrisponde
alle impostazioni cultura nella UICulture Proprietà. Tuttavia, è possibile eseguire l'override di questo
comportamento e specificare impostazioni cultura specifiche da usare per le risorse. Per altre informazioni,
vedere Risorse nelle applicazioni desktop.
Proprietà
Le proprietà dell' My.Resources oggetto forniscono l'accesso in sola lettura alle risorse dell'applicazione. Per
aggiungere o rimuovere risorse, utilizzare Progettazione progetti . È possibile accedere alle risorse aggiunte
tramite la finestra di progettazione progetti usando My.Resources. resourceName.
È anche possibile aggiungere o rimuovere file di risorse selezionando il progetto in Esplora soluzioni e
facendo clic su Aggiungi nuovo elemento o Aggiungi elemento esistente dal menu progetto . È possibile
accedere alle risorse aggiunte in questo modo utilizzando My.Resources. resourceFileName . resourceName.
Ogni risorsa ha un nome, una categoria e un valore e queste impostazioni delle risorse determinano il modo in
cui la proprietà per accedere alla risorsa viene visualizzata nell' My.Resources oggetto. Per le risorse aggiunte in
Progettazione progetti :
Il nome determina il nome della proprietà.
I dati della risorsa corrispondono al valore della proprietà.
La categoria determina il tipo della proprietà:
Stringhe Stringa
Immagini Bitmap
Icone Icon
C AT EGO RY T IP O DI DAT I P RO P RIETÀ
Audio UnmanagedMemoryStream
Classi
L' My.Resources oggetto espone ogni file di risorse come classe con proprietà condivise. Il nome della classe
corrisponde al nome del file di risorse. Come descritto nella sezione precedente, le risorse in un file di risorse
vengono esposte come proprietà nella classe.
Esempio
Questo esempio Mostra come impostare il titolo di un form sulla risorsa stringa denominata Form1Title nel file
di risorse dell'applicazione. Per il corretto funzionamento dell'esempio, l'applicazione deve avere una stringa
denominata Form1Title nel relativo file di risorse.
Sub SetFormTitle()
Me.Text = My.Resources.Form1Title
End Sub
Esempio
Questo esempio Mostra come impostare l'icona del form sull'icona denominata Form1Icon archiviata nel file di
risorse dell'applicazione. Per il corretto funzionamento dell'esempio, l'applicazione deve avere un'icona
denominata Form1Icon nel relativo file di risorse.
Sub SetFormIcon()
Me.Icon = My.Resources.Form1Icon
End Sub
Esempio
Questo esempio Mostra come impostare l'immagine di sfondo di un form sulla risorsa immagine denominata
Form1Background , che si trova nel file di risorse dell'applicazione. Per il corretto funzionamento di questo
esempio, l'applicazione deve avere una risorsa immagine denominata Form1Background nel file di risorse.
Sub SetFormBackgroundImage()
Me.BackgroundImage = My.Resources.Form1Background
End Sub
Esempio
Questo esempio riproduce il suono archiviato come risorsa audio denominata Form1Greeting nel file di risorse
dell'applicazione. Per il corretto funzionamento dell'esempio, l'applicazione deve avere una risorsa audio
denominata Form1Greeting nel file di risorse. Il My.Computer.Audio.Play metodo è disponibile solo per le
applicazioni Windows Form.
Sub PlayFormGreeting()
My.Computer.Audio.Play(My.Resources.Form1Greeting,
AudioPlayMode.Background)
End Sub
Esempio
In questo esempio viene recuperata la versione della lingua francese di una risorsa di stringa dell'applicazione.
La risorsa è denominata Message . Per modificare le impostazioni cultura My.Resources utilizzate dall'oggetto,
nell'esempio viene utilizzato ChangeUICulture .
Per il corretto funzionamento di questo esempio, l'applicazione deve avere una stringa denominata Message nel
relativo file di risorse e l'applicazione deve avere la versione in lingua francese del file di risorse, resources.fr-fr.
resx. Se per l'applicazione non è presente la versione in lingua francese del file di risorse, l' My.Resource oggetto
recupera la risorsa dal file di risorse delle impostazioni cultura predefinite.
Sub ShowLocalizedMessage()
Dim culture As String = My.Application.UICulture.Name
My.Application.ChangeUICulture("fr-FR")
MsgBox(My.Resources.Message)
My.Application.ChangeUICulture(culture)
End Sub
Vedi anche
Gestione delle risorse delle applicazioni (.NET)
Risorse nelle applicazioni desktop
Oggetto My.Settings
05/03/2021 • 3 minutes to read • Edit Online
Commenti
L' My.Settings oggetto fornisce l'accesso alle impostazioni dell'applicazione e consente di archiviare e
recuperare dinamicamente le impostazioni delle proprietà e altre informazioni per l'applicazione. Per altre
informazioni, vedere Gestione delle impostazioni di un'applicazione (.NET).
Proprietà
Le proprietà dell'oggetto My.Settings offrono accesso alle impostazioni dell'applicazione. Per aggiungere o
rimuovere le impostazioni, utilizzare la finestra di progettazione impostazioni .
Ogni impostazione ha un nome , un tipo , un ambito e un valore e queste impostazioni determinano il modo in
cui la proprietà per accedere a ogni impostazione viene visualizzata nell' My.Settings oggetto:
Nome determina il nome della proprietà.
Il tipo determina il tipo della proprietà.
Scope indica se la proprietà è di sola lettura. Se il valore è Application , la proprietà è di sola lettura. Se il
valore è User , la proprietà è di lettura/scrittura.
Value è il valore predefinito della proprietà.
Metodi
M ETO DO DESC RIZ IO N E
L' My.Settings oggetto fornisce anche proprietà e metodi avanzati, ereditati dalla ApplicationSettingsBase
classe.
Attività
Nella tabella seguente sono elencati esempi di attività relative all' My.Settings oggetto.
A VEDERE
Creare una griglia di proprietà per le impostazioni utente Procedura: Creare griglie di proprietà per impostazioni
utente in Visual Basic
Esempio
Nell'esempio riportato di seguito viene mostrato il valore dell'impostazione Nickname .
Sub ShowNickname()
MsgBox("Nickname is " & My.Settings.Nickname)
End Sub
Affinché l'esempio funzioni, l'applicazione deve contenere un'impostazione Nickname di tipo String .
Vedi anche
ApplicationSettingsBase
Procedura: Leggere le impostazioni dell'applicazione in Visual Basic
Procedura: modificare le impostazioni dell'utente in Visual Basic
Procedura: Mantenere le impostazioni dell'utente in Visual Basic
Procedura: Creare griglie di proprietà per impostazioni utente in Visual Basic
Gestione delle impostazioni di un'applicazione (.NET)
Oggetto My.User
05/03/2021 • 2 minutes to read • Edit Online
Commenti
Per informazioni sui metodi e le proprietà dell'oggetto My.User , vedere
Microsoft.VisualBasic.ApplicationServices.User.
Per ulteriori informazioni, vedere accesso ai dati utente.
Requisiti
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedere anche
IPrincipal
CurrentPrincipal
User
Current
Oggetto My.WebServices
05/03/2021 • 5 minutes to read • Edit Online
Fornisce le proprietà per la creazione e l'accesso a una singola istanza di ogni servizio Web XML a cui fa
riferimento il progetto corrente.
Commenti
L'oggetto My.WebServices fornisce un'istanza di ogni servizio Web a cui si fa riferimento nel progetto corrente.
Ogni istanza viene creata su richiesta. È possibile accedere a questi servizi Web tramite le proprietà dell'oggetto
My.WebServices . Il nome della proprietà è uguale al nome del servizio Web a cui la proprietà accede. Qualsiasi
classe che eredita da SoapHttpClientProtocol è un servizio Web. Per informazioni sull'aggiunta di servizi Web a
un progetto, vedere accesso ai servizi Web dell'applicazione.
L' My.WebServices oggetto espone solo i servizi Web associati al progetto corrente. Non fornisce l'accesso ai
servizi Web dichiarati in dll a cui si fa riferimento. Per accedere a un servizio Web fornito da una DLL, è
necessario utilizzare il nome completo del servizio Web nel formato dllname. WebServiceName. Per ulteriori
informazioni, vedere accesso ai servizi Web dell'applicazione.
L'oggetto e le relative proprietà non sono disponibili per le applicazioni Web.
Proprietà
Ogni proprietà dell' My.WebServices oggetto fornisce l'accesso a un'istanza di un servizio Web a cui fa
riferimento il progetto corrente. Il nome della proprietà è uguale al nome del servizio Web a cui accede la
proprietà e il tipo della proprietà è uguale al tipo del servizio Web.
NOTE
Se si verifica un conflitto di nomi, il nome della proprietà per accedere a un servizio Web è RootNamespace _ namespace _
ServiceName. Si considerino, ad esempio, due servizi Web denominati Service1 . Se uno di questi servizi si trova nello
spazio dei nomi radice WindowsApplication1 e nello spazio dei nomi Namespace1 , si accederà a tale servizio
utilizzando My.WebServices.WindowsApplication1_Namespace1_Service1 .
Quando si accede per la prima volta a una delle My.WebServices proprietà dell'oggetto, viene creata una nuova
istanza del servizio Web che viene archiviata. Gli accessi successivi di tale proprietà restituiscono l'istanza del
servizio Web.
È possibile eliminare un servizio Web assegnando Nothing alla proprietà per il servizio Web. Il metodo di
impostazione della proprietà viene assegnato Nothing al valore archiviato. Se si assegna un valore diverso
Nothing da alla proprietà, il setter genera un' ArgumentException eccezione.
È possibile verificare se una proprietà dell' My.WebServices oggetto archivia un'istanza del servizio Web
utilizzando l' Is IsNot operatore OR. È possibile utilizzare gli operatori per verificare se il valore della
proprietà è Nothing .
NOTE
In genere, Is l' IsNot operatore o deve leggere il valore della proprietà per eseguire il confronto. Tuttavia, se la
proprietà è attualmente archiviata Nothing , la proprietà crea una nuova istanza del servizio Web e quindi restituisce tale
istanza. Tuttavia, il compilatore Visual Basic considera le proprietà dell' My.WebServices oggetto in modo specifico e
consente all' Is IsNot operatore OR di controllare lo stato della proprietà senza modificarne il valore.
Esempio
In questo esempio viene chiamato il FahrenheitToCelsius metodo del TemperatureConverter servizio Web XML
e viene restituito il risultato.
Function ConvertFromFahrenheitToCelsius(
ByVal dFahrenheit As Double) As Double
Return My.WebServices.TemperatureConverter.FahrenheitToCelsius(dFahrenheit)
End Function
Per il corretto funzionamento di questo esempio, il progetto deve fare riferimento a un servizio Web
denominato Converter e il servizio Web deve esporre il ConvertTemperature metodo. Per ulteriori informazioni,
vedere accesso ai servizi Web dell'applicazione.
Questo codice non funziona in un progetto di applicazione Web.
Requisiti
Disponibilità per tipo di progetto
T IP O DI P RO GET TO DISP O N IB IL E
Applicazione Windows Sì
Libreria di classi Sì
Applicazione console Sì
Servizio Windows Sì
Sito Web No
Vedere anche
SoapHttpClientProtocol
ArgumentException
Accesso ai servizi Web dell'applicazione
TextFieldParser Object
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
Public Class TextFieldParser
Osservazioni
Per informazioni sui metodi e le proprietà dell'oggetto TextFieldParser , vedere TextFieldParser.
Per ulteriori informazioni, vedere lettura da file.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic.FileIO
Classe:TextFieldParser
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Operatori (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sezioni correlate
Riferimenti al linguaggio Visual Basic
Precedenza tra gli operatori in Visual Basic
05/03/2021 • 5 minutes to read • Edit Online
Quando più operazioni si verificano in un'espressione, ogni parte viene valutata e risolta in base a un ordine
predeterminato denominato precedenza degli operatori.
Regole di precedenza
Quando le espressioni contengono operatori di più di una categoria, vengono valutate in base alle regole
seguenti:
Gli operatori aritmetici e di concatenazione hanno l'ordine di precedenza descritto nella sezione seguente
e hanno tutti una maggiore precedenza rispetto agli operatori di confronto, logici e bit per bit.
Tutti gli operatori di confronto hanno uguale precedenza e hanno una precedenza maggiore rispetto agli
operatori logici e bit per bit, ma con precedenza più bassa rispetto agli operatori aritmetici e di
concatenazione.
Gli operatori logici e bit per bit hanno l'ordine di precedenza descritto nella sezione seguente e hanno
una precedenza più bassa rispetto agli operatori aritmetici, di concatenazione e di confronto.
Gli operatori con uguale precedenza vengono valutati da sinistra a destra nell'ordine in cui sono
visualizzati nell'espressione.
Ordine di precedenza
Gli operatori vengono valutati nel seguente ordine di precedenza:
Operatore Await
Attendono
Operatori aritmetici e di concatenazione
Elevamento a potenza ( ^ )
Identità e negazione unari ( + , – )
Moltiplicazione e divisione a virgola mobile ( * , / )
Divisione di interi ( \ )
Aritmetica modulare ( Mod )
Addizione e sottrazione ( + , – )
Concatenazione di stringhe ( & )
Spostamento di bit aritmetico ( << , >> )
Operatori di confronto
Tutti gli operatori di confronto ( = , <> , < , <= , > , >= , Is , IsNot , Like , TypeOf ... Is )
Operatori logici e bit per bit
Negazione ( Not )
Congiunzione ( And , AndAlso )
Disgiunzione inclusiva ( Or , OrElse )
Disgiunzione esclusiva ( Xor )
Commenti
L' = operatore è solo l'operatore di confronto di uguaglianza, non l'operatore di assegnazione.
L'operatore di concatenazione & di stringhe () non è un operatore aritmetico, ma in precedenza è raggruppato
con gli operatori aritmetici.
Gli Is IsNot operatori e sono operatori di confronto dei riferimenti agli oggetti. Non confrontano i valori di
due oggetti; controllano solo per determinare se due variabili oggetto fanno riferimento alla stessa istanza
dell'oggetto.
Associatività
Quando gli operatori con la stessa precedenza vengono visualizzati insieme in un'espressione, ad esempio
moltiplicazione e divisione, il compilatore valuta ogni operazione quando viene rilevata da sinistra verso destra.
Questa condizione è illustrata nell'esempio seguente.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
La prima espressione valuta la divisione 96/8 (che restituisce 12), quindi la divisione 12/4, che produce tre.
Poiché il compilatore valuta le operazioni per n1 da sinistra a destra, la valutazione è la stessa quando tale
ordine è indicato in modo esplicito per n2 . n1 E n2 hanno un risultato di tre. Al contrario, n3 ha un risultato
di 48, perché le parentesi forzano il compilatore a valutare prima 8/4.
A causa di questo comportamento, gli operatori vengono definiti associativi a sinistra in Visual Basic.
Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.
Vedi anche
= (Operatore)
Operatore Is
Operatore IsNot
Operatore Like
Operatore TypeOf
Operatore await
Elenco degli operatori per funzionalità
Operatori ed espressioni
Tipi di dati dei risultati degli operatori (Visual Basic)
05/03/2021 • 16 minutes to read • Edit Online
Visual Basic determina il tipo di dati del risultato di un'operazione in base ai tipi di dati degli operandi. In alcuni
casi potrebbe trattarsi di un tipo di dati con un intervallo maggiore rispetto a quello di uno degli operandi.
Aritmetica decimale
Si noti che il tipo di dati Decimal non è né a virgola mobile né intero.
Se uno degli operandi di + un' – operazione,,, * / o Mod è Decimal e l'altro non è Single o Double ,
Visual Basic amplia l'altro operando a Decimal . Esegue l'operazione in Decimal e il tipo di dati del risultato è
Decimal .
Floating-Point aritmetico
Visual Basic esegue la maggior parte delle operazioni aritmetiche a virgola mobile in Double, che rappresenta il
tipo di dati più efficiente per tali operazioni. Tuttavia, se un operando è Single e l'altro non lo è Double , Visual
Basic esegue l'operazione in Single . Ogni operando viene ampliato in base al tipo di dati appropriato prima
dell'operazione e il risultato ha tale tipo di dati.
Operatori/e ^
L' / operatore viene definito solo per i tipi di dati Decimal, Singlee Double . Visual Basic allarga ogni operando
in base al tipo di dati appropriato prima dell'operazione e il risultato ha tale tipo di dati.
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per l' / operatore. Si noti che questa tabella è
simmetrica. per una determinata combinazione di tipi di dati degli operandi, il tipo di dati del risultato è lo stesso
indipendentemente dall'ordine degli operandi.
Decimal Single Double Qualsiasi tipo Integer
L' operatore viene definito solo per il Double tipo di dati. Visual Basic estende ogni operando in modo che
^
Double sia necessario prima dell'operazione e il tipo di dati del risultato è sempre Double .
Aritmetica Integer
Il tipo di dati del risultato di un'operazione Integer dipende dai tipi di dati degli operandi. In generale, Visual
Basic utilizza i criteri seguenti per determinare il tipo di dati del risultato:
Se entrambi gli operandi di un operatore binario hanno lo stesso tipo di dati, il risultato ha tale tipo di
dati. Un'eccezione è Boolean , che viene forzata a Short .
Se un operando non firmato partecipa a un operando firmato, il risultato ha un tipo firmato con almeno
un valore di grandi dimensioni come operando.
In caso contrario, il risultato è in genere il più grande dei due tipi di dati dell'operando.
Si noti che il tipo di dati del risultato potrebbe non corrispondere al tipo di dati dell'operando.
NOTE
Il tipo di dati del risultato non è sempre sufficiente per mantenere tutti i valori possibili risultante dall'operazione.
OverflowExceptionSe il valore è troppo grande per il tipo di dati del risultato, è possibile che si verifichi un'eccezione.
Operatore unario + e -
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per i due operatori unari, + e – .
Unario Short SByte Byte Short UShort Integer UIntege long ULong
+ r
Unario Short SByte Short Short Integer Integer long long Decimal
–
<< , Short SByte Byte Short UShort Integer UIntege long ULong
>> r
Se l'operando sinistro è Decimal ,, Single Double o String , Visual Basic tenta di convertirlo in Long prima
dell'operazione e il tipo di dati del risultato è Long . L'operando destro (il numero di posizioni di bit da spostare)
deve essere Integer o un tipo che si allarga a Integer .
Operatori binari +,-, * e mod
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per gli operatori e binari e + – gli * Mod
operatori e. Si noti che questa tabella è simmetrica. per una determinata combinazione di tipi di dati degli
operandi, il tipo di dati del risultato è lo stesso indipendentemente dall'ordine degli operandi.
Boolean Short SByte Short Short Integer Integer long long Decimal
SByte SByte SByte Short Short Integer Integer long long Decimal
Byte Short Short Byte Short UShort Integer UIntege long ULong
r
Short Short Short Short Short Integer Integer long long Decimal
UShort Integer Integer UShort Integer UShort Integer UIntege long ULong
r
Integer Integer Integer Integer Integer Integer Integer long long Decimal
UInteger long long UIntege long UIntege long UIntege long ULong
r r r
Long long long long long long long long long Decimal
ULong Decimal Decimal ULong Decimal ULong Decimal ULong Decimal ULong
Operatore \
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per l' \ operatore. Si noti che questa tabella è
simmetrica. per una determinata combinazione di tipi di dati degli operandi, il tipo di dati del risultato è lo stesso
indipendentemente dall'ordine degli operandi.
Boolean Short SByte Short Short Integer Integer long long long
SByte SByte SByte Short Short Integer Integer long long long
Byte Short Short Byte Short UShort Integer UIntege long ULong
r
Short Short Short Short Short Integer Integer long long long
UShort Integer Integer UShort Integer UShort Integer UIntege long ULong
r
Integer Integer Integer Integer Integer Integer Integer long long long
UInteger long long UIntege long UIntege long UIntege long ULong
r r r
Long long long long long long long long long long
ULong long long ULong long ULong long ULong long ULong
Se uno degli operandi dell' \ operatore è Decimal, Singleo Double, Visual Basic tenta di convertirlo in Long
prima dell'operazione e il tipo di dati result è Long .
Il tipo di dati del risultato di un'operazione logica bit per bit dipende dai tipi di dati degli operandi. Si noti che
AndAlso e OrElse sono definiti solo per Boolean e Visual Basic converte ogni operando come necessario in
prima di Boolean eseguire l'operazione.
Operatori =, <>, <, > , <=, and > =
Se entrambi gli operandi sono Boolean , Visual Basic considera True minore di False . Se un tipo numerico
viene confrontato con un oggetto String , Visual Basic tenta di convertire l'oggetto String in Double prima
dell'operazione. Un Char Date operando o può essere confrontato solo con un altro operando dello stesso
tipo di dati. Il tipo di dati del risultato è sempre Boolean .
Operatore NOT bit per bit
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per l'operatore bit per bit Not .
Not Boolean SByte Byte Short UShort Integer UIntege long ULong
r
Se l'operando è Decimal ,, Single Double o String , Visual Basic tenta di convertirlo in Long prima
dell'operazione e il tipo di dati del risultato è Long .
Operatori and, or e XOR bit per bit
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per gli And operatori, e bit per bit Or Xor . Si
noti che questa tabella è simmetrica. per una determinata combinazione di tipi di dati degli operandi, il tipo di
dati del risultato è lo stesso indipendentemente dall'ordine degli operandi.
Boolean SByte Byte Short UShort Integer UInteger Long ULong
Boolean Boolean SByte Short Short Integer Integer long long long
SByte SByte SByte Short Short Integer Integer long long long
Byte Short Short Byte Short UShort Integer UIntege long ULong
r
Short Short Short Short Short Integer Integer long long long
UShort Integer Integer UShort Integer UShort Integer UIntege long ULong
r
Integer Integer Integer Integer Integer Integer Integer long long long
UInteger long long UIntege long UIntege long UIntege long ULong
r r r
Long long long long long long long long long long
ULong long long ULong long ULong long ULong long ULong
Se un operando è Decimal ,, Single Double o String , Visual Basic tenta di convertirlo in Long prima
dell'operazione e il tipo di dati del risultato è identico a quello dell'operando che era già stato Long .
Operatori vari
L' & operatore viene definito solo per la concatenazione degli String operandi. Visual Basic converte ogni
operando in modo necessario String prima dell'operazione e il tipo di dati del risultato è sempre String . Per
gli scopi dell' & operatore, tutte le conversioni a String vengono considerate più larghe, anche se
Option Strict è On .
Gli Is IsNot operatori e richiedono che entrambi gli operandi siano di un tipo riferimento. L' TypeOf
espressione... Is richiede che il primo operando sia di un tipo di riferimento e che il secondo operando sia il
nome di un tipo di dati. In tutti questi casi il tipo di dati del risultato è Boolean .
L' Like operatore viene definito solo per i criteri di ricerca degli String operandi. Visual Basic tenta di
convertire ogni operando in modo necessario String prima dell'operazione. Il tipo di dati del risultato è
sempre Boolean .
Vedi anche
Tipi di dati
Operatori ed espressioni
Operatori aritmetici in Visual Basic
Comparison Operators in Visual Basic
Operatori
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici
Operatori di confronto
Option Strict Statement
Elenco degli operatori per funzionalità (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedere una delle categorie elencate di seguito o aprire questa parte del sommario della Guida per visualizzare
un elenco in ordine alfabetico degli operatori Visual Basic.
Categorie di operatori
O P ERATO RI DESC RIZ IO N E
Operatori di spostamento bit Questi operatori eseguono turni aritmetici sugli schemi di
bit.
Vedi anche
Operatori ed espressioni
Precedenza tra gli operatori in Visual Basic
Operatori aritmetici (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Precedenza tra gli operatori in Visual Basic
Operatori aritmetici in Visual Basic
Operatori di assegnazione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzioni
Operatori di scorrimento bit (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Di seguito sono riportati gli operatori di spostamento bit definiti in Visual Basic.
<< Operatore
Operatore>>
Vedi anche
Elenco degli operatori per funzionalità
Operatori di confronto (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Sintassi
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Parti
result
Obbligatorio. Boolean Valore che rappresenta il risultato del confronto.
expression1 , expression2
Obbligatorio. Qualsiasi espressione.
comparisonoperator
Obbligatorio. Qualsiasi operatore di confronto relazionale.
object1 , object2
Obbligatorio. Qualsiasi nome di oggetto di riferimento.
string
Obbligatorio. Qualsiasi espressione String .
pattern
Obbligatorio. Qualsiasi String espressione o intervallo di caratteri.
Commenti
La tabella seguente contiene un elenco degli operatori di confronto relazionale e le condizioni che determinano
se result è True o False .
NOTE
L' operatore = viene utilizzato anche come operatore di assegnazione.
L'operatore Is , l'operatore IsNot e l' Like operatore hanno funzionalità di confronto specifiche che
differiscono dagli operatori della tabella precedente.
Confronto di numeri
Quando si confronta un'espressione di tipo Single con una di tipo Double , l' Single espressione viene
convertita in Double . Questo comportamento è opposto al comportamento trovato nella Visual Basic 6.
Analogamente, quando si confronta un'espressione di tipo Decimal con un'espressione di tipo Single o
Double , l' Decimal espressione viene convertita in Single o Double . Per Decimal le espressioni, qualsiasi
valore frazionario minore di 1E-28 potrebbe andare perduto. Tale perdita di valori frazionari può causare il
confronto di due valori come uguali quando non lo sono. Per questo motivo, è necessario prestare attenzione
quando si usa l'uguaglianza ( = ) per confrontare due variabili a virgola mobile. È più sicuro verificare se il
valore assoluto della differenza tra i due numeri è inferiore a una piccola tolleranza accettabile.
Imprecisione a virgola mobile
Quando si utilizzano numeri a virgola mobile, tenere presente che non sempre hanno una rappresentazione
precisa in memoria. Questo può causare risultati imprevisti di determinate operazioni, ad esempio il confronto
dei valori e l' operatore mod. Per ulteriori informazioni, vedere risoluzione dei problemirelativi ai tipi di dati.
Confronto di stringhe
Quando si confrontano le stringhe, le espressioni stringa vengono valutate in base al relativo ordinamento
alfabetico, che dipende dall' Option Compare impostazione.
Option Compare Binary basa i confronti tra stringhe in base a un ordinamento derivato dalle rappresentazioni
binarie interne dei caratteri. Il tipo di ordinamento è determinato dalla tabella codici. Nell'esempio seguente
viene illustrato un tipico ordinamento binario.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa i confronti tra stringhe in base a un ordinamento testuale senza distinzione tra
maiuscole e minuscole determinato dalle impostazioni locali dell'applicazione. Quando si impostano
Option Compare Text e ordinano i caratteri nell'esempio precedente, viene applicato l'ordinamento del testo
seguente:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SE GL I O P ERA N DI SO N O IL C O N F RO N TO È
Uno o entrambi sono tipi di riferimento diversi da String Viene generato un tipo InvalidCastException.
I confronti numerici considerano Nothing come 0. I confronti di stringhe considerano Nothing come "" (una
stringa vuota).
Overload
Operatori di confronto relazionale ( < . <= , > , >= , = , <> ) può essere sottoposto a Overload, il che
significa che una classe o una struttura può ridefinire il comportamento quando un operando ha il tipo della
classe o della struttura. Se il codice usa uno di questi operatori in una classe o una struttura di questo tipo,
assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Si noti che è possibile eseguire l'overload dell' operatore = solo come operatore di confronto relazionale, non
come operatore di assegnazione.
Esempio
Nell'esempio seguente vengono illustrati diversi utilizzi degli operatori di confronto relazionali, utilizzati per
confrontare le espressioni. Gli operatori di confronto relazionale restituiscono un Boolean risultato che indica se
l'espressione specificata restituisce o meno True . Quando si applicano > gli < operatori e alle stringhe, il
confronto viene eseguito usando il normale ordinamento alfabetico delle stringhe. Questo ordine può dipendere
dalle impostazioni locali. Indica se l'ordinamento fa distinzione tra maiuscole e minuscole o non dipende
dall'impostazione Option Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
Nell'esempio precedente, il primo confronto restituisce False e i restanti confronti restituiscono True .
Vedi anche
InvalidCastException
= (Operatore)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Risoluzione dei problemi relativi ai tipi di dati
Comparison Operators in Visual Basic
Operatori di concatenazione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
System.Text
StringBuilder
Precedenza tra gli operatori in Visual Basic
Operatori di concatenazione in Visual Basic
Operatori logici e bit per bit (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Di seguito sono riportati gli operatori logici/bit per bit definiti in Visual Basic.
Operatore And
Operatore Not
Operatore Or
Operatore Xor
Operatore AndAlso
Operatore OrElse
Operatore IsFalse
Operatore IsTrue
Vedi anche
Precedenza tra gli operatori in Visual Basic
Operatori logici e bit per bit in Visual Basic
Operatori vari (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Operatori elencati per funzionalità
& Operatore (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
result = expression1 & expression2
Parti
result
Obbligatorio. Qualsiasi String Object variabile o.
expression1
Obbligatorio. Qualsiasi espressione con un tipo di dati che si allarga a String .
expression2
Obbligatorio. Qualsiasi espressione con un tipo di dati che si allarga a String .
Commenti
Se il tipo di dati di expression1 o expression2 non è String ma si allarga a String , viene convertito in
String . Se uno dei tipi di dati non viene ampliato a String , il compilatore genera un errore.
Il tipo di dati di result è String . Se una o entrambe le espressioni restituiscono Nothing o hanno un valore
DBNull.Value , vengono considerate come una stringa con un valore di "".
NOTE
L' & operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su una
classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
NOTE
Il carattere e commerciale (&) può essere usato anche per identificare le variabili come tipo Long . Per ulteriori
informazioni, vedere caratteri di tipo.
Esempio
In questo esempio viene usato l' & operatore per forzare la concatenazione di stringhe. Il risultato è un valore
stringa che rappresenta la concatenazione dei due operandi di stringa.
Dim sampleStr As String
sampleStr = "Hello" & " World"
' The preceding statement sets sampleStr to "Hello World".
Vedi anche
Operatore&=
Operatori di concatenazione
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori di concatenazione in Visual Basic
&Operatore = (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Concatena un' String espressione a una String variabile o a una proprietà e assegna il risultato alla variabile
o alla proprietà.
Sintassi
variableorproperty &= expression
Parti
variableorproperty
Obbligatorio. Qualsiasi String variabile o proprietà.
expression
Obbligatorio. Qualsiasi espressione String .
Commenti
L'elemento sul lato sinistro dell' &= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura. L' &= operatore concatena l'
String espressione a destra della String variabile o della proprietà a sinistra e assegna il risultato alla
variabile o alla proprietà a sinistra.
Overload
L' operatore& può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' & operatore
influiscono sul comportamento dell' &= operatore. Se il codice usa &= su una classe o una struttura che
esegue l'overload di & , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere
Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' &= operatore per concatenare due String variabili e assegnare il
risultato alla prima variabile.
Vedi anche
Operatore&
Operatore + =
Operatori di assegnazione
Operatori di concatenazione
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzioni
Operatore * (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
number1 * number2
Parti
T ERM IN E DEF IN IZ IO N E
Risultato
Il risultato è il prodotto di number1 e number2 .
Tipi supportati
Tutti i tipi numerici, inclusi i tipi senza segno e a virgola mobile e Decimal .
Commenti
Il tipo di dati del risultato dipende dai tipi degli operandi. Nella tabella seguente viene illustrato il modo in cui
viene determinato il tipo di dati del risultato.
Entrambe le espressioni sono tipi di dati integrali (SByte, Tipo di dati numerico appropriato per i tipi di dati di
byte, short, ushort, Integer, UInteger, Long, ULONG) number1 e number2 . Vedere le tabelle "aritmetiche di
interi" nei tipi di dati dei risultati dell'operatore.
Overload
L' * operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore
su una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre
informazioni, vedere Operator Procedures.
Esempio
In questo esempio viene usato l' * operatore per moltiplicare due numeri. Il risultato è il prodotto dei due
operandi.
Vedi anche
Operatore * =
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici in Visual Basic
Operatore *= (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Moltiplica il valore di una variabile o di una proprietà in base al valore di un'espressione e assegna il risultato
alla variabile o alla proprietà.
Sintassi
variableorproperty *= expression
Parti
variableorproperty
Obbligatorio. Qualsiasi variabile o proprietà numerica.
expression
Obbligatorio. Qualsiasi espressione numerica.
Commenti
L'elemento sul lato sinistro dell' *= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' *= operatore moltiplica innanzitutto il valore dell'espressione (sul lato destro dell'operatore) in base al
valore della variabile o della proprietà (sul lato sinistro dell'operatore). L'operatore assegna quindi il risultato
dell'operazione alla variabile o alla proprietà.
Overload
L' operatore * può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' * operatore
influiscono sul comportamento dell' *= operatore. Se il codice usa *= su una classe o una struttura che
esegue l'overload di * , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere
Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' *= operatore per moltiplicare una Integer variabile per secondo e
assegnare il risultato alla prima variabile.
Vedi anche
Operatore *
Operatori di assegnazione
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzioni
Operatore + (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Somma due numeri o restituisce il valore positivo di un'espressione numerica. Può essere usato anche per
concatenare due espressioni stringa.
Sintassi
expression1 + expression2
oppure
+expression1
Parti
T ERM IN E DEF IN IZ IO N E
Risultato
Se expression1 e expression2 sono entrambi numerici, il risultato è la somma aritmetica.
Se expression2 è assente, l' + operatore è l'operatore di identità unario per il valore non modificato di
un'espressione. In questo senso, l'operazione consiste nel mantenere il segno di expression1 , pertanto il
risultato è negativo se expression1 è negativo.
Se expression1 e expression2 sono entrambe stringhe, il risultato è la concatenazione dei relativi valori.
Se expression1 e expression2 sono di tipi misti, l'azione eseguita dipende dai relativi tipi, dal relativo
contenuto e dall'impostazione dell' istruzione Option Strict. Per ulteriori informazioni, vedere le tabelle in
"osservazioni".
Tipi supportati
Tutti i tipi numerici, inclusi i tipi senza segno e a virgola mobile e Decimal ,e String .
Commenti
In generale, + se possibile, esegue l'aggiunta aritmetica e concatena solo quando entrambe le espressioni sono
stringhe.
Se nessuna delle due espressioni è un Object , Visual Basic esegue le azioni seguenti.
T IP I DI DAT I DEL L E ESP RESSIO N I A Z IO N E P ER C O M P IL ATO RE
Entrambe le espressioni sono tipi di dati numerici ( SByte ,, Aggiungi. Il tipo di dati del risultato è un tipo numerico
Byte Short , UShort , Integer , UInteger , Long , appropriato per i tipi di dati di expression1 e
ULong , Decimal , Single o Double ) expression2 . Vedere le tabelle "aritmetiche di interi" nei
tipi di dati dei risultati dell'operatore.
Un'espressione è un tipo di dati numerico e l'altra è una Se Option Strict è On , genera un errore del
stringa compilatore.
Un'espressione è un tipo di dati numerico e l'altra non è Aggiungere, con Nothing valore pari a zero.
nulla
Un'espressione è una stringa e l'altra è Nothing Concatenate, con Nothing valore "".
Object l'espressione include un valore numerico e l'altro è Se Option Strict è On , genera un errore del
un tipo di dati numerico compilatore.
Object l'espressione include un valore numerico e l'altro è Se Option Strict è On , genera un errore del
di tipo String compilatore.
Object l'espressione include una stringa e l'altra è un tipo Se Option Strict è On , genera un errore del
di dati numerico compilatore.
Object l'espressione include una stringa e l'altra è di tipo Se Option Strict è On , genera un errore del
String compilatore.
Se entrambe le espressioni sono Object espressioni, Visual Basic esegue le azioni seguenti ( Option Strict Off
solo).
Un' Object espressione include un valore numerico e l'altra Converte in modo implicito la stringa Object in Double e
include una stringa Aggiungi.
Se una Object delle due espressioni restituisce Nothing o DBNull , l' + operatore lo considera come String
con un valore di "".
NOTE
Quando si utilizza l' + operatore, potrebbe non essere possibile determinare se si verificherà l'aggiunta o la
concatenazione di stringhe. Usare l' & operatore per la concatenazione per eliminare l'ambiguità e per fornire codice
autodocumentato.
Overload
L' + operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore
su una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre
informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' + operatore per aggiungere numeri. Se gli operandi sono entrambi
numerici, Visual Basic calcola il risultato aritmetico. Il risultato aritmetico rappresenta la somma dei due
operandi.
È anche possibile usare l' + operatore per concatenare le stringhe. Se gli operandi sono entrambe stringhe,
Visual Basic li concatena. Il risultato della concatenazione rappresenta una singola stringa costituita dal
contenuto dei due operandi uno dopo l'altro.
Se gli operandi sono di tipo misto, il risultato dipende dall'impostazione dell' istruzione Option Strict.
Nell'esempio seguente viene illustrato il risultato quando Option Strict è On .
Option Strict On
Dim var1 As String = "34"
Dim var2 As Integer = 6
Dim concatenatedNumber As Integer = var1 + var2
Per eliminare l'ambiguità, è consigliabile utilizzare l' & operatore anziché + per la concatenazione.
Vedi anche
Operatore&
Operatori di concatenazione
Operatori aritmetici
Elenco degli operatori per funzionalità
Precedenza tra gli operatori in Visual Basic
Operatori aritmetici in Visual Basic
Option Strict Statement
Operatore += (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Aggiunge il valore di un'espressione numerica al valore di una variabile o di una proprietà numerica e assegna il
risultato alla variabile o alla proprietà. Può essere usato anche per concatenare un' String espressione a una
String variabile o a una proprietà e assegnare il risultato alla variabile o alla proprietà.
Sintassi
variableorproperty += expression
Parti
variableorproperty
Obbligatorio. Qualsiasi String proprietà o variabile numerica.
expression
Obbligatorio. Qualsiasi espressione o numerica String .
Commenti
L'elemento sul lato sinistro dell' += operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' += operatore aggiunge il valore a destra alla variabile o alla proprietà a sinistra e assegna il risultato alla
variabile o alla proprietà a sinistra. L' += operatore può essere usato anche per concatenare l' String
espressione a destra della String variabile o della proprietà a sinistra e assegnare il risultato alla variabile o alla
proprietà a sinistra.
NOTE
Quando si utilizza l' += operatore, potrebbe non essere possibile determinare se si verificherà l'aggiunta o la
concatenazione di stringhe. Usare l' &= operatore per la concatenazione per eliminare l'ambiguità e per fornire codice
autodocumentato.
Questo operatore di assegnazione esegue in modo implicito le conversioni verso un tipo di ingrandimento ma
non di restringimento se l'ambiente di compilazione impone una semantica rigida. Per ulteriori informazioni su
queste conversioni, vedere la pagina relativa alle conversioniverso un tipo di dati più piccolo. Per ulteriori
informazioni sulla semantica restrittiva e permissiva, vedere istruzione Option Strict.
Se sono consentite semantiche permissive, l' += operatore esegue in modo implicito una serie di conversioni di
stringa e numeriche identiche a quelle eseguite dall' + operatore. Per informazioni dettagliate su queste
conversioni, vedere operatore +.
Overload
L' + operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' + operatore
influiscono sul comportamento dell' += operatore. Se il codice usa += su una classe o una struttura che
esegue l'overload di + , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere
Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' += operatore per combinare il valore di una variabile con un'altra. La
prima parte USA += con le variabili numeriche per aggiungere un valore a un altro. La seconda parte USA +=
con le String variabili per concatenare un valore con un altro. In entrambi i casi, il risultato viene assegnato alla
prima variabile.
Vedi anche
Operatore +
Operatori di assegnazione
Operatori aritmetici
Operatori di concatenazione
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzioni
Operatore = (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
variableorproperty = value
Parti
variableorproperty
Qualsiasi variabile scrivibile o qualsiasi proprietà.
value
Qualsiasi valore letterale, costante o espressione.
Commenti
L'elemento sul lato sinistro del segno di uguale ( = ) può essere una variabile scalare semplice, una proprietà o
un elemento di una matrice. La variabile o la proprietà non può essere di sola lettura. L' = operatore assegna il
valore a destra alla variabile o alla proprietà a sinistra.
NOTE
L' = operatore viene utilizzato anche come operatore di confronto. Per informazioni dettagliate, vedere operatori di
confronto.
Overload
= È possibile eseguire l'overload dell'operatore solo come operatore di confronto relazionale, non come
operatore di assegnazione. Per altre informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene illustrato l'operatore di assegnazione. Il valore a destra viene assegnato alla
variabile a sinistra.
Restituisce la differenza tra due espressioni numeriche o il valore negativo di un'espressione numerica.
Sintassi
expression1 – expression2
oppure
–expression1
Parti
expression1
Obbligatorio. Qualsiasi espressione numerica.
expression2
Obbligatorio a meno che l' – operatore non calcoli un valore negativo. Qualsiasi espressione numerica.
Risultato
Il risultato è la differenza tra expression1 e expression2 o il valore negato di expression1 .
Il tipo di dati del risultato è un tipo numerico appropriato per i tipi di dati di expression1 e expression2 . Vedere
le tabelle "aritmetiche di interi" nei tipi di dati dei risultati dell'operatore.
Tipi supportati
tutti i tipi numerici. Sono inclusi i tipi a virgola mobile e non firmati e Decimal .
Commenti
Nel primo utilizzo illustrato nella sintassi illustrata in precedenza, l' – operatore è l'operatore di sottrazione
aritmetica binario per la differenza tra due espressioni numeriche.
Nel secondo utilizzo illustrato nella sintassi illustrata in precedenza, l' – operatore è l'operatore di negazione
unario per il valore negativo di un'espressione. In questo senso, la negazione consiste nell'inversione del segno
di in expression1 modo che il risultato sia positivo se expression1 è negativo.
Se una delle due espressioni restituisce Nothing, l' – operatore lo considera come zero.
NOTE
L' – operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su una
classe o una struttura di questo tipo, verificare di aver compreso il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' – operatore per calcolare e restituire la differenza tra due numeri e quindi
per negare un numero.
Dopo l'esecuzione di queste istruzioni, binaryResult contiene 124,45 e unaryResult contiene – 334,90.
Vedi anche
Operatore-= (Visual Basic)
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici in Visual Basic
Operatore -= (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sottrae il valore di un'espressione dal valore di una variabile o di una proprietà e assegna il risultato alla
variabile o alla proprietà.
Sintassi
variableorproperty -= expression
Parti
variableorproperty
Obbligatorio. Qualsiasi variabile o proprietà numerica.
expression
Obbligatorio. Qualsiasi espressione numerica.
Commenti
L'elemento sul lato sinistro dell' -= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' -= operatore sottrae prima di tutto il valore dell'espressione (sul lato destro dell'operatore) dal valore della
variabile o della proprietà (sul lato sinistro dell'operatore). L'operatore assegna quindi il risultato dell'operazione
alla variabile o alla proprietà.
Overload
L' operatore-(Visual Basic) può essere sottoposto a Overload, il che significa che una classe o una struttura può
ridefinire il comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' -
operatore influiscono sul comportamento dell' -= operatore. Se il codice usa -= su una classe o una struttura
che esegue l'overload di - , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' -= operatore per sottrarre una Integer variabile da un'altra e assegnare
il risultato alla seconda variabile.
Vedi anche
Operatore - (Visual Basic)
Operatori di assegnazione
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzioni
Operatori di confronto (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Sintassi
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Parti
result
Obbligatorio. Boolean Valore che rappresenta il risultato del confronto.
expression1 , expression2
Obbligatorio. Qualsiasi espressione.
comparisonoperator
Obbligatorio. Qualsiasi operatore di confronto relazionale.
object1 , object2
Obbligatorio. Qualsiasi nome di oggetto di riferimento.
string
Obbligatorio. Qualsiasi espressione String .
pattern
Obbligatorio. Qualsiasi String espressione o intervallo di caratteri.
Commenti
La tabella seguente contiene un elenco degli operatori di confronto relazionale e le condizioni che determinano
se result è True o False .
NOTE
L' operatore = viene utilizzato anche come operatore di assegnazione.
L'operatore Is , l'operatore IsNot e l' Like operatore hanno funzionalità di confronto specifiche che
differiscono dagli operatori della tabella precedente.
Confronto di numeri
Quando si confronta un'espressione di tipo Single con una di tipo Double , l' Single espressione viene
convertita in Double . Questo comportamento è opposto al comportamento trovato nella Visual Basic 6.
Analogamente, quando si confronta un'espressione di tipo Decimal con un'espressione di tipo Single o
Double , l' Decimal espressione viene convertita in Single o Double . Per Decimal le espressioni, qualsiasi
valore frazionario minore di 1E-28 potrebbe andare perduto. Tale perdita di valori frazionari può causare il
confronto di due valori come uguali quando non lo sono. Per questo motivo, è necessario prestare attenzione
quando si usa l'uguaglianza ( = ) per confrontare due variabili a virgola mobile. È più sicuro verificare se il
valore assoluto della differenza tra i due numeri è inferiore a una piccola tolleranza accettabile.
Imprecisione a virgola mobile
Quando si utilizzano numeri a virgola mobile, tenere presente che non sempre hanno una rappresentazione
precisa in memoria. Questo può causare risultati imprevisti di determinate operazioni, ad esempio il confronto
dei valori e l' operatore mod. Per ulteriori informazioni, vedere risoluzione dei problemirelativi ai tipi di dati.
Confronto di stringhe
Quando si confrontano le stringhe, le espressioni stringa vengono valutate in base al relativo ordinamento
alfabetico, che dipende dall' Option Compare impostazione.
Option Compare Binary basa i confronti tra stringhe in base a un ordinamento derivato dalle rappresentazioni
binarie interne dei caratteri. Il tipo di ordinamento è determinato dalla tabella codici. Nell'esempio seguente
viene illustrato un tipico ordinamento binario.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa i confronti tra stringhe in base a un ordinamento testuale senza distinzione tra
maiuscole e minuscole determinato dalle impostazioni locali dell'applicazione. Quando si impostano
Option Compare Text e ordinano i caratteri nell'esempio precedente, viene applicato l'ordinamento del testo
seguente:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SE GL I O P ERA N DI SO N O IL C O N F RO N TO È
Uno o entrambi sono tipi di riferimento diversi da String Viene generato un tipo InvalidCastException.
I confronti numerici considerano Nothing come 0. I confronti di stringhe considerano Nothing come "" (una
stringa vuota).
Overload
Operatori di confronto relazionale ( < . <= , > , >= , = , <> ) può essere sottoposto a Overload, il che
significa che una classe o una struttura può ridefinire il comportamento quando un operando ha il tipo della
classe o della struttura. Se il codice usa uno di questi operatori in una classe o una struttura di questo tipo,
assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Si noti che è possibile eseguire l'overload dell' operatore = solo come operatore di confronto relazionale, non
come operatore di assegnazione.
Esempio
Nell'esempio seguente vengono illustrati diversi utilizzi degli operatori di confronto relazionali, utilizzati per
confrontare le espressioni. Gli operatori di confronto relazionale restituiscono un Boolean risultato che indica se
l'espressione specificata restituisce o meno True . Quando si applicano > gli < operatori e alle stringhe, il
confronto viene eseguito usando il normale ordinamento alfabetico delle stringhe. Questo ordine può dipendere
dalle impostazioni locali. Indica se l'ordinamento fa distinzione tra maiuscole e minuscole o non dipende
dall'impostazione Option Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
Nell'esempio precedente, il primo confronto restituisce False e i restanti confronti restituiscono True .
Vedi anche
InvalidCastException
= (Operatore)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Risoluzione dei problemi relativi ai tipi di dati
Comparison Operators in Visual Basic
Operatori di confronto (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Sintassi
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Parti
result
Obbligatorio. Boolean Valore che rappresenta il risultato del confronto.
expression1 , expression2
Obbligatorio. Qualsiasi espressione.
comparisonoperator
Obbligatorio. Qualsiasi operatore di confronto relazionale.
object1 , object2
Obbligatorio. Qualsiasi nome di oggetto di riferimento.
string
Obbligatorio. Qualsiasi espressione String .
pattern
Obbligatorio. Qualsiasi String espressione o intervallo di caratteri.
Commenti
La tabella seguente contiene un elenco degli operatori di confronto relazionale e le condizioni che determinano
se result è True o False .
NOTE
L' operatore = viene utilizzato anche come operatore di assegnazione.
L'operatore Is , l'operatore IsNot e l' Like operatore hanno funzionalità di confronto specifiche che
differiscono dagli operatori della tabella precedente.
Confronto di numeri
Quando si confronta un'espressione di tipo Single con una di tipo Double , l' Single espressione viene
convertita in Double . Questo comportamento è opposto al comportamento trovato nella Visual Basic 6.
Analogamente, quando si confronta un'espressione di tipo Decimal con un'espressione di tipo Single o
Double , l' Decimal espressione viene convertita in Single o Double . Per Decimal le espressioni, qualsiasi
valore frazionario minore di 1E-28 potrebbe andare perduto. Tale perdita di valori frazionari può causare il
confronto di due valori come uguali quando non lo sono. Per questo motivo, è necessario prestare attenzione
quando si usa l'uguaglianza ( = ) per confrontare due variabili a virgola mobile. È più sicuro verificare se il
valore assoluto della differenza tra i due numeri è inferiore a una piccola tolleranza accettabile.
Imprecisione a virgola mobile
Quando si utilizzano numeri a virgola mobile, tenere presente che non sempre hanno una rappresentazione
precisa in memoria. Questo può causare risultati imprevisti di determinate operazioni, ad esempio il confronto
dei valori e l' operatore mod. Per ulteriori informazioni, vedere risoluzione dei problemirelativi ai tipi di dati.
Confronto di stringhe
Quando si confrontano le stringhe, le espressioni stringa vengono valutate in base al relativo ordinamento
alfabetico, che dipende dall' Option Compare impostazione.
Option Compare Binary basa i confronti tra stringhe in base a un ordinamento derivato dalle rappresentazioni
binarie interne dei caratteri. Il tipo di ordinamento è determinato dalla tabella codici. Nell'esempio seguente
viene illustrato un tipico ordinamento binario.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa i confronti tra stringhe in base a un ordinamento testuale senza distinzione tra
maiuscole e minuscole determinato dalle impostazioni locali dell'applicazione. Quando si impostano
Option Compare Text e ordinano i caratteri nell'esempio precedente, viene applicato l'ordinamento del testo
seguente:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SE GL I O P ERA N DI SO N O IL C O N F RO N TO È
Uno o entrambi sono tipi di riferimento diversi da String Viene generato un tipo InvalidCastException.
I confronti numerici considerano Nothing come 0. I confronti di stringhe considerano Nothing come "" (una
stringa vuota).
Overload
Operatori di confronto relazionale ( < . <= , > , >= , = , <> ) può essere sottoposto a Overload, il che
significa che una classe o una struttura può ridefinire il comportamento quando un operando ha il tipo della
classe o della struttura. Se il codice usa uno di questi operatori in una classe o una struttura di questo tipo,
assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Si noti che è possibile eseguire l'overload dell' operatore = solo come operatore di confronto relazionale, non
come operatore di assegnazione.
Esempio
Nell'esempio seguente vengono illustrati diversi utilizzi degli operatori di confronto relazionali, utilizzati per
confrontare le espressioni. Gli operatori di confronto relazionale restituiscono un Boolean risultato che indica se
l'espressione specificata restituisce o meno True . Quando si applicano > gli < operatori e alle stringhe, il
confronto viene eseguito usando il normale ordinamento alfabetico delle stringhe. Questo ordine può dipendere
dalle impostazioni locali. Indica se l'ordinamento fa distinzione tra maiuscole e minuscole o non dipende
dall'impostazione Option Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
Nell'esempio precedente, il primo confronto restituisce False e i restanti confronti restituiscono True .
Vedi anche
InvalidCastException
= (Operatore)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Risoluzione dei problemi relativi ai tipi di dati
Comparison Operators in Visual Basic
Operatori di confronto (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Sintassi
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Parti
result
Obbligatorio. Boolean Valore che rappresenta il risultato del confronto.
expression1 , expression2
Obbligatorio. Qualsiasi espressione.
comparisonoperator
Obbligatorio. Qualsiasi operatore di confronto relazionale.
object1 , object2
Obbligatorio. Qualsiasi nome di oggetto di riferimento.
string
Obbligatorio. Qualsiasi espressione String .
pattern
Obbligatorio. Qualsiasi String espressione o intervallo di caratteri.
Commenti
La tabella seguente contiene un elenco degli operatori di confronto relazionale e le condizioni che determinano
se result è True o False .
NOTE
L' operatore = viene utilizzato anche come operatore di assegnazione.
L'operatore Is , l'operatore IsNot e l' Like operatore hanno funzionalità di confronto specifiche che
differiscono dagli operatori della tabella precedente.
Confronto di numeri
Quando si confronta un'espressione di tipo Single con una di tipo Double , l' Single espressione viene
convertita in Double . Questo comportamento è opposto al comportamento trovato nella Visual Basic 6.
Analogamente, quando si confronta un'espressione di tipo Decimal con un'espressione di tipo Single o
Double , l' Decimal espressione viene convertita in Single o Double . Per Decimal le espressioni, qualsiasi
valore frazionario minore di 1E-28 potrebbe andare perduto. Tale perdita di valori frazionari può causare il
confronto di due valori come uguali quando non lo sono. Per questo motivo, è necessario prestare attenzione
quando si usa l'uguaglianza ( = ) per confrontare due variabili a virgola mobile. È più sicuro verificare se il
valore assoluto della differenza tra i due numeri è inferiore a una piccola tolleranza accettabile.
Imprecisione a virgola mobile
Quando si utilizzano numeri a virgola mobile, tenere presente che non sempre hanno una rappresentazione
precisa in memoria. Questo può causare risultati imprevisti di determinate operazioni, ad esempio il confronto
dei valori e l' operatore mod. Per ulteriori informazioni, vedere risoluzione dei problemirelativi ai tipi di dati.
Confronto di stringhe
Quando si confrontano le stringhe, le espressioni stringa vengono valutate in base al relativo ordinamento
alfabetico, che dipende dall' Option Compare impostazione.
Option Compare Binary basa i confronti tra stringhe in base a un ordinamento derivato dalle rappresentazioni
binarie interne dei caratteri. Il tipo di ordinamento è determinato dalla tabella codici. Nell'esempio seguente
viene illustrato un tipico ordinamento binario.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa i confronti tra stringhe in base a un ordinamento testuale senza distinzione tra
maiuscole e minuscole determinato dalle impostazioni locali dell'applicazione. Quando si impostano
Option Compare Text e ordinano i caratteri nell'esempio precedente, viene applicato l'ordinamento del testo
seguente:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SE GL I O P ERA N DI SO N O IL C O N F RO N TO È
Uno o entrambi sono tipi di riferimento diversi da String Viene generato un tipo InvalidCastException.
I confronti numerici considerano Nothing come 0. I confronti di stringhe considerano Nothing come "" (una
stringa vuota).
Overload
Operatori di confronto relazionale ( < . <= , > , >= , = , <> ) può essere sottoposto a Overload, il che
significa che una classe o una struttura può ridefinire il comportamento quando un operando ha il tipo della
classe o della struttura. Se il codice usa uno di questi operatori in una classe o una struttura di questo tipo,
assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Si noti che è possibile eseguire l'overload dell' operatore = solo come operatore di confronto relazionale, non
come operatore di assegnazione.
Esempio
Nell'esempio seguente vengono illustrati diversi utilizzi degli operatori di confronto relazionali, utilizzati per
confrontare le espressioni. Gli operatori di confronto relazionale restituiscono un Boolean risultato che indica se
l'espressione specificata restituisce o meno True . Quando si applicano > gli < operatori e alle stringhe, il
confronto viene eseguito usando il normale ordinamento alfabetico delle stringhe. Questo ordine può dipendere
dalle impostazioni locali. Indica se l'ordinamento fa distinzione tra maiuscole e minuscole o non dipende
dall'impostazione Option Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
Nell'esempio precedente, il primo confronto restituisce False e i restanti confronti restituiscono True .
Vedi anche
InvalidCastException
= (Operatore)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Risoluzione dei problemi relativi ai tipi di dati
Comparison Operators in Visual Basic
Operatori di confronto (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Sintassi
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Parti
result
Obbligatorio. Boolean Valore che rappresenta il risultato del confronto.
expression1 , expression2
Obbligatorio. Qualsiasi espressione.
comparisonoperator
Obbligatorio. Qualsiasi operatore di confronto relazionale.
object1 , object2
Obbligatorio. Qualsiasi nome di oggetto di riferimento.
string
Obbligatorio. Qualsiasi espressione String .
pattern
Obbligatorio. Qualsiasi String espressione o intervallo di caratteri.
Commenti
La tabella seguente contiene un elenco degli operatori di confronto relazionale e le condizioni che determinano
se result è True o False .
NOTE
L' operatore = viene utilizzato anche come operatore di assegnazione.
L'operatore Is , l'operatore IsNot e l' Like operatore hanno funzionalità di confronto specifiche che
differiscono dagli operatori della tabella precedente.
Confronto di numeri
Quando si confronta un'espressione di tipo Single con una di tipo Double , l' Single espressione viene
convertita in Double . Questo comportamento è opposto al comportamento trovato nella Visual Basic 6.
Analogamente, quando si confronta un'espressione di tipo Decimal con un'espressione di tipo Single o
Double , l' Decimal espressione viene convertita in Single o Double . Per Decimal le espressioni, qualsiasi
valore frazionario minore di 1E-28 potrebbe andare perduto. Tale perdita di valori frazionari può causare il
confronto di due valori come uguali quando non lo sono. Per questo motivo, è necessario prestare attenzione
quando si usa l'uguaglianza ( = ) per confrontare due variabili a virgola mobile. È più sicuro verificare se il
valore assoluto della differenza tra i due numeri è inferiore a una piccola tolleranza accettabile.
Imprecisione a virgola mobile
Quando si utilizzano numeri a virgola mobile, tenere presente che non sempre hanno una rappresentazione
precisa in memoria. Questo può causare risultati imprevisti di determinate operazioni, ad esempio il confronto
dei valori e l' operatore mod. Per ulteriori informazioni, vedere risoluzione dei problemirelativi ai tipi di dati.
Confronto di stringhe
Quando si confrontano le stringhe, le espressioni stringa vengono valutate in base al relativo ordinamento
alfabetico, che dipende dall' Option Compare impostazione.
Option Compare Binary basa i confronti tra stringhe in base a un ordinamento derivato dalle rappresentazioni
binarie interne dei caratteri. Il tipo di ordinamento è determinato dalla tabella codici. Nell'esempio seguente
viene illustrato un tipico ordinamento binario.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text basa i confronti tra stringhe in base a un ordinamento testuale senza distinzione tra
maiuscole e minuscole determinato dalle impostazioni locali dell'applicazione. Quando si impostano
Option Compare Text e ordinano i caratteri nell'esempio precedente, viene applicato l'ordinamento del testo
seguente:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
SE GL I O P ERA N DI SO N O IL C O N F RO N TO È
Uno o entrambi sono tipi di riferimento diversi da String Viene generato un tipo InvalidCastException.
I confronti numerici considerano Nothing come 0. I confronti di stringhe considerano Nothing come "" (una
stringa vuota).
Overload
Operatori di confronto relazionale ( < . <= , > , >= , = , <> ) può essere sottoposto a Overload, il che
significa che una classe o una struttura può ridefinire il comportamento quando un operando ha il tipo della
classe o della struttura. Se il codice usa uno di questi operatori in una classe o una struttura di questo tipo,
assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Si noti che è possibile eseguire l'overload dell' operatore = solo come operatore di confronto relazionale, non
come operatore di assegnazione.
Esempio
Nell'esempio seguente vengono illustrati diversi utilizzi degli operatori di confronto relazionali, utilizzati per
confrontare le espressioni. Gli operatori di confronto relazionale restituiscono un Boolean risultato che indica se
l'espressione specificata restituisce o meno True . Quando si applicano > gli < operatori e alle stringhe, il
confronto viene eseguito usando il normale ordinamento alfabetico delle stringhe. Questo ordine può dipendere
dalle impostazioni locali. Indica se l'ordinamento fa distinzione tra maiuscole e minuscole o non dipende
dall'impostazione Option Compare .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
Nell'esempio precedente, il primo confronto restituisce False e i restanti confronti restituiscono True .
Vedi anche
InvalidCastException
= (Operatore)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Risoluzione dei problemi relativi ai tipi di dati
Comparison Operators in Visual Basic
<< Operatore (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Sintassi
result = pattern << amount
Parti
result
Obbligatorio. Valore numerico integrale. Risultato dello spostamento dello schema di bit. Il tipo di dati
corrisponde a quello di pattern .
pattern
Obbligatorio. Espressione numerica integrale. Schema di bit da spostare. Il tipo di dati deve essere integrale (
SByte , Byte , Short , UShort , Integer , UInteger , Long o ULong ).
amount
Obbligatorio. Espressione numerica. Numero di bit per spostare lo schema di bit. Il tipo di dati deve essere
Integer o ampliato a Integer .
Commenti
I turni aritmetici non sono circolari, il che significa che i bit spostati da un'estremità del risultato non vengono
reintrodotti nell'altra estremità. In uno scorrimento a sinistra aritmetico, i bit spostati oltre l'intervallo del tipo di
dati del risultato vengono rimossi e le posizioni dei bit sgomberate a destra vengono impostate su zero.
Per evitare uno spostamento di più bit rispetto al risultato, Visual Basic maschera il valore di amount con una
maschera di dimensioni che corrisponde al tipo di dati di pattern . Il file binario e di questi valori viene
utilizzato per l'importo dello spostamento. Le maschere delle dimensioni sono le seguenti:
Se amount è zero, il valore di result è identico al valore di pattern . Se amount è negativo, viene considerato
come un valore senza segno e mascherato con la maschera di dimensioni appropriata.
I turni aritmetici non generano mai eccezioni di overflow.
NOTE
L' << operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su una
classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio seguente viene utilizzato l' << operatore per eseguire turni aritmetici a sinistra sui valori integrali.
Il risultato ha sempre lo stesso tipo di dati dell'espressione spostata.
Vedi anche
Operatori di spostamento bit
Operatori di assegnazione
Operatore<<=
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici in Visual Basic
<<Operatore = (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Esegue uno scorrimento a sinistra aritmetico sul valore di una variabile o di una proprietà e assegna il risultato
alla variabile o alla proprietà.
Sintassi
variableorproperty <<= amount
Parti
variableorproperty
Obbligatorio. Variabile o proprietà di un tipo integrale ( SByte , Byte , Short , UShort , Integer , UInteger ,
Long o ULong ).
amount
Obbligatorio. Espressione numerica di un tipo di dati che viene ampliato a Integer .
Commenti
L'elemento sul lato sinistro dell' <<= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' <<= operatore esegue prima uno spostamento aritmetico a sinistra sul valore della variabile o della
proprietà. L'operatore assegna quindi il risultato dell'operazione alla variabile o alla proprietà.
I turni aritmetici non sono circolari, il che significa che i bit spostati da un'estremità del risultato non vengono
reintrodotti nell'altra estremità. In uno scorrimento a sinistra aritmetico, i bit spostati oltre l'intervallo del tipo di
dati del risultato vengono rimossi e le posizioni dei bit sgomberate a destra vengono impostate su zero.
Overload
L' operatore<< può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' << operatore
influiscono sul comportamento dell' <<= operatore. Se il codice usa <<= su una classe o una struttura che
esegue l'overload di << , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere
Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' <<= operatore per spostare lo schema di bit di una Integer variabile a
sinistra della quantità specificata e assegnare il risultato alla variabile.
Sintassi
result = pattern >> amount
Parti
result
Obbligatorio. Valore numerico integrale. Risultato dello spostamento dello schema di bit. Il tipo di dati
corrisponde a quello di pattern .
pattern
Obbligatorio. Espressione numerica integrale. Schema di bit da spostare. Il tipo di dati deve essere integrale (
SByte , Byte , Short , UShort , Integer , UInteger , Long o ULong ).
amount
Obbligatorio. Espressione numerica. Numero di bit per spostare lo schema di bit. Il tipo di dati deve essere
Integer o ampliato a Integer .
Commenti
I turni aritmetici non sono circolari, il che significa che i bit spostati da un'estremità del risultato non vengono
reintrodotti nell'altra estremità. In uno spostamento a destra aritmetico i bit spostati oltre la posizione del bit più
a destra vengono eliminati e il bit più a sinistra (segno) viene propagato nelle posizioni dei bit sgomberate a
sinistra. Ciò significa che se pattern ha un valore negativo, le posizioni sgomberate sono impostate su una. in
caso contrario, vengono impostate su zero.
Si noti che i tipi Byte di dati,, UShort UInteger e ULong sono senza segno, quindi non esiste alcun bit di segno
da propagare. Se pattern è di un tipo senza segno, le posizioni sgomberate vengono sempre impostate su
zero.
Per impedire lo spostamento di più bit rispetto al risultato, Visual Basic maschera il valore di amount con una
maschera di dimensioni corrispondente al tipo di dati di pattern . Il file binario e di questi valori viene utilizzato
per l'importo dello spostamento. Le maschere delle dimensioni sono le seguenti:
Overload
L' >> operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore
su una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre
informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' >> operatore per eseguire turni aritmetici a destra su valori integrali. Il
risultato ha sempre lo stesso tipo di dati dell'espressione spostata.
Il valore Shift per result4 viene calcolato come 18 e 15, che è uguale a 2.
Nell'esempio seguente vengono illustrati i turni aritmetici su un valore negativo.
Vedi anche
Operatori di spostamento bit
Operatori di assegnazione
Operatore>>=
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici in Visual Basic
Operatore >>= (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Esegue uno spostamento a destra aritmetico sul valore di una variabile o di una proprietà e assegna il risultato
alla variabile o alla proprietà.
Sintassi
variableorproperty >>= amount
Parti
variableorproperty
Obbligatorio. Variabile o proprietà di un tipo integrale ( SByte , Byte , Short , UShort , Integer , UInteger ,
Long o ULong ).
amount
Obbligatorio. Espressione numerica di un tipo di dati che viene ampliato a Integer .
Commenti
L'elemento sul lato sinistro dell' >>= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' >>= operatore esegue prima di tutto un spostamento a destra aritmetico sul valore della variabile o della
proprietà. L'operatore assegna quindi il risultato dell'operazione alla variabile o alla proprietà.
I turni aritmetici non sono circolari, il che significa che i bit spostati da un'estremità del risultato non vengono
reintrodotti nell'altra estremità. In uno spostamento a destra aritmetico i bit spostati oltre la posizione del bit più
a destra vengono eliminati e il bit più a sinistra viene propagato nelle posizioni dei bit sgomberate a sinistra. Ciò
significa che se variableorproperty ha un valore negativo, le posizioni sgomberate sono impostate su uno. Se
variableorproperty è positivo o se il tipo di dati è un tipo senza segno, le posizioni sgomberate vengono
impostate su zero.
Overload
L' operatore>> può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' >> operatore
influiscono sul comportamento dell' >>= operatore. Se il codice usa >>= su una classe o una struttura che
esegue l'overload di >> , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere
Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' >>= operatore per spostare lo schema di bit di una Integer variabile a
destra della quantità specificata e assegnare il risultato alla variabile.
Dim var As Integer = 10
Dim shift As Integer = 2
var >>= shift
' The value of var is now 2 (two bits were lost off the right end).
Vedi anche
Operatore>>
Operatori di assegnazione
Operatori di spostamento bit
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzioni
Operatore / (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Sintassi
expression1 / expression2
Parti
expression1
Obbligatorio. Qualsiasi espressione numerica.
expression2
Obbligatorio. Qualsiasi espressione numerica.
Tipi supportati
Tutti i tipi numerici, inclusi i tipi senza segno e a virgola mobile e Decimal .
Risultato
Il risultato è il quoziente completo di expression1 diviso per expression2 , incluso qualsiasi resto.
L' operatore \ (Visual Basic) restituisce il quoziente integer, che elimina il resto.
Commenti
Il tipo di dati del risultato dipende dai tipi degli operandi. Nella tabella seguente viene illustrato il modo in cui
viene determinato il tipo di dati del risultato.
Prima di eseguire la divisione, le espressioni numeriche integrali vengono ampliate a Double . Se il risultato
viene assegnato a un tipo di dati integrale, Visual Basic tenta di convertire il risultato da Double a tale tipo.
Questa operazione può generare un'eccezione se il risultato non rientra in tale tipo. In particolare, vedere
"tentativo di divisione per zero" in questa pagina della guida.
Se expression1 o expression2 restituisce Nothing, viene considerato come zero.
Integrale (con segno o senza segno) Il tentativo di conversione nel tipo integrale genera
un'eccezione OverflowException perché i tipi integrali non
accettano PositiveInfinity , NegativeInfinity o NaN
NOTE
L' / operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su una
classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Questo esempio usa l' / operatore per eseguire la divisione a virgola mobile. Il risultato è il quoziente dei due
operandi.
Le espressioni nell'esempio precedente restituiscono i valori 2,5 e 3,333333. Si noti che il risultato è sempre a
virgola mobile ( Double ), anche se entrambi gli operandi sono costanti integer.
Vedi anche
Operatore/= (Visual Basic)
Operatore \ (Visual Basic)
Tipi di dati dei risultati degli operatori
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici in Visual Basic
Operatore /= (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Divide il valore di una variabile o di una proprietà in base al valore di un'espressione e assegna il risultato a
virgola mobile alla variabile o alla proprietà.
Sintassi
variableorproperty /= expression
Parti
variableorproperty
Obbligatorio. Qualsiasi variabile o proprietà numerica.
expression
Obbligatorio. Qualsiasi espressione numerica.
Commenti
L'elemento sul lato sinistro dell' /= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' /= operatore divide prima di tutto il valore della variabile o della proprietà (sul lato sinistro dell'operatore)
per il valore dell'espressione (sul lato destro dell'operatore). L'operatore assegna quindi il risultato a virgola
mobile dell'operazione alla variabile o alla proprietà.
Questa istruzione assegna un Double valore alla variabile o alla proprietà a sinistra. Se Option Strict è On ,
variableorproperty deve essere un Double oggetto. Se Option Strict è Off , Visual Basic esegue una
conversione implicita e assegna il valore risultante a variableorproperty , con un possibile errore in fase di
esecuzione. Per altre informazioni, vedere conversioni verso un tipo di dati più piccolo e istruzioni Option Strict.
Overload
L' operatore/(Visual Basic) può essere sottoposto a Overload, il che significa che una classe o una struttura può
ridefinire il comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' /
operatore influiscono sul comportamento dell' /= operatore. Se il codice usa /= su una classe o una struttura
che esegue l'overload di / , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' /= operatore per dividere una Integer variabile per secondo e assegnare
il quoziente alla prima variabile.
Sintassi
expression1 \ expression2
Parti
expression1
Obbligatorio. Qualsiasi espressione numerica.
expression2
Obbligatorio. Qualsiasi espressione numerica.
Tipi supportati
Tutti i tipi numerici, inclusi i tipi senza segno e a virgola mobile e Decimal .
Risultato
Il risultato è il quoziente intero di expression1 diviso per expression2 , che elimina qualsiasi resto e mantiene
solo la parte intera. Questa operazione è nota come troncamento.
Il tipo di dati del risultato è un tipo numerico appropriato per i tipi di dati di expression1 e expression2 . Vedere
le tabelle "aritmetiche di interi" nei tipi di dati dei risultati dell'operatore.
L' operatore/(Visual Basic) restituisce il quoziente completo, che mantiene il resto della parte frazionaria.
Commenti
Prima di eseguire la divisione, Visual Basic tenta di convertire qualsiasi espressione numerica a virgola mobile in
Long . Se Option Strict è On , si verifica un errore del compilatore. Se Option Strict è Off , un
OverflowException è possibile se il valore non è compreso nell'intervallo del tipo di dati Long. La conversione in
Long è anche soggetta all' arrotondamento del banco. Per ulteriori informazioni, vedere "parti frazionarie" nelle
funzioni di conversione dei tipi.
Se expression1 o expression2 restituisce Nothing, viene considerato come zero.
Esempio
Nell'esempio seguente viene usato l' \ operatore per eseguire la divisione di interi. Il risultato è un numero
intero che rappresenta il quoziente integer dei due operandi, con il resto ignorato.
Vedi anche
\= (Operatore)
Operatore/(Visual Basic)
Option Strict Statement
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici in Visual Basic
\= (Operatore)
05/03/2021 • 2 minutes to read • Edit Online
Divide il valore di una variabile o di una proprietà in base al valore di un'espressione e assegna il risultato
Integer alla variabile o alla proprietà.
Sintassi
variableorproperty \= expression
Parti
variableorproperty
Obbligatorio. Qualsiasi variabile o proprietà numerica.
expression
Obbligatorio. Qualsiasi espressione numerica.
Commenti
L'elemento sul lato sinistro dell' \= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' \= operatore divide il valore di una variabile o di una proprietà a sinistra del valore a destra e assegna il
risultato Integer alla variabile o alla proprietà a sinistra
Per ulteriori informazioni sulla divisione di interi, vedere \ operator (Visual Basic).
Overload
L' \ operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' \ operatore
influiscono sul comportamento dell' \= operatore. Se il codice usa \= su una classe o una struttura che
esegue l'overload di \ , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere
Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' \= operatore per dividere una Integer variabile per secondo e assegnare
il risultato Integer alla prima variabile.
Vedi anche
Operatore \ (Visual Basic)
Operatore/= (Visual Basic)
Operatori di assegnazione
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzioni
Operatore ^ (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
number ^ exponent
Parti
number
Obbligatorio. Qualsiasi espressione numerica.
exponent
Obbligatorio. Qualsiasi espressione numerica.
Risultato
Il risultato viene number elevato alla potenza di exponent , sempre come Double valore.
Tipi supportati
Double . Gli operandi di qualsiasi tipo diverso vengono convertiti in Double .
Commenti
Visual Basic esegue sempre l'elevamento a potenza nel tipo di dati Double.
Il valore di exponent può essere frazionario, negativo o entrambi.
Quando in un'unica espressione viene eseguita più di un elevamento a potenza, l' ^ operatore viene valutato in
base a quanto rilevato da sinistra verso destra.
NOTE
L' ^ operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su una
classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' ^ operatore per aumentare un numero alla potenza di un esponente. Il
risultato è il primo operando elevato alla potenza del secondo.
Dim exp1, exp2, exp3, exp4, exp5, exp6 As Double
exp1 = 2 ^ 2
exp2 = 3 ^ 3 ^ 3
exp3 = (-5) ^ 3
exp4 = (-5) ^ 4
exp5 = 8 ^ (1.0 / 3.0)
exp6 = 8 ^ (-1.0 / 3.0)
Vedi anche
^ = (Operatore)
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori aritmetici in Visual Basic
Operatore ^= (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Genera il valore di una variabile o di una proprietà alla potenza di un'espressione e assegna il risultato alla
variabile o alla proprietà.
Sintassi
variableorproperty ^= expression
Parti
variableorproperty
Obbligatorio. Qualsiasi variabile o proprietà numerica.
expression
Obbligatorio. Qualsiasi espressione numerica.
Commenti
L'elemento sul lato sinistro dell' ^= operatore può essere una variabile scalare semplice, una proprietà o un
elemento di una matrice. La variabile o la proprietà non può essere di sola lettura.
L' ^= operatore eleva prima di tutto il valore della variabile o della proprietà (sul lato sinistro dell'operatore)
alla potenza del valore dell'espressione (sul lato destro dell'operatore). L'operatore assegna quindi il risultato
dell'operazione alla variabile o alla proprietà.
Visual Basic esegue sempre l'elevamento a potenza nel tipo di dati Double. Gli operandi di qualsiasi tipo diverso
vengono convertiti in Double e il risultato è sempre Double .
Il valore di expression può essere frazionario, negativo o entrambi.
Overload
L' operatore ^ può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. L'overload dell' ^ operatore
influiscono sul comportamento dell' ^= operatore. Se il codice usa ^= su una classe o una struttura che
esegue l'overload di ^ , assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere
Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' ^= operatore per aumentare il valore di una Integer variabile alla
potenza di una seconda variabile e assegnare il risultato alla prima variabile.
Verifica il valore dell'operando sinistro per null ( Nothing ) prima di eseguire un'operazione di accesso ai
membri ( ?. ) o ?() di indice () Nothing . restituisce se l'operando sinistro restituisce Nothing . Si noti che
nelle espressioni che in genere restituiscono tipi di valore, l'operatore condizionale null restituisce Nullable<T> .
Questi operatori consentono di scrivere meno codice per gestire i controlli null, soprattutto in caso di
decrescente in strutture di dati. Ad esempio:
Per il confronto, il codice alternativo per la prima di queste espressioni senza un operatore condizionale null è:
In alcuni casi è necessario eseguire un'azione su un oggetto che può essere null, in base al valore di un membro
booleano su tale oggetto, come la proprietà booleana IsAllowedFreeShipping nell'esempio seguente:
È possibile abbreviare il codice ed evitare di verificare manualmente la presenza di valori null usando l'operatore
condizionale null come indicato di seguito:
Gli operatori condizionali Null causano corto circuiti. Se un'operazione in una catena di operazioni di accesso ai
membri condizionali e di indice restituisce Nothing , il resto dell'esecuzione della catena viene arrestato.
Nell'esempio seguente non viene C(E) valutato se A , B o C restituisce Nothing .
A?.B?.C?(E)
Un altro utilizzo per l'accesso ai membri condizionali null consiste nel richiamare i delegati in modo thread-safe
con molto meno codice. Nell'esempio seguente vengono definiti due tipi, NewsBroadcaster e NewsReceiver . Gli
elementi di notizie vengono inviati al destinatario dal NewsBroadcaster.SendNews delegato.
Se non sono presenti elementi nell' SendNews elenco chiamate, il SendNews delegato genera un'eccezione
NullReferenceException . Prima degli operatori condizionali null, il codice simile al seguente ha assicurato che
l'elenco chiamate del delegato non fosse Nothing :
Il codice creato in questo modo è thread-safe perché il compilatore genera il codice per valutare SendNews una
sola volta, mantenendo il risultato in una variabile temporanea. È necessario chiamare esplicitamente il metodo
Invoke perché non esiste una sintassi di chiamata dei delegati con condizione Null SendNews?(String) .
Vedi anche
Operatori (Visual Basic)
Guida per programmatori Visual Basic
Riferimenti al linguaggio Visual Basic
?. e? () operatori condizionali null (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Verifica il valore dell'operando sinistro per null ( Nothing ) prima di eseguire un'operazione di accesso ai
membri ( ?. ) o ?() di indice () Nothing . restituisce se l'operando sinistro restituisce Nothing . Si noti che
nelle espressioni che in genere restituiscono tipi di valore, l'operatore condizionale null restituisce Nullable<T> .
Questi operatori consentono di scrivere meno codice per gestire i controlli null, soprattutto in caso di
decrescente in strutture di dati. Ad esempio:
Per il confronto, il codice alternativo per la prima di queste espressioni senza un operatore condizionale null è:
In alcuni casi è necessario eseguire un'azione su un oggetto che può essere null, in base al valore di un membro
booleano su tale oggetto, come la proprietà booleana IsAllowedFreeShipping nell'esempio seguente:
È possibile abbreviare il codice ed evitare di verificare manualmente la presenza di valori null usando l'operatore
condizionale null come indicato di seguito:
Gli operatori condizionali Null causano corto circuiti. Se un'operazione in una catena di operazioni di accesso ai
membri condizionali e di indice restituisce Nothing , il resto dell'esecuzione della catena viene arrestato.
Nell'esempio seguente non viene C(E) valutato se A , B o C restituisce Nothing .
A?.B?.C?(E)
Un altro utilizzo per l'accesso ai membri condizionali null consiste nel richiamare i delegati in modo thread-safe
con molto meno codice. Nell'esempio seguente vengono definiti due tipi, NewsBroadcaster e NewsReceiver . Gli
elementi di notizie vengono inviati al destinatario dal NewsBroadcaster.SendNews delegato.
Se non sono presenti elementi nell' SendNews elenco chiamate, il SendNews delegato genera un'eccezione
NullReferenceException . Prima degli operatori condizionali null, il codice simile al seguente ha assicurato che
l'elenco chiamate del delegato non fosse Nothing :
Il codice creato in questo modo è thread-safe perché il compilatore genera il codice per valutare SendNews una
sola volta, mantenendo il risultato in una variabile temporanea. È necessario chiamare esplicitamente il metodo
Invoke perché non esiste una sintassi di chiamata dei delegati con condizione Null SendNews?(String) .
Vedi anche
Operatori (Visual Basic)
Guida per programmatori Visual Basic
Riferimenti al linguaggio Visual Basic
Operatore AddressOf (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
AddressOf procedurename
Parti
procedurename
Obbligatorio. Specifica la procedura a cui fa riferimento il delegato appena creato.
Commenti
L' AddressOf operatore crea un delegato che punta alla subroutine o alla funzione specificata da procedurename
. Quando la procedura specificata è un metodo di istanza, il delegato fa riferimento sia all'istanza sia al metodo.
Quindi, quando viene richiamato il delegato, viene chiamato il metodo specificato dell'istanza specificata.
L' AddressOf operatore può essere usato come operando di un costruttore di delegato o può essere usato in un
contesto in cui il tipo del delegato può essere determinato dal compilatore.
Esempio
In questo esempio viene usato l' AddressOf operatore per designare un delegato per gestire l' Click evento di
un pulsante.
Esempio
Nell'esempio seguente viene usato l' AddressOf operatore per designare la funzione di avvio per un thread.
Sub UseThread()
Dim t As New System.Threading.Thread(AddressOf CountSheep)
t.Start()
End Sub
Vedi anche
Declare Statement
Istruzione Function
Istruzione Sub
Delegati
Operatore And (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Esegue una congiunzione logica di due Boolean espressioni o una congiunzione bit per bit di due espressioni
numeriche.
Sintassi
result = expression1 And expression2
Parti
result
Obbligatorio. Qualsiasi espressione Boolean o numerica. Per il confronto booleano, result è la congiunzione
logica di due Boolean valori. Per le operazioni bit per bit, result è un valore numerico che rappresenta la
combinazione bit per bit di due schemi di bit numerici.
expression1
Obbligatorio. Qualsiasi espressione Boolean o numerica.
expression2
Obbligatorio. Qualsiasi espressione Boolean o numerica.
Commenti
Per il confronto booleano, result è True se e solo se expression1 e expression2 restituiscono True . Nella
tabella seguente viene illustrato come result determinare.
NOTE
In un confronto booleano, l' And operatore valuta sempre entrambe le espressioni, che possono includere l'esecuzione di
chiamate di routine. L' operatore AndAlso esegue un corto circuito, il che significa che se expression1 è False ,
expression2 non viene valutato.
Quando viene applicato a valori numerici, l' And operatore esegue un confronto bit per bit dei bit posizionati in
modo identico in due espressioni numeriche e imposta il bit corrispondente in in result base alla tabella
seguente.
SE IL B IT IN EXPRESSION1 È E B IT IN EXPRESSION2 È IL B IT IN RESULT È
1 1 1
1 0 0
0 1 0
0 0 0
NOTE
Poiché gli operatori logici e bit per bit hanno una precedenza inferiore rispetto ad altri operatori aritmetici e relazionali,
qualsiasi operazione bit per bit deve essere racchiusa tra parentesi per garantire risultati accurati.
Tipi di dati
Se gli operandi sono costituiti da un'espressione e da un' Boolean espressione numerica, Visual Basic converte
l' Boolean espressione in un valore numerico (-1 per True e 0 per False ) ed esegue un'operazione bit per bit.
Per un confronto booleano, il tipo di dati del risultato è Boolean . Per un confronto bit per bit, il tipo di dati result
è un tipo numerico appropriato per i tipi di dati di expression1 e expression2 . Vedere la tabella "confronto
relazionale e bit per bit" in tipi di dati dei risultati dell'operatore.
NOTE
L' And operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su una
classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio seguente viene utilizzato l' And operatore per eseguire una congiunzione logica di due
espressioni. Il risultato è un Boolean valore che indica se entrambe le espressioni sono True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck As Boolean
firstCheck = a > b And b > c
secondCheck = b > a And b > c
Esempio
Nell'esempio seguente viene usato l' And operatore per eseguire congiunzioni logiche sui singoli bit di due
espressioni numeriche. Il bit nel modello di risultato viene impostato se i bit corrispondenti negli operandi sono
entrambi impostati su 1.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a And b)
secondPattern = (a And c)
thirdPattern = (b And c)
Vedi anche
Operatori logici e bit per bit (Visual Basic)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatore AndAlso
Operatori logici e bit per bit in Visual Basic
Operatore AndAlso (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Sintassi
result = expression1 AndAlso expression2
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Un'operazione logica viene detta corto circuito se il codice compilato può ignorare la valutazione di
un'espressione a seconda del risultato di un'altra espressione. Se il risultato della prima espressione valutata
determina il risultato finale dell'operazione, non è necessario valutare la seconda espressione, perché non è in
grado di modificare il risultato finale. Il cortocircuito può migliorare le prestazioni se l'espressione bypassata è
complessa o se implica chiamate di routine.
Se entrambe le espressioni restituiscono True , result è True . Nella tabella seguente viene illustrato come
result determinare.
Tipi di dati
L' AndAlso operatore viene definito solo per il tipo di dati Boolean. Visual Basic converte ogni operando come
necessario in Boolean prima di valutare l'espressione. Se il risultato viene assegnato a un tipo numerico, Visual
Basic lo converte da Boolean a tale tipo, in modo che False diventi 0 e True diventi -1 . Per altre
informazioni, vedere conversioni di tipi booleani.
Overload
È possibile eseguire l' Overload dell' operatore and e dell' operatore false , il che significa che una classe o una
struttura può ridefinire il comportamento quando un operando ha il tipo della classe o della struttura.
L'overload degli And operatori e IsFalse influiscono sul comportamento dell' AndAlso operatore. Se il codice
usa AndAlso su una classe o una struttura che esegue l'overload And di e IsFalse , assicurarsi di comprendere
il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene utilizzato l' AndAlso operatore per eseguire una congiunzione logica di due
espressioni. Il risultato è un Boolean valore che indica se l'intera espressione conjointa è true. Se la prima
espressione è False , la seconda non viene valutata.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b
Nell'esempio precedente vengono prodotti rispettivamente i risultati di True , False e False . Nel calcolo di
secondCheck la seconda espressione non viene valutata perché il primo è già False . Tuttavia, la seconda
espressione viene valutata nel calcolo di thirdCheck .
Esempio
Nell'esempio seguente viene illustrata una Function procedura per la ricerca di un determinato valore tra gli
elementi di una matrice. Se la matrice è vuota o se la lunghezza della matrice è stata superata, l' While
istruzione non testa l'elemento della matrice con il valore di ricerca.
Vedi anche
Operatori logici e bit per bit (Visual Basic)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatore And
Operatore IsFalse
Operatori logici e bit per bit in Visual Basic
Opertore Await (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Applicare l'operatore Await a un operando in un metodo o in un'espressione lambda asincroni per sospendere
l'esecuzione del metodo finché l'attività di cui si è in attesa non viene completata. L'attività rappresenta il lavoro
attualmente in fase di esecuzione.
Il metodo in cui Await viene usato deve avere un modificatore Async . Tale metodo, definito usando il
modificatore Async e contenente di solito una o più espressioni Await , viene denominato metodo asincrono.
NOTE
Le parole chiave Async e Await sono state introdotte in Visual Studio 2012. Per un'introduzione alla programmazione
asincrona, vedere programmazione asincrona con Async e await.
In genere, l'attività a cui si applica l' Await operatore è il valore restituito da una chiamata a un metodo che
implementa il modello asincrono basato su attività, ovvero un oggetto Task o un oggetto Task<TResult> .
Nel seguente codice, l'elemento HttpClient del metodo GetByteArrayAsync restituisce getContentsTask , un
elemento Task(Of Byte()) . L'attività è una promessa di produrre la matrice di byte effettiva una volta
completata l'operazione. L'operatore Await viene applicato a getContentsTask per sospendere l'esecuzione in
SumPageSizesAsync fino al completamento di getContentsTask . Nel frattempo, il controllo viene restituito al
chiamante di SumPageSizesAsync . Quando getContentsTask termina, l'espressione Await restituisce una matrice
di byte.
' To use the HttpClient type in desktop apps, you must include a using directive and add a
' reference for the System.Net.Http namespace.
Dim client As HttpClient = New HttpClient()
' . . .
Dim getContentsTask As Task(Of Byte()) = client.GetByteArrayAsync(url)
Dim urlContents As Byte() = Await getContentsTask
' Equivalently, now that you see how it works, you can write the same thing in a single line.
'Dim urlContents As Byte() = Await client.GetByteArrayAsync(url)
' . . .
End Function
IMPORTANT
Per l'esempio completo, vedere Procedura dettagliata: accesso al Web con async e await. È possibile scaricare l'esempio da
Developer Code Samples (Esempi di codice per sviluppatori) del sito Web Microsoft. L'esempio è nel progetto
AsyncWalkthrough_HttpClient.
Un'espressione o un'istruzione Await non blocca il thread su cui è in esecuzione. Comporta invece la
registrazione, tramite il compilatore, della parte restante del metodo asincrono, dopo l'espressione Await , come
continuazione dell'attività di cui si è in attesa. Il controllo quindi viene restituito al chiamante del metodo
asincrono. Al termine dell'attività, ne richiama la continuazione e l'esecuzione del metodo asincrono riprende da
dove era stata interrotta.
Un'espressione Await può trovarsi solo nel corpo di un metodo che la contiene o di un'espressione lambda
contrassegnata da un modificatore Async . Il termine await funge da parola chiave solo in tale contesto. Altrove,
viene interpretata come identificatore. All'interno del Async metodo o dell'espressione lambda, un'espressione
Await non può essere presente in un'espressione di query, nel Catch Finally blocco o di un try... Rileva...
Infine, nell'espressione variabile di controllo del ciclo di un For For Each ciclo o oppure nel corpo di
un'istruzione SyncLock .
Eccezioni
La maggior parte dei metodi asincroni restituisce Task o Task<TResult>. Le proprietà dell'attività restituita
contengono informazioni sullo stato e sulla cronologia, ad esempio se l'attività è stata completata, se il metodo
asincrono ha generato un'eccezione o è stato annullato e il risultato finale. L'operatore Await accede a tali
proprietà.
Se si è in attesa di un metodo asincrono che restituisce un'attività che genera un'eccezione, tramite l'operatore
Await viene rigenerata l'eccezione.
Se si è in attesa di un metodo asincrono che restituisce un'attività che è stato annullato, tramite l'operatore
Await viene rigenerata un'eccezione OperationCanceledException.
Una singola attività in uno stato di errore può rispecchiare più eccezioni. Ad esempio, l'attività può essere il
risultato di una chiamata a Task.WhenAll. Quando si attende tale attività, l'operazione await rigenera solo una
delle eccezioni. Tuttavia, non è possibile prevedere quale delle eccezioni verrà rigenerata.
Per esempi di gestione degli errori nei metodi asincroni, vedere try... Rileva... Istruzione finally.
Esempio
Il seguente esempio di Windows Form illustra l'uso di Await in un metodo asincrono, WaitAsynchronouslyAsync .
Contrastare il comportamento di tale metodo con il comportamento di WaitSynchronously . Senza un operatore
Await , WaitSynchronously viene eseguito in modo sincrono nonostante l'uso del modificatore Async nella
definizione e di una chiamata a Thread.Sleep nel corpo.
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' Call the method that runs asynchronously.
Dim result As String = Await WaitAsynchronouslyAsync()
' The following method runs synchronously, despite the use of Async.
' You cannot move or resize the Form1 window while Thread.Sleep
' is running because the UI thread is blocked.
Public Async Function WaitSynchronously() As Task(Of String)
' Import System.Threading for the Sleep method.
Thread.Sleep(10000)
Return "Finished"
End Function
Vedi anche
Programmazione asincrona con Async e Await
Procedura dettagliata: accesso al Web tramite Async e await
Asincrona
Operatore DirectCast (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Commenti
DirectCast non usa le routine di supporto della fase di esecuzione Visual Basic per la conversione, pertanto
può fornire prestazioni leggermente migliori rispetto a quando si esegue la conversione CType da e verso il tipo
di dati Object .
Si usa la DirectCast parola chiave analoga a quella usata per la funzione CType e la parola chiave dell'
operatore TryCast . È possibile specificare un'espressione come primo argomento e un tipo in cui convertirla
come secondo argomento. DirectCast richiede una relazione di ereditarietà o implementazione tra i tipi di dati
dei due argomenti. Ciò significa che un tipo deve ereditare da o implementare l'altro.
Errori ed errori
DirectCast genera un errore del compilatore se rileva che non esiste alcuna relazione di ereditarietà o
implementazione. Tuttavia, la mancanza di un errore del compilatore non garantisce una conversione corretta.
Se la conversione desiderata è più restrittiva, potrebbe verificarsi un errore in fase di esecuzione. In tal caso, il
runtime genera un InvalidCastException errore.
REL A Z IO N E T RA
PA RO L A C H IAVE T IP I DI DAT I A RGO M EN T I ERRO RE DI RUN - T IM E
Operatore TryCast Solo tipi di riferimento Un tipo deve ereditare da o Non restituisce alcun
implementare l'altro tipo risultato
Esempio
Nell'esempio seguente vengono illustrati due utilizzi di DirectCast , uno che non riesce in fase di esecuzione e
uno che ha esito positivo.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
Nell'esempio precedente, il tipo in fase di esecuzione di q è Double . CType ha esito positivo perché Double
può essere convertito in Integer . Tuttavia, il primo DirectCast errore viene eseguito in fase di esecuzione
perché il tipo in fase di esecuzione di Double non ha una relazione di ereditarietà con Integer , anche se esiste
una conversione. Il secondo DirectCast ha esito positivo perché converte dal tipo Form al tipo Control , da cui
Form eredita.
Vedi anche
Convert.ChangeType
Widening and Narrowing Conversions
Conversioni implicite ed esplicite
Espressione di funzione (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Sintassi
Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
[ statements ]
End Function
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Un' espressione lambda è una funzione senza nome che calcola e restituisce un valore. È possibile usare
un'espressione lambda in qualsiasi punto in cui è possibile usare un tipo delegato, ad eccezione di un
argomento di RemoveHandler . Per altre informazioni sui delegati e sull'uso di espressioni lambda con i delegati,
vedere istruzione Delegate e conversione di delegati rilassati.
Esempio
Negli esempi seguenti vengono illustrati due modi per creare espressioni lambda semplici. Il primo usa un
oggetto Dim per fornire un nome per la funzione. Per chiamare la funzione, si invia un valore per il parametro.
Esempio
In alternativa, è possibile dichiarare ed eseguire la funzione nello stesso momento.
Esempio
Di seguito è riportato un esempio di espressione lambda che incrementa il relativo argomento e restituisce il
valore. Nell'esempio viene illustrata la sintassi delle espressioni lambda su una sola riga e su più righe per una
funzione. Per altri esempi, vedere espressioni lambda.
Esempio
Le espressioni lambda sono sottostanti molti degli operatori di query in Language-Integrated query (LINQ) e
possono essere utilizzate in modo esplicito nelle query basate su metodo. Nell'esempio seguente viene illustrata
una tipica query LINQ, seguita dalla conversione della query nel formato del metodo.
Dim londonCusts = From cust In db.Customers
Where cust.City = "London"
Select cust
Per ulteriori informazioni sui metodi di query, vedere query. Per ulteriori informazioni sugli operatori di query
standard, vedere Cenni preliminari sugli operatori di query standard.
Vedi anche
Istruzione Function
Espressioni lambda
Operatori ed espressioni
Istruzioni
Confronto di valori
Espressioni booleane
Operatore If
Conversione di tipo relaxed del delegato
Operatore GetType (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Restituisce un Type oggetto per il tipo specificato. L' Type oggetto fornisce informazioni sul tipo, ad esempio
proprietà, metodi ed eventi.
Sintassi
GetType(typename)
Parametri
PA RA M ET RO DESC RIZ IO N E
Commenti
L' GetType operatore restituisce l' Type oggetto per l'oggetto specificato typename . È possibile passare il nome
di qualsiasi tipo definito in typename . Il comportamento predefinito include quanto segue:
Qualsiasi tipo di dati Visual Basic, ad esempio Boolean o Date .
Qualsiasi .NET Framework classe, struttura, modulo o interfaccia, ad esempio System.ArgumentException
o System.Double .
Qualsiasi classe, struttura, modulo o interfaccia definita dall'applicazione.
Qualsiasi matrice definita dall'applicazione.
Qualsiasi delegato definito dall'applicazione.
Qualsiasi enumerazione definita da Visual Basic, .NET Framework o dall'applicazione.
Se si desidera ottenere l'oggetto tipo di una variabile oggetto, utilizzare il Type.GetType metodo.
L' GetType operatore può essere utile nelle circostanze seguenti:
È necessario accedere ai metadati per un tipo in fase di esecuzione. L' Type oggetto fornisce metadati
quali i membri del tipo e le informazioni sulla distribuzione. Questa operazione è necessaria, ad esempio,
per riflettere un assembly. Per altre informazioni, vedere System.Reflection.
Si desidera confrontare due riferimenti a oggetti per verificare se fanno riferimento a istanze dello stesso
tipo. In caso affermativo, GetType restituisce riferimenti allo stesso Type oggetto.
Esempio
Negli esempi seguenti viene illustrato l' GetType operatore in uso.
' The following statement returns the Type object for Integer.
MsgBox(GetType(Integer).ToString())
' The following statement returns the Type object for one-dimensional string arrays.
MsgBox(GetType(String()).ToString())
Vedi anche
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori ed espressioni
Operatore GetXmlNamespace (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Ottiene l' XNamespace oggetto che corrisponde al prefisso dello spazio dei nomi XML specificato.
Sintassi
GetXmlNamespace(xmlNamespacePrefix)
Parti
xmlNamespacePrefix
facoltativo. Stringa che identifica il prefisso dello spazio dei nomi XML. Se specificato, la stringa deve essere un
identificatore XML valido. Per ulteriori informazioni, vedere nomi di elementi e attributi XML dichiarati. Se non
viene specificato alcun prefisso, viene restituito lo spazio dei nomi predefinito. Se non viene specificato alcuno
spazio dei nomi predefinito, viene restituito lo spazio dei nomi vuoto.
Valore restituito
XNamespaceOggetto che corrisponde al prefisso dello spazio dei nomi XML.
Commenti
L' GetXmlNamespace operatore ottiene l' XNamespace oggetto che corrisponde al prefisso dello spazio dei nomi
XML xmlNamespacePrefix .
È possibile utilizzare i prefissi degli spazi dei nomi XML direttamente nei valori letterali XML e nelle proprietà
Axis XML. Tuttavia, è necessario usare l' GetXmlNamespace operatore per convertire un prefisso dello spazio dei
nomi in un XNamespace oggetto prima di poterlo usare nel codice. È possibile aggiungere un nome di elemento
non qualificato a un XNamespace oggetto per ottenere un XName oggetto completo, che richiede molti LINQ to
XML metodi.
Esempio
Nell'esempio seguente viene importato ns come prefisso dello spazio dei nomi XML. USA quindi il prefisso
dello spazio dei nomi per creare un valore letterale XML e accedere al primo nodo figlio con il nome completo
ns:phone . Passa quindi quel nodo figlio alla ShowName subroutine, che costruisce un nome completo usando l'
GetXmlNamespace operatore. La ShowName subroutine passa quindi il nome completo al Ancestors metodo per
ottenere il ns:contact nodo padre.
' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">
Module GetXmlNamespaceSample
Sub RunSample()
Dim contact =
<ns:contact>
<ns:name>Patrick Hines</ns:name>
<ns:phone ns:type="home">206-555-0144</ns:phone>
<ns:phone ns:type="work">425-555-0145</ns:phone>
</ns:contact>
ShowName(contact.<ns:phone>(0))
End Sub
End Module
Vedi anche
Istruzione Imports (spazio dei nomi XML)
Accesso a XML in Visual Basic
Operatore If (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Usa la valutazione del cortocircuito per restituire in modo condizionale uno dei due valori. L' If operatore può
essere chiamato con tre argomenti o con due argomenti.
Sintassi
If( [argument1,] argument2, argument3 )
Un If operatore chiamato con tre argomenti funziona come una IIf funzione ad eccezione del fatto che usa
la valutazione a corto circuito. Una IIf funzione valuta sempre tutti e tre gli argomenti, mentre un If
operatore con tre argomenti ne valuta solo due. Il primo If argomento viene valutato e viene eseguito il cast
del risultato come Boolean valore, True o False . Se il valore è True , argument2 viene valutato e viene
restituito il relativo valore, ma argument3 non viene valutato. Se il valore dell' Boolean espressione è False ,
argument3 viene valutato e viene restituito il relativo valore, ma argument2 non viene valutato. Negli esempi
seguenti viene illustrato l'utilizzo di If quando vengono utilizzati tre argomenti:
' This statement prints TruePart, because the first argument is true.
Console.WriteLine(If(True, "TruePart", "FalsePart"))
' This statement prints FalsePart, because the first argument is false.
Console.WriteLine(If(False, "TruePart", "FalsePart"))
Dim number = 3
' With number set to 3, this statement prints Positive.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))
number = -1
' With number set to -1, this statement prints Negative.
Console.WriteLine(If(number >= 0, "Positive", "Negative"))
Nell'esempio seguente viene illustrato il valore della valutazione del cortocircuito. Nell'esempio vengono
illustrati due tentativi di dividere la variabile number in base alla variabile divisor tranne quando divisor è
zero. In tal caso, deve essere restituito 0 e non è necessario effettuare alcuna operazione per eseguire la
divisione perché si verificherà un errore in fase di esecuzione. Poiché l' If espressione usa la valutazione di
corto circuito, viene valutato il secondo o il terzo argomento, a seconda del valore del primo argomento. Se il
primo argomento è true, il divisore è diverso da zero ed è sicuro valutare il secondo argomento ed eseguire la
divisione. Se il primo argomento è false, viene valutato solo il terzo argomento e viene restituito 0. Pertanto,
quando il divisore è 0, non viene effettuato alcun tentativo di eseguire la divisione e non vengono restituiti
errori. Tuttavia, poiché non IIf Usa la valutazione del cortocircuito, il secondo argomento viene valutato anche
quando il primo argomento è false. Causando un errore di divisione per zero della fase di esecuzione.
number = 12
' When the divisor is 0, IIf causes a run-time error, but If does not.
divisor = 0
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
' Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))
Quando l' Boolean argomento viene omesso, il primo argomento deve essere un riferimento o un tipo di valore
Nullable. Se il primo argomento restituisce Nothing , viene restituito il valore del secondo argomento. In tutti gli
altri casi, viene restituito il valore del primo argomento. Nell'esempio seguente viene illustrato il funzionamento
della valutazione:
' Variable first is a nullable type.
Dim first? As Integer = 3
Dim second As Integer = 6
second = Nothing
' Variable first <> Nothing, so the value of first is returned again.
Console.WriteLine(If(first, second))
first = Nothing
second = 6
' Variable first = Nothing, so 6 is returned.
Console.WriteLine(If(first, second))
Vedi anche
IIf
Tipi di valore Nullable
Nothing
Operatore is (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
result = object1 Is object2
Parti
result
Obbligatorio. Qualsiasi Boolean valore.
object1
Obbligatorio. Qualsiasi Object nome.
object2
Obbligatorio. Qualsiasi Object nome.
Commenti
L' Is operatore determina se due riferimenti a oggetti si riferiscono allo stesso oggetto. Tuttavia, non esegue
confronti di valori. Se object1 ed object2 entrambi fanno riferimento alla stessa istanza dell'oggetto, result
è True ; in caso contrario, result è False .
NOTE
La Is parola chiave viene inoltre utilizzata nell'oggetto Select... Istruzione case.
Esempio
Nell'esempio seguente viene usato l' Is operatore per confrontare coppie di riferimenti a oggetti. I risultati
vengono assegnati a un Boolean valore che indica se i due oggetti sono identici.
Dim myObject As New Object
Dim otherObject As New Object
Dim yourObject, thisObject, thatObject As Object
Dim myCheck As Boolean
yourObject = myObject
thisObject = myObject
thatObject = otherObject
' The following statement sets myCheck to True.
myCheck = yourObject Is thisObject
' The following statement sets myCheck to False.
myCheck = thatObject Is thisObject
' The following statement sets myCheck to False.
myCheck = myObject Is thatObject
thatObject = myObject
' The following statement sets myCheck to True.
myCheck = thisObject Is thatObject
Come illustrato nell'esempio precedente, è possibile usare l' Is operatore per testare gli oggetti ad
associazione anticipata e ad associazione tardiva.
Vedere anche
Operatore TypeOf
Operatore IsNot
Comparison Operators in Visual Basic
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori ed espressioni
Operatore IsFalse (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
NOTE
L' IsFalse operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando il relativo operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su
una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio di codice seguente viene definita la struttura di una struttura che include definizioni per gli
IsFalse IsTrue operatori e.
Public Structure p
Dim a As Double
Public Shared Operator IsFalse(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of w.
Return b
End Operator
Public Shared Operator IsTrue(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of w.
Return b
End Operator
End Structure
Vedi anche
Operatore IsTrue
Procedura: definire un operatore
Operatore AndAlso
Operatore IsNot (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
result = object1 IsNot object2
Parti
result
Commenti
L' IsNot operatore determina se due riferimenti a oggetti si riferiscono a oggetti diversi. Tuttavia, non esegue
confronti di valori. Se object1 ed object2 entrambi fanno riferimento alla stessa istanza dell'oggetto, result
è False ; in caso contrario, result è True .
IsNot è l'opposto dell' Is operatore. Il vantaggio di IsNot è che è possibile evitare la sintassi scomoda con
Not e Is , che può essere difficile da leggere.
È possibile utilizzare gli Is IsNot operatori e per testare gli oggetti ad associazione anticipata e ad
associazione tardiva.
Esempio
Nell'esempio di codice seguente vengono usati sia l' Is operatore che l' IsNot operatore per eseguire lo
stesso confronto.
Vedere anche
Operatore Is
Operatore TypeOf
Precedenza tra gli operatori in Visual Basic
Procedura: determinare se due oggetti sono uguali
Operatore IsTrue (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
5. Operatore di conversione verso un tipo di dati più piccolo dalla classe o dalla struttura a Boolean .
Se non è stata definita alcuna conversione a Boolean o a un IsTrue operatore, il compilatore segnala un errore.
NOTE
L' IsTrue operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando il relativo operando ha il tipo della classe o della struttura. Se il codice usa questo operatore su
una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni,
vedere Operator Procedures.
Esempio
Nell'esempio di codice seguente viene definita la struttura di una struttura che include definizioni per gli
IsFalse IsTrue operatori e.
Public Structure p
Dim a As Double
Public Shared Operator IsFalse(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of w.
Return b
End Operator
Public Shared Operator IsTrue(ByVal w As p) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of w.
Return b
End Operator
End Structure
Vedi anche
Operatore IsFalse
Procedura: definire un operatore
Operatore OrElse
Like (operatore) (Visual Basic)
05/03/2021 • 10 minutes to read • Edit Online
IMPORTANT
L' Like operatore non è attualmente supportato nei progetti .NET Core e .NET standard.
Sintassi
result = string Like pattern
Parti
result
Obbligatorio. Qualsiasi Boolean variabile. Il risultato è un Boolean valore che indica se l'oggetto string
soddisfa o meno pattern .
string
Obbligatorio. Qualsiasi espressione String .
pattern
Obbligatorio. Qualsiasi String espressione conforme alle convenzioni dei criteri di ricerca descritte in
"osservazioni".
Commenti
Se il valore in string soddisfa il modello contenuto in pattern , result è True . Se la stringa non soddisfa il
criterio, result è False . Se string e pattern sono stringhe vuote, il risultato è True .
Metodo di confronto
Il comportamento dell' Like operatore dipende dall' istruzione Option Compare. Il metodo di confronto tra
stringhe predefinito per ogni file di origine è Option Compare Binary .
Opzioni modello
Criteri di ricerca predefiniti fornisce uno strumento versatile per i confronti tra stringhe. Le funzionalità dei
criteri di ricerca consentono di associare ogni carattere in a string un carattere specifico, un carattere jolly, un
elenco di caratteri o un intervallo di caratteri. Nella tabella seguente vengono illustrati i caratteri consentiti in e
le relative pattern corrispondenze.
? Un solo carattere
C A RAT T ERI IN PATTERN C O RRISP O N DE A STRING
Elenchi di caratteri
Un gruppo di uno o più caratteri ( charlist ) racchiusi tra parentesi quadre ( [ ] ) può essere usato per
trovare la corrispondenza con qualsiasi carattere singolo in string e può includere quasi tutti i codici carattere,
incluse le cifre.
Un punto esclamativo ( ! ) all'inizio di charlist indica che viene effettuata una corrispondenza se viene
trovato un carattere ad eccezione dei caratteri in charlist string . Quando viene usato all'esterno delle
parentesi quadre, il punto esclamativo corrisponde a se stesso.
Caratteri speciali
Per trovare la corrispondenza tra i caratteri speciali ( [ ), il punto interrogativo ( ? ), il simbolo di cancelletto ()
# e l'asterisco ( * ), racchiuderli tra parentesi quadre. La parentesi quadra chiusa ( ] ) non può essere usata
all'interno di un gruppo per trovare la corrispondenza, ma può essere usata all'esterno di un gruppo come
singolo carattere.
La sequenza di caratteri [] è considerata una stringa di lunghezza zero ( "" ). Tuttavia, non può far parte di un
elenco di caratteri racchiuso tra parentesi quadre. Se si desidera controllare se una posizione in string contiene
uno di un gruppo di caratteri o nessun carattere, è possibile utilizzare Like due volte. Per un esempio, vedere
procedura: trovare la corrispondenza di una stringa con un modello.
Intervalli di caratteri
Utilizzando un trattino ( – ) per separare i limiti inferiore e superiore dell'intervallo, charlist può specificare
un intervallo di caratteri. Se ad esempio [A–Z] la posizione del carattere corrispondente in contiene un
carattere compreso nell'intervallo, viene generata una corrispondenza se la posizione del string A Z [!H–L]
carattere corrispondente contiene un carattere non compreso nell'intervallo, H ovvero L .
Quando si specifica un intervallo di caratteri, questi devono essere visualizzati in ordine crescente, ovvero dal
più basso al più alto. Pertanto, [A–Z] è un modello valido, ma [Z–A] non lo è.
Più intervalli di caratteri
Per specificare più intervalli per la stessa posizione del carattere, inserirli all'interno delle stesse parentesi
quadre senza delimitatori. Ad esempio, [A–CX–Z] restituisce una corrispondenza se la posizione del carattere
corrispondente in string contiene qualsiasi carattere compreso nell'intervallo A C o nell'intervallo X - Z .
Utilizzo del trattino
Un trattino ( – ) può apparire all'inizio (dopo un punto esclamativo, se presente) o alla fine di charlist per
corrispondere a se stesso. In qualsiasi altra posizione, il segno meno identifica un intervallo di caratteri delimitati
dai caratteri su entrambi i lati del segno meno.
Sequenza di fascicolazione
Il significato di un intervallo specificato dipende dall'ordinamento dei caratteri in fase di esecuzione, come
determinato da Option Compare e dalle impostazioni locali del sistema in cui è in esecuzione il codice. Con
Option Compare Binary , l'intervallo [A–E] corrisponde a,,, A B C D e E . Con Option Compare Text ,
[A–E] corrisponde a A , a ,, À à , B , b , C , c , D , d , E e e . L'intervallo non corrisponde Ê o ê
perché i caratteri accentati vengono ordinati dopo caratteri non accentati nell'ordinamento.
Caratteri di digramma
In alcune lingue sono presenti caratteri alfabetici che rappresentano due caratteri distinti. Ad esempio, diversi
linguaggi utilizzano il carattere æ per rappresentare i caratteri a e e quando vengono visualizzati insieme. L'
Like operatore riconosce che il singolo carattere di digramma e i due caratteri singoli sono equivalenti.
Quando nelle impostazioni locali del sistema viene specificata una lingua che usa un carattere digraph,
un'occorrenza del singolo carattere di digramma in pattern o string corrisponde alla sequenza di due
caratteri equivalente nell'altra stringa. Analogamente, un carattere di digramma pattern racchiuso tra parentesi
quadre (di per sé, in un elenco o in un intervallo) corrisponde alla sequenza di due caratteri equivalente in
string .
Overload
L' Like operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può
ridefinire il comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo
operatore su una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito.
Per altre informazioni, vedere Operator Procedures.
Esempio
Questo esempio usa l' Like operatore per confrontare le stringhe con i vari modelli. I risultati entrano in una
Boolean variabile che indica se ogni stringa soddisfa il modello.
Dim testCheck As Boolean
' The following statement returns True (does "F" satisfy "F"?)
testCheck = "F" Like "F"
' The following statement returns False for Option Compare Binary
' and True for Option Compare Text (does "F" satisfy "f"?)
testCheck = "F" Like "f"
' The following statement returns False (does "F" satisfy "FFF"?)
testCheck = "F" Like "FFF"
' The following statement returns True (does "aBBBa" have an "a" at the
' beginning, an "a" at the end, and any number of characters in
' between?)
testCheck = "aBBBa" Like "a*a"
' The following statement returns True (does "F" occur in the set of
' characters from "A" through "Z"?)
testCheck = "F" Like "[A-Z]"
' The following statement returns False (does "F" NOT occur in the
' set of characters from "A" through "Z"?)
testCheck = "F" Like "[!A-Z]"
' The following statement returns True (does "a2a" begin and end with
' an "a" and have any single-digit number in between?)
testCheck = "a2a" Like "a#a"
' The following statement returns True (does "aM5b" begin with an "a",
' followed by any character from the set "L" through "P", followed
' by any single-digit number, and end with any character NOT in
' the character set "c" through "e"?)
testCheck = "aM5b" Like "a[L-P]#[!c-e]"
' The following statement returns True (does "BAT123khg" begin with a
' "B", followed by any single character, followed by a "T", and end
' with zero or more characters of any type?)
testCheck = "BAT123khg" Like "B?T*"
' The following statement returns False (does "CAT123khg"?) begin with
' a "B", followed by any single character, followed by a "T", and
' end with zero or more characters of any type?)
testCheck = "CAT123khg" Like "B?T*"
Vedi anche
InStr
StrComp
Operatori di confronto
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Istruzione Option Compare
Operatori ed espressioni
Procedura: confrontare una stringa con un modello
Operatore Mod (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Sintassi
result = number1 Mod number2
Parti
result
Obbligatorio. Qualsiasi variabile o proprietà numerica.
number1
Obbligatorio. Qualsiasi espressione numerica.
number2
Obbligatorio. Qualsiasi espressione numerica.
Tipi supportati
tutti i tipi numerici. Sono inclusi i tipi a virgola mobile e non firmati e Decimal .
Risultato
Il risultato è il resto dopo che number1 è diviso per number2 . Ad esempio, l'espressione 14 Mod 4 restituisce 2.
NOTE
Esiste una differenza tra resto e modulo in matematica, con risultati diversi per i numeri negativi. L' Mod operatore in
Visual Basic, l' op_Modulus operatore .NET Framework e l'istruzione REM il sottostante eseguono un'operazione resto.
Il risultato di un' Mod operazione mantiene il segno del dividendo, number1 , quindi può essere positivo o
negativo. Il risultato è sempre compreso nell'intervallo (- number2 , number2 ), Exclusive. Ad esempio:
L' operatore/(Visual Basic) restituisce il quoziente completo, incluso il resto, come numero a virgola
mobile. Ad esempio, l'espressione 14 / 4 restituisce 3,5.
Formula equivalente
L'espressione a Mod b è equivalente a una delle formule seguenti:
a - (b * (a \ b))
a - (b * Fix(a / b))
Overload
È Mod possibile eseguire l' Overload dell'operatore, il che significa che una classe o una struttura può ridefinire
il comportamento. Se il codice si applica Mod a un'istanza di una classe o una struttura che include tale
overload, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere Operator
Procedures.
Esempio
Nell'esempio seguente viene usato l' Mod operatore per dividere due numeri e restituire solo il resto. Se uno dei
due numeri è un numero a virgola mobile, il risultato è un numero a virgola mobile che rappresenta il resto.
Debug.WriteLine(10 Mod 5)
' Output: 0
Debug.WriteLine(10 Mod 3)
' Output: 1
Debug.WriteLine(-10 Mod 3)
' Output: -1
Debug.WriteLine(12 Mod 4.3)
' Output: 3.4
Debug.WriteLine(12.6 Mod 5)
' Output: 2.6
Debug.WriteLine(47.9 Mod 9.35)
' Output: 1.15
Esempio
Nell'esempio seguente viene illustrata la potenziale imprecisione degli operandi a virgola mobile. Nella prima
istruzione gli operandi sono Double e 0,2 è una frazione binaria ripetuta in modo infinito con un valore
archiviato di 0.20000000000000001. Nella seconda istruzione, il carattere di tipo letterale D impone entrambi
gli operandi a Decimal e 0,2 presenta una rappresentazione precisa.
Vedi anche
Int
Fix
Operatori aritmetici
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Risoluzione dei problemi relativi ai tipi di dati
Operatori aritmetici in Visual Basic
Operatore \ (Visual Basic)
Operatore NameOf-Visual Basic
02/11/2020 • 2 minutes to read • Edit Online
L'operatore NameOf ottiene il nome di una variabile, di un tipo o di un membro come costante stringa:
Come illustrato nell'esempio precedente, nel caso di un tipo e di uno spazio dei nomi, il nome prodotto in
genere non è completo.
L'operatore NameOf viene valutato in fase di compilazione e non ha alcun effetto in fase di esecuzione.
È possibile usare l'operatore NameOf per rendere più gestibile il codice per il controllo degli argomenti:
Vedere anche
Riferimenti al linguaggio Visual Basic
Operatori (Visual Basic)
Operatore New (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Introduce una New clausola per creare una nuova istanza dell'oggetto, specifica un vincolo del costruttore in un
parametro di tipo o identifica una Sub routine come costruttore di classe.
Commenti
In una dichiarazione o un'istruzione di assegnazione, una New clausola deve specificare una classe definita da
cui è possibile creare l'istanza. Questo significa che la classe deve esporre uno o più costruttori a cui il codice
chiamante può accedere.
È possibile utilizzare una New clausola in un'istruzione di dichiarazione o un'istruzione di assegnazione. Quando
l'istruzione viene eseguita, viene chiamato il costruttore appropriato della classe specificata, passando gli
argomenti specificati. Nell'esempio seguente viene illustrato questo problema creando istanze di una Customer
classe che dispone di due costruttori, uno che non accetta parametri e uno che accetta un parametro di stringa:
' For customer2, call the constructor that takes the name of the
' customer as an argument.
Dim customer2 As New Customer("Blue Yonder Airlines")
' With Option Infer set to On, the following declaration declares
' and instantiates a new instance of Customer.
Dim customer4 = New Customer("Coho Winery")
Poiché le matrici sono classi, New può creare una nuova istanza di matrice, come illustrato nell'esempio
seguente:
' The following example requires that Option Infer be set to On.
Dim intArray3() = New Integer() {6, 7, 8}
Il Common Language Runtime (CLR) genera un OutOfMemoryException errore se la memoria disponibile non è
sufficiente per creare la nuova istanza.
NOTE
La New parola chiave viene usata anche negli elenchi di parametri di tipo per specificare che il tipo fornito deve esporre
un costruttore senza parametri accessibile. Per ulteriori informazioni sui parametri e i vincoli di tipo, vedere Type list.
Per creare una routine del costruttore per una classe, impostare il nome di una Sub stored procedure sulla New
parola chiave. Per altre informazioni, vedere durata degli oggetti: come creare ed eliminare definitivamente
oggetti.
È possibile usare la parola chiave New nei contesti seguenti:
Istruzione Dim
Di
Istruzione Sub
Vedi anche
OutOfMemoryException
Parole chiave
Type List
Generic Types in Visual Basic
Durata degli oggetti: come creare e distruggere oggetti
Operatore Not (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Esegue una negazione logica su un' Boolean espressione o una negazione bit per bit su un'espressione
numerica.
Sintassi
result = Not expression
Parti
result
Obbligatorio. Qualsiasi espressione Boolean o numerica.
expression
Obbligatorio. Qualsiasi espressione Boolean o numerica.
Commenti
Per Boolean le espressioni, nella tabella seguente viene illustrato il modo in cui result viene determinato.
SE EXPRESSION È IL VA LO RE DI RESULT È
True False
False True
Per le espressioni numeriche, l' Not operatore inverte i valori di bit di qualsiasi espressione numerica e imposta
il bit corrispondente in in result base alla tabella seguente.
SE IL B IT IN EXPRESSION È IL B IT IN RESULT È
1 0
0 1
NOTE
Poiché gli operatori logici e bit per bit hanno una precedenza inferiore rispetto ad altri operatori aritmetici e relazionali,
qualsiasi operazione bit per bit deve essere racchiusa tra parentesi per garantire un'esecuzione accurata.
Tipi di dati
Per una negazione booleana, il tipo di dati del risultato è Boolean . Per una negazione bit per bit, il tipo di dati
del risultato è identico a quello di expression . Tuttavia, se Expression è Decimal , il risultato è Long .
Overload
L' Not operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire
il comportamento quando il relativo operando ha il tipo della classe o della struttura. Se il codice usa questo
operatore su una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito.
Per altre informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' Not operatore per eseguire la negazione logica su un' Boolean
espressione. Il risultato è un Boolean valore che rappresenta l'inverso del valore dell'espressione.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck As Boolean
firstCheck = Not (a > b)
secondCheck = Not (b > a)
Esempio
Nell'esempio seguente viene usato l' Not operatore per eseguire la negazione logica dei singoli bit di
un'espressione numerica. Il bit nel modello di risultato viene impostato sul contrario del bit corrispondente nel
modello di operando, incluso il bit di segno.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (Not a)
secondPattern = (Not b)
thirdPattern = (Not c)
Vedi anche
Operatori logici e bit per bit (Visual Basic)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori logici e bit per bit in Visual Basic
Operatore Or (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Esegue una disgiunzione logica di due Boolean espressioni o una disgiunzione bit per bit di due espressioni
numeriche.
Sintassi
result = expression1 Or expression2
Parti
result
Obbligatorio. Qualsiasi espressione Boolean o numerica. Per Boolean il confronto, result è la disgiunzione
logica inclusiva di due Boolean valori. Per le operazioni bit per bit, result è un valore numerico che
rappresenta la disgiunzione bit per bit inclusiva di due modelli di bit numerici.
expression1
Obbligatorio. Qualsiasi espressione Boolean o numerica.
expression2
Obbligatorio. Qualsiasi espressione Boolean o numerica.
Commenti
Per il Boolean confronto, result è False se e solo se expression1 e expression2 restituiscono False . Nella
tabella seguente viene illustrato come result determinare.
NOTE
In un Boolean confronto, l' Or operatore valuta sempre entrambe le espressioni, che possono includere l'esecuzione di
chiamate di routine. L' operatore OrElse esegue un corto circuito, il che significa che se expression1 è True ,
expression2 non viene valutato.
Per le operazioni bit per bit, l' Or operatore esegue un confronto bit per bit dei bit posizionati in modo identico
in due espressioni numeriche e imposta il bit corrispondente in in result base alla tabella seguente.
SE IL B IT IN EXPRESSION1 È E B IT IN EXPRESSION2 È IL B IT IN RESULT È
1 1 1
1 0 1
0 1 1
0 0 0
NOTE
Poiché gli operatori logici e bit per bit hanno una precedenza inferiore rispetto ad altri operatori aritmetici e relazionali,
qualsiasi operazione bit per bit deve essere racchiusa tra parentesi per garantire un'esecuzione accurata.
Tipi di dati
Se gli operandi sono costituiti da un'espressione e da un' Boolean espressione numerica, Visual Basic converte
l' Boolean espressione in un valore numerico (-1 per True e 0 per False ) ed esegue un'operazione bit per bit.
Per un Boolean confronto, il tipo di dati del risultato è Boolean . Per un confronto bit per bit, il tipo di dati result
è un tipo numerico appropriato per i tipi di dati di expression1 e expression2 . Vedere la tabella "confronto
relazionale e bit per bit" in tipi di dati dei risultati dell'operatore.
Overload
L' Or operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire il
comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore
su una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre
informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' Or operatore per eseguire una disgiunzione logica inclusiva su due
espressioni. Il risultato è un Boolean valore che indica se una delle due espressioni è True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Or b > c
secondCheck = b > a Or b > c
thirdCheck = b > a Or c > b
Esempio
Nell'esempio seguente viene usato l' Or operatore per eseguire la disgiunzione logica inclusiva sui singoli bit di
due espressioni numeriche. Il bit nel modello di risultato viene impostato se uno dei bit corrispondenti negli
operandi è impostato su 1.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a Or b)
secondPattern = (a Or c)
thirdPattern = (b Or c)
Vedi anche
Operatori logici e bit per bit (Visual Basic)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatore OrElse
Operatori logici e bit per bit in Visual Basic
Operatore OrElse (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Sintassi
result = expression1 OrElse expression2
Parti
result
Obbligatorio. Qualsiasi espressione Boolean .
expression1
Obbligatorio. Qualsiasi espressione Boolean .
expression2
Obbligatorio. Qualsiasi espressione Boolean .
Commenti
Un'operazione logica viene detta corto circuito se il codice compilato può ignorare la valutazione di
un'espressione a seconda del risultato di un'altra espressione. Se il risultato della prima espressione valutata
determina il risultato finale dell'operazione, non è necessario valutare la seconda espressione, perché non è in
grado di modificare il risultato finale. Il cortocircuito può migliorare le prestazioni se l'espressione bypassata è
complessa o se implica chiamate di routine.
Se una o entrambe le espressioni restituiscono True , result è True . Nella tabella seguente viene illustrato
come result determinare.
Tipi di dati
L' OrElse operatore viene definito solo per il tipo di dati Boolean. Visual Basic converte ogni operando come
necessario in Boolean prima di valutare l'espressione. Se il risultato viene assegnato a un tipo numerico, Visual
Basic lo converte da Boolean a tale tipo, in modo che False diventi 0 e True diventi -1 . Per altre
informazioni, vedere conversioni di tipi booleani.
Overload
L' operatore OR e l' operatore IsTrue possono essere sottoposto a Overload, il che significa che una classe o una
struttura può ridefinire il comportamento quando un operando ha il tipo della classe o della struttura.
L'overload degli Or operatori e IsTrue influiscono sul comportamento dell' OrElse operatore. Se il codice usa
OrElse su una classe o una struttura che esegue l'overload Or di e IsTrue , assicurarsi di comprendere il
comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' OrElse operatore per eseguire la disgiunzione logica di due espressioni. Il
risultato è un Boolean valore che indica se una delle due espressioni è true. Se la prima espressione è True , la
seconda non viene valutata.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b OrElse b > c
secondCheck = b > a OrElse b > c
thirdCheck = b > a OrElse c > b
Nell'esempio precedente vengono prodotti rispettivamente i risultati di True , True e False . Nel calcolo di
firstCheck la seconda espressione non viene valutata perché il primo è già True . Tuttavia, la seconda
espressione viene valutata nel calcolo di secondCheck .
Esempio
Nell'esempio seguente viene illustrata un' If istruzione... Then contenente due chiamate di procedura. Se la
prima chiamata restituisce True , la seconda procedura non viene chiamata. Questo potrebbe produrre risultati
imprevisti se la seconda procedura esegue attività importanti che devono essere sempre eseguite quando viene
eseguita questa sezione del codice.
Vedi anche
Operatori logici e bit per bit (Visual Basic)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatore Or
Operatore IsTrue
Operatori logici e bit per bit in Visual Basic
Sottoespressione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
Sub ( [ parameterlist ] ) statement
- or -
Sub ( [ parameterlist ] )
[ statements ]
End Sub
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Un' espressione lambda è una subroutine che non ha un nome e che esegue una o più istruzioni. È possibile
usare un'espressione lambda ovunque sia possibile usare un tipo delegato, ad eccezione di un argomento di
RemoveHandler . Per altre informazioni sui delegati e sull'uso di espressioni lambda con i delegati, vedere
istruzione Delegate e conversione di delegati rilassati.
Vedi anche
Istruzione Sub
Espressioni lambda
Operatori ed espressioni
Istruzioni
Conversione di tipo relaxed del delegato
Operatore TryCast (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Commenti
Se un tentativo di conversione ha esito negativo CType e viene DirectCast generato un InvalidCastException
errore. Ciò può influire negativamente sulle prestazioni dell'applicazione. TryCast non restituisce nulla, quindi,
anziché dover gestire una possibile eccezione, è necessario testare solo il risultato restituito Nothing .
Usare la TryCast parola chiave nello stesso modo in cui si usano la funzione CType e la parola chiave dell'
Operatore DirectCast . È possibile specificare un'espressione come primo argomento e un tipo in cui convertirla
come secondo argomento. TryCast opera solo sui tipi di riferimento, ad esempio le classi e le interfacce.
Richiede una relazione di ereditarietà o implementazione tra i due tipi. Ciò significa che un tipo deve ereditare
da o implementare l'altro.
Errori ed errori
TryCast genera un errore del compilatore se rileva che non esiste alcuna relazione di ereditarietà o
implementazione. Tuttavia, la mancanza di un errore del compilatore non garantisce una conversione corretta.
Se la conversione desiderata è più restrittiva, potrebbe verificarsi un errore in fase di esecuzione. In tal caso,
TryCast non viene restituito alcunrisultato.
REL A Z IO N E T RA
PA RO L A C H IAVE T IP I DI DAT I A RGO M EN T I ERRO RE DI RUN - T IM E
TryCast Solo tipi di riferimento Un tipo deve ereditare da o Non restituisce alcun
implementare l'altro tipo risultato
Esempio
Nell'esempio riportato di seguito viene illustrato come usare TryCast .
Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return obj.ToString() & " does not implement IConvertible"
Else
Return "Type code is " & objAsConvertible.GetTypeCode()
End If
End Function
Vedi anche
Widening and Narrowing Conversions
Conversioni implicite ed esplicite
Operatore TypeOf (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Verifica se il tipo di runtime del risultato di un'espressione è compatibile con il tipo specificato.
Sintassi
result = TypeOf objectexpression Is typename
Parti
result
Restituita. Valore Boolean .
objectexpression
Obbligatorio. Qualsiasi espressione che restituisce un tipo riferimento.
typename
Obbligatorio. Qualsiasi nome di un tipo di dati.
Commenti
L'operatore TypeOf determina se il tipo di objectexpression in fase di esecuzione è compatibile con typename .
La compatibilità dipende dalla categoria del tipo di typename . La tabella seguente illustra come viene
determinata la compatibilità.
Se il tipo di objectexpression in fase di esecuzione soddisfa il criterio di compatibilità, result sarà True . In
caso contrario, result sarà False . Se objectexpression è null, TypeOf ... Is restituisce False e ... IsNot
restituisce True .
TypeOf viene sempre usato con la parola chiave Is per costruire un'espressione TypeOf ... Is oppure con la
parola chiave IsNot per costruire un'espressione TypeOf ... IsNot .
Esempio
Nell'esempio seguente le espressioni TypeOf ... Is vengono usate per verificare la compatibilità dei tipi di due
variabili di riferimento a un oggetto con diversi tipi di dati.
La variabile refInteger presenta un tipo in fase di esecuzione Integer . È compatibile con Integer , ma non
con Double . La variabile refForm presenta un tipo in fase di esecuzione Form. È compatibile con Form perché si
tratta del relativo tipo, con Control perché Form eredita da Control e con IComponent perché Form eredita da
Component, che implementa IComponent. refForm non è invece compatibile con Label.
Vedi anche
Operatore Is
Operatore IsNot
Comparison Operators in Visual Basic
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori ed espressioni
Operatore Xor (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Esegue un'esclusione logica di due Boolean espressioni oppure un'esclusione bit per bit su due espressioni
numeriche.
Sintassi
result = expression1 Xor expression2
Parti
result
Obbligatorio. Qualsiasi Boolean variabile o variabile numerica. Per il confronto booleano, result è l'esclusione
logica (disgiunzione logica esclusiva) di due Boolean valori. Per le operazioni bit per bit, result è un valore
numerico che rappresenta l'esclusione bit per bit (disgiunzione bit per bit esclusiva) di due modelli di bit
numerici.
expression1
Obbligatorio. Qualsiasi espressione Boolean o numerica.
expression2
Obbligatorio. Qualsiasi espressione Boolean o numerica.
Commenti
Per il confronto booleano, result è True se e solo se esattamente uno di expression1 e expression2
restituisce True . Ovvero, se e solo se expression1 e expression2 restituiscono valori opposti Boolean . Nella
tabella seguente viene illustrato come result determinare.
NOTE
In un confronto booleano, l' Xor operatore valuta sempre entrambe le espressioni, che possono includere l'esecuzione di
chiamate di routine. Non esiste alcuna controparte di corto circuito di Xor , perché il risultato dipende sempre da
entrambi gli operandi. Per gli operatori logici di corto circuito , vedere operatore AndAlso e operatore OrElse.
Per le operazioni bit per bit, l' Xor operatore esegue un confronto bit per bit dei bit posizionati in modo identico
in due espressioni numeriche e imposta il bit corrispondente in in result base alla tabella seguente.
1 1 0
1 0 1
0 1 1
0 0 0
NOTE
Poiché gli operatori logici e bit per bit hanno una precedenza inferiore rispetto ad altri operatori aritmetici e relazionali,
qualsiasi operazione bit per bit deve essere racchiusa tra parentesi per garantire un'esecuzione accurata.
Ad esempio, 5 Xor 3 è 6. Per verificarne il motivo, convertire 5 e 3 nelle rispettive rappresentazioni binarie, 101
e 011. Usare quindi la tabella precedente per determinare che 101 Xor 011 è 110, ovvero la rappresentazione
binaria del numero decimale 6.
Tipi di dati
Se gli operandi sono costituiti da un'espressione e da un' Boolean espressione numerica, Visual Basic converte
l' Boolean espressione in un valore numerico (-1 per True e 0 per False ) ed esegue un'operazione bit per bit.
Per un Boolean confronto, il tipo di dati del risultato è Boolean . Per un confronto bit per bit, il tipo di dati result
è un tipo numerico appropriato per i tipi di dati di expression1 e expression2 . Vedere la tabella "confronto
relazionale e bit per bit" in tipi di dati dei risultati dell'operatore.
Overload
L' Xor operatore può essere sottoposto a Overload, il che significa che una classe o una struttura può ridefinire
il comportamento quando un operando ha il tipo della classe o della struttura. Se il codice usa questo operatore
su una classe o una struttura di questo tipo, verificare di aver compreso il comportamento ridefinito. Per altre
informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene usato l' Xor operatore per eseguire l'esclusione logica (disgiunzione logica
esclusiva) su due espressioni. Il risultato è un Boolean valore che indica se una delle espressioni è esattamente
True .
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Xor b > c
secondCheck = b > a Xor b > c
thirdCheck = b > a Xor c > b
Vedi anche
Operatori logici e bit per bit (Visual Basic)
Precedenza tra gli operatori in Visual Basic
Elenco degli operatori per funzionalità
Operatori logici e bit per bit in Visual Basic
Proprietà (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
In questa pagina sono elencate le proprietà che sono membri dei moduli Visual Basic. Le altre proprietà che
sono membri di oggetti Visual Basic specifici sono elencate in oggetti.
Vedi anche
Riferimenti al linguaggio Visual Basic
Query (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Visual Basic consente di creare espressioni LINQ (Language-Integrated query) nel codice.
Clausola Take
Descrive la Take clausola, che restituisce un numero specificato di elementi contigui dall'inizio di una raccolta.
Clausola Take While
Descrive la Take While clausola, che include gli elementi di una raccolta, purché una condizione specificata sia
true e ignori gli elementi rimanenti.
Clausola WHERE
Descrive la Where clausola che specifica una condizione di filtro per una query.
Vedi anche
LINQ
Introduzione a LINQ in Visual Basic
Clausola Aggregate (Visual Basic)
05/03/2021 • 11 minutes to read • Edit Online
Sintassi
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
La Aggregate clausola può essere utilizzata per includere funzioni di aggregazione nelle query. Le funzioni di
aggregazione eseguono controlli e calcoli su un set di valori e restituiscono un singolo valore. È possibile
accedere al valore calcolato utilizzando un membro del tipo di risultato della query. Le funzioni di aggregazione
standard che è possibile utilizzare sono le All Any funzioni,, Average , Count , LongCount , Max , Min e Sum
. Queste funzioni hanno familiarità con gli sviluppatori che hanno familiarità con le aggregazioni di SQL. Sono
descritti nella sezione seguente di questo argomento.
Il risultato di una funzione di aggregazione viene incluso nel risultato della query come campo del tipo di
risultato della query. È possibile fornire un alias per il risultato della funzione di aggregazione per specificare il
nome del membro del tipo di risultato della query che conterrà il valore di aggregazione. Se non viene
specificato alcun alias, viene usato il nome della funzione di aggregazione.
La Aggregate clausola può iniziare una query oppure può essere inclusa come clausola aggiuntiva in una query.
Se la Aggregate clausola inizia una query, il risultato è un singolo valore che rappresenta il risultato della
funzione di aggregazione specificata nella Into clausola. Se nella clausola viene specificata più di una funzione
di aggregazione Into , la query restituisce un singolo tipo con una proprietà separata per fare riferimento al
risultato di ogni funzione di aggregazione nella Into clausola. Se la Aggregate clausola viene inclusa come
clausola aggiuntiva in una query, il tipo restituito nella raccolta di query avrà una proprietà separata per fare
riferimento al risultato di ogni funzione di aggregazione nella Into clausola.
Funzioni di aggregazione
Di seguito sono riportate le funzioni di aggregazione standard che è possibile utilizzare con la Aggregate
clausola.
Tutti
Restituisce true se tutti gli elementi della raccolta soddisfano una condizione specificata; in caso contrario,
restituisce false . Di seguito è riportato un esempio:
Qualsiasi
Restituisce true se un elemento della raccolta soddisfa una condizione specificata; in caso contrario, restituisce
false . Di seguito è riportato un esempio:
Media
Calcola la media di tutti gli elementi della raccolta o calcola un'espressione fornita per tutti gli elementi della
raccolta. Di seguito è riportato un esempio:
Conteggio
Conta il numero di elementi nella raccolta. È possibile specificare un'espressione facoltativa Boolean per contare
solo il numero di elementi della raccolta che soddisfano una condizione. Di seguito è riportato un esempio:
Group
Fa riferimento ai risultati della query raggruppati come risultato di una Group By clausola o Group Join . La
Group funzione è valida solo nella Into clausola di una Group By clausola o Group Join . Per ulteriori
informazioni ed esempi, vedere clausola Group by e clausola Group Join.
LongCount
Conta il numero di elementi nella raccolta. È possibile specificare un'espressione facoltativa Boolean per contare
solo il numero di elementi della raccolta che soddisfano una condizione. Restituisce il risultato come Long . Per
un esempio, vedere la Count funzione Aggregate.
Max
Calcola il valore massimo dalla raccolta oppure calcola un'espressione fornita per tutti gli elementi della raccolta.
Di seguito è riportato un esempio:
Min
Calcola il valore minimo dalla raccolta oppure calcola un'espressione fornita per tutti gli elementi della raccolta.
Di seguito è riportato un esempio:
Sum
Calcola la somma di tutti gli elementi della raccolta o calcola un'espressione fornita per tutti gli elementi della
raccolta. Di seguito è riportato un esempio:
Esempio
Nell'esempio seguente viene illustrato come utilizzare la Aggregate clausola per applicare funzioni di
aggregazione a un risultato della query.
Dim customerOrderTotal =
From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total), MaxOrder = Max(order.Total),
MinOrder = Min(order.Total), Avg = Average(order.Total)
Imports System.Runtime.CompilerServices
Module UserDefinedAggregates
Return medianValue
End Function
' "Cast" the collection of generic items as type Double and call the
' Median() method to calculate the median value.
<Extension()>
Function Median(Of T)(ByVal values As IEnumerable(Of T),
ByVal selector As Func(Of T, Double)) As Double
Return (From element In values Select selector(element)).Median()
End Function
End Module
Nell'esempio seguente vengono illustrate query di esempio che chiamano la Median funzione di aggregazione
su una raccolta di tipo Integer e una raccolta di tipo Double . La query che chiama la Median funzione di
aggregazione sulla raccolta di tipo Double chiama l'overload del Median metodo che accetta come input una
raccolta di tipo Double . La query che chiama la Median funzione di aggregazione sulla raccolta di tipo Integer
chiama l'overload generico del Median metodo.
Module Module1
Sub Main()
Dim numbers1 = {1, 2, 3, 4, 5}
End Module
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola WHERE
Clausola Group by
Clausola Distinct (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Limita i valori della variabile di intervallo corrente per eliminare i valori duplicati nelle clausole di query
successive.
Sintassi
Distinct
Osservazioni
È possibile utilizzare la Distinct clausola per restituire un elenco di elementi univoci. La Distinct clausola fa in
modo che la query ignori i risultati di query duplicati. La Distinct clausola si applica ai valori duplicati per tutti
i campi restituiti specificati dalla Select clausola. Se non Select viene specificata alcuna clausola, la Distinct
clausola viene applicata alla variabile di intervallo per la query identificata nella From clausola. Se la variabile di
intervallo non è un tipo non modificabile, la query ignorerà solo il risultato di una query se tutti i membri del
tipo corrispondono a un risultato della query esistente.
Esempio
L'espressione di query seguente unisce un elenco di clienti e un elenco di ordini dei clienti. La Distinct clausola
viene inclusa per restituire un elenco di nomi di clienti e date degli ordini univoci.
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola from
Clausola SELECT
Clausola WHERE
Clausola Equals (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Commenti
La Equals parola chiave viene usata nei contesti seguenti:
Clausola Group Join
Clausola join
Vedi anche
Parole chiave
Clausola From (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Specifica una o più variabili di intervallo e una raccolta su cui eseguire una query.
Sintassi
From element [ As type ] In collection [ _ ]
[, element2 [ As type2 ] In collection2 [, ... ] ]
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
La From clausola viene utilizzata per identificare i dati di origine per una query e le variabili utilizzate per fare
riferimento a un elemento della raccolta di origine. Queste variabili sono denominate variabili di intervallo. La
From clausola è obbligatoria per una query, tranne quando la Aggregate clausola viene utilizzata per
identificare una query che restituisce solo i risultati aggregati. Per ulteriori informazioni, vedere clausola
Aggregate.
È possibile specificare più From clausole in una query per identificare più raccolte da unire in join. Quando si
specificano più raccolte, vengono ripetute in modo indipendente oppure è possibile unirle se sono correlate. È
possibile unire le raccolte in modo implicito usando la Select clausola oppure in modo esplicito usando le
Join Group Join clausole o. In alternativa, è possibile specificare più variabili di intervallo e raccolte in una
singola From clausola, con ogni variabile di intervallo e raccolta correlate separate dalle altre da una virgola.
Nell'esempio di codice seguente vengono illustrate entrambe le opzioni di sintassi per la From clausola.
Ogni From clausola può essere seguita da qualsiasi combinazione di clausole di query aggiuntive per
perfezionare la query. È possibile affinare la query nei modi seguenti:
Combinare più raccolte in modo implicito usando From le Select clausole e oppure in modo esplicito
usando Join le Group Join clausole o.
Utilizzare la Where clausola per filtrare il risultato della query.
Ordinare il risultato usando la Order By clausola.
Raggruppare i risultati simili utilizzando la Group By clausola.
Utilizzare la Aggregate clausola per identificare le funzioni di aggregazione da valutare per l'intero
risultato della query.
Utilizzare la Let clausola per introdurre una variabile di iterazione il cui valore è determinato da
un'espressione anziché da una raccolta.
Utilizzare la Distinct clausola per ignorare i risultati della query duplicati.
Identificare le parti del risultato da restituire utilizzando le Skip Take clausole,, Skip While e
Take While .
Esempio
Nell'espressione di query seguente viene utilizzata una From clausola per dichiarare una variabile di intervallo
cust per ogni Customer oggetto della customers raccolta. La Where clausola usa la variabile di intervallo per
limitare l'output ai clienti dall'area specificata. Il For Each ciclo Visualizza il nome della società per ogni cliente
nel risultato della query.
Vedi anche
Query
Introduzione a LINQ in Visual Basic
Istruzione For Each...Next
Istruzione For...Next
Clausola SELECT
Clausola WHERE
Aggregate Clause
Clausola Distinct
Clausola join
Clausola Group Join
Clausola ORDER BY
Clausola Let
Clausola Skip
Clausola Take
Clausola Skip While
Clausola Take While
Clausola Group By (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Raggruppa gli elementi di un risultato della query. Può essere usata anche per applicare funzioni di
aggregazione a ogni gruppo. L'operazione di raggruppamento è basata su una o più chiavi.
Sintassi
Group [ listField1 [, listField2 [...] ] By keyExp1 [, keyExp2 [...] ]
Into aggregateList
Parti
listField1 , listField2
facoltativo. Uno o più campi della variabile o delle variabili di query che identificano in modo esplicito i
campi da includere nel risultato raggruppato. Se non sono specificati campi, tutti i campi della variabile o
delle variabili di query vengono inclusi nel risultato raggruppato.
keyExp1
Obbligatorio. Espressione che identifica la chiave da usare per determinare i gruppi di elementi. È
possibile specificare più di una chiave per specificare una chiave composta.
keyExp2
facoltativo. Uno o più tasti aggiuntivi che vengono combinati con keyExp1 per creare una chiave
composta.
aggregateList
Obbligatorio. Una o più espressioni che identificano come vengono aggregati i gruppi. Per identificare un
nome di membro per i risultati raggruppati, usare la parola chiave Group , che può essere in uno dei
seguenti formati:
Into Group
-oppure-
Commenti
È possibile usare la clausola Group By per suddividere i risultati di una query in gruppi. Il raggruppamento è
basato su una chiave o una chiave composta costituita da più chiavi. Gli elementi associati ai valori della chiave
corrispondenti vengono inclusi nello stesso gruppo.
Per identificare il nome del membro che viene usato per fare riferimento al gruppo, usare il parametro
aggregateList della clausola Into e la parola chiave Group . È anche possibile includere funzioni di
aggregazione nella clausola Into per calcolare i valori per gli elementi raggruppati. Per un elenco di funzioni di
aggregazione standard, vedere Aggregate Clause.
Esempio
L'esempio di codice seguente raggruppa un elenco di clienti in base alla relativa posizione (paese/area
geografica) e fornisce un conteggio dei clienti in ogni gruppo. I risultati vengono ordinati in base al nome del
paese/area geografica. I risultati raggruppati vengono ordinati in base al nome della città.
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola ORDER BY
Aggregate Clause
Clausola Group Join
Clausola Group Join (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Combina due raccolte in un'unica raccolta gerarchica. L'operazione di join è basata sulle chiavi corrispondenti.
Sintassi
Group Join element [As type] In collection _
On key1 Equals key2 [ And key3 Equals key4 [... ] ] _
Into expressionList
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
La Group Join clausola combina due raccolte in base ai valori di chiave corrispondenti delle raccolte da unire in
join. La raccolta risultante può contenere un membro che fa riferimento a una raccolta di elementi della seconda
raccolta che corrispondono al valore della chiave della prima raccolta. È inoltre possibile specificare le funzioni di
aggregazione da applicare agli elementi raggruppati della seconda raccolta. Per informazioni sulle funzioni di
aggregazione, vedere clausola Aggregate.
Si consideri, ad esempio, una raccolta di Manager e una raccolta di dipendenti. Gli elementi di entrambe le
raccolte hanno una proprietà ManagerID che identifica i dipendenti che riferiscono a un particolare
responsabile. I risultati di un'operazione di join contengono un risultato per ogni responsabile e dipendente con
un valore ManagerID corrispondente. I risultati di un' Group Join operazione contengono l'elenco completo dei
Manager. Ogni risultato di gestione avrà un membro che fa riferimento all'elenco di dipendenti che
corrispondevano al responsabile specifico.
La raccolta risultante da un' Group Join operazione può contenere qualsiasi combinazione di valori della
raccolta identificata nella From clausola e le espressioni identificate nella Into clausola della clausola
Group Join . Per ulteriori informazioni sulle espressioni valide per la Into clausola, vedere clausola Aggregate.
Un' Group Join operazione restituirà tutti i risultati della raccolta identificata sul lato sinistro dell' Group Join
operatore. Questo vale anche se non sono presenti corrispondenze nella raccolta da unire in join. Questa
operazione è simile a LEFT OUTER JOIN in SQL.
È possibile usare la Join clausola per combinare le raccolte in un'unica raccolta. Equivale a un INNER JOIN in
SQL.
Esempio
L'esempio di codice seguente unisce due raccolte usando la Group Join clausola.
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola join
Clausola WHERE
Clausola Group by
Clausola Join (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Combina due raccolte in un'unica raccolta. L'operazione di join è basata sulle chiavi corrispondenti e usa l'
Equals operatore.
Sintassi
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
Parti
element Obbligatorio. Variabile di controllo per la raccolta da unire in join.
collection
Obbligatorio. Raccolta da combinare con la raccolta identificata sul lato sinistro dell' Join operatore. Una Join
clausola può essere annidata in un'altra Join clausola o in una Group Join clausola.
joinClause
facoltativo. Una o più Join clausole aggiuntive per perfezionare ulteriormente la query.
groupJoinClause
facoltativo. Una o più Group Join clausole aggiuntive per perfezionare ulteriormente la query.
key1 Equals key2
Obbligatorio. Identifica le chiavi per le raccolte da unire in join. Equals Per confrontare le chiavi delle raccolte da
unire in join, è necessario usare l'operatore. È possibile combinare le condizioni di join usando l' And operatore
per identificare più chiavi. key1 deve derivare dalla raccolta a sinistra dell' Join operatore. key2 deve derivare
dalla raccolta a destra dell' Join operatore.
Le chiavi utilizzate nella condizione di join possono essere espressioni che includono più di un elemento della
raccolta. Ogni espressione chiave può tuttavia contenere solo elementi della rispettiva raccolta.
Commenti
La Join clausola combina due raccolte in base ai valori di chiave corrispondenti delle raccolte da unire in join.
La raccolta risultante può contenere qualsiasi combinazione di valori della raccolta identificata sul lato sinistro
dell' Join operatore e della raccolta identificata nella Join clausola. La query restituirà solo i risultati per i
quali viene soddisfatta la condizione specificata dall' Equals operatore. Equivale a un INNER JOIN in SQL.
È possibile utilizzare più Join clausole in una query per unire due o più raccolte in un'unica raccolta.
È possibile eseguire un join implicito per combinare raccolte senza la Join clausola. A tale scopo, includere più
In clausole nella From clausola e specificare una Where clausola che identifichi le chiavi che si desidera
utilizzare per il join.
È possibile usare la Group Join clausola per combinare le raccolte in un'unica raccolta gerarchica. Questa
operazione è simile a LEFT OUTER JOIN in SQL.
Esempio
Nell'esempio di codice seguente viene eseguito un join implicito per combinare un elenco di clienti con i relativi
ordini.
Esempio
L'esempio di codice seguente unisce due raccolte usando la Join clausola.
Imports System.Diagnostics
Imports System.Security.Permissions
<SecurityPermission(SecurityAction.Demand)>
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription)
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "explorer",
.Description = "Windows Explorer"})
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "winlogon",
.Description = "Windows Logon"})
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "cmd",
.Description = "Command Window"})
processDescriptions.Add(New ProcessDescription With {
.ProcessName = "iexplore",
.Description = "Internet Explorer"})
End Class
Esempio
Nell'esempio di codice seguente vengono unite due raccolte utilizzando la Join clausola con due colonne
chiave.
Imports System.Diagnostics
Imports System.Security.Permissions
<SecurityPermission(SecurityAction.Demand)>
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription2)
End Class
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola Group Join
Clausola WHERE
Clausola Let (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
Let variable = expression [, ...]
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
La Let clausola consente di calcolare i valori per ogni risultato della query e di farvi riferimento tramite un
alias. L'alias può essere utilizzato in altre clausole, ad esempio la Where clausola. La Let clausola consente di
creare un'istruzione di query più semplice da leggere poiché è possibile specificare un alias per una clausola
Expression inclusa nella query e sostituire l'alias ogni volta che viene utilizzata la clausola Expression.
È possibile includere un numero qualsiasi variable di expression assegnazioni e nella Let clausola. Separare
ogni assegnazione con una virgola (,).
Esempio
Nell'esempio di codice seguente viene usata la Let clausola per calcolare uno sconto del 10% sui prodotti.
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola WHERE
Clausola Order By (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Sintassi
Order By orderExp1 [ Ascending | Descending ] [, orderExp2 [...] ]
Parti
orderExp1
Obbligatorio. Uno o più campi dal risultato della query corrente che identificano la modalità di ordinamento dei
valori restituiti. I nomi dei campi devono essere separati da virgole (,). È possibile identificare ogni campo come
ordinato in ordine crescente o decrescente usando le Ascending Descending parole chiave o. Se non Ascending
Descending viene specificata alcuna parola chiave o, l'ordinamento predefinito è crescente. Ai campi di
ordinamento viene assegnata la precedenza da sinistra a destra.
Commenti
È possibile utilizzare la Order By clausola per ordinare i risultati di una query. La Order By clausola può
ordinare solo un risultato in base alla variabile di intervallo per l'ambito corrente. Ad esempio, la Select
clausola introduce un nuovo ambito in un'espressione di query con nuove variabili di iterazione per tale ambito.
Le variabili di intervallo definite prima Select di una clausola in una query non sono disponibili dopo la
Select clausola. Se pertanto si desidera ordinare i risultati in base a un campo non disponibile nella Select
clausola, è necessario inserire la Order By clausola prima della Select clausola. Un esempio di quando è
necessario eseguire questa operazione è quando si desidera ordinare la query in base a campi che non vengono
restituiti come parte del risultato.
L'ordine crescente e decrescente per un campo è determinato dall'implementazione dell' IComparable
interfaccia per il tipo di dati del campo. Se il tipo di dati non implementa l' IComparable interfaccia,
l'ordinamento viene ignorato.
Esempio
Nell'espressione di query seguente viene utilizzata una From clausola per dichiarare una variabile di intervallo
book per la books raccolta. La Order By clausola Ordina il risultato della query in base al prezzo in ordine
crescente (impostazione predefinita). I libri con lo stesso prezzo vengono ordinati in base al titolo in ordine
crescente. La Select clausola seleziona le Title Price proprietà e come valori restituiti dalla query.
Esempio
Nell'espressione di query seguente viene utilizzata la Order By clausola per ordinare il risultato della query in
base al prezzo in ordine decrescente. I libri con lo stesso prezzo vengono ordinati in base al titolo in ordine
crescente.
Esempio
Nell'espressione di query seguente viene utilizzata una Select clausola per selezionare titolo, prezzo, data di
pubblicazione e autore. Quindi compila i Title Price campi,, PublishDate e Author della variabile di
intervallo per il nuovo ambito. La Order By clausola Ordina la nuova variabile di intervallo in base al nome
dell'autore, al titolo del libro e quindi al prezzo. Ogni colonna viene ordinata in base all'ordine predefinito
(ascendente).
Dim bookOrders =
From book In books
Select book.Title, book.Price, book.PublishDate, book.Author
Order By Author, Title, Price
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola Select (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Sintassi
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
Parti
var1
facoltativo. Alias che può essere utilizzato per fare riferimento ai risultati dell'espressione di colonna.
fieldName1
Obbligatorio. Nome del campo da restituire nel risultato della query.
Commenti
È possibile utilizzare la Select clausola per definire i risultati che devono essere restituiti da una query. Ciò
consente di definire i membri di un nuovo tipo anonimo creato da una query o di destinare i membri di un tipo
denominato restituito da una query. La Select clausola non è obbligatoria per una query. Se non Select viene
specificata alcuna clausola, la query restituirà un tipo basato su tutti i membri delle variabili di intervallo
identificate per l'ambito corrente. Per ulteriori informazioni, vedere tipi anonimi. Quando una query crea un tipo
denominato, restituirà un risultato di tipo IEnumerable<T> dove T è il tipo creato.
La Select clausola può fare riferimento a qualsiasi variabile nell'ambito corrente. Sono incluse le variabili di
intervallo identificate nella From clausola o nelle From clausole. Include anche tutte le nuove variabili create
con un alias dalle Aggregate Let Group By clausole,, o o Group Join dalle variabili di una Select clausola
precedente nell'espressione di query. La Select clausola può includere anche valori statici. Nell'esempio di
codice seguente, ad esempio, viene illustrata un'espressione di query in cui la Select clausola definisce il
risultato della query come nuovo tipo anonimo con quattro membri: ProductName , Price , Discount e
DiscountedPrice . I ProductName Price valori dei membri e vengono ricavati dalla variabile di intervallo di
prodotti definita nella From clausola. Il DiscountedPrice valore del membro viene calcolato nella Let clausola.
Il Discount membro è un valore statico.
La Select clausola introduce un nuovo set di variabili di intervallo per le clausole di query successive e le
variabili di intervallo precedenti non sono più nell'ambito. L'ultima Select clausola in un'espressione di query
determina il valore restituito dalla query. Ad esempio, la query seguente restituisce il nome e l'ID dell'azienda
per ogni ordine cliente per il quale il totale supera 500. La prima Select clausola identifica le variabili di
intervallo per la Where clausola e la seconda Select clausola. La seconda Select clausola identifica i valori
restituiti dalla query come un nuovo tipo anonimo.
Se la Select clausola identifica un singolo elemento da restituire, l'espressione di query restituisce una raccolta
del tipo di quel singolo elemento. Se la Select clausola identifica più elementi da restituire, l'espressione di
query restituisce una raccolta di un nuovo tipo anonimo, in base agli elementi selezionati. Ad esempio, le due
query seguenti restituiscono raccolte di due tipi diversi in base alla Select clausola. La prima query restituisce
una raccolta di nomi di società come stringhe. La seconda query restituisce una raccolta di Customer oggetti
popolati con i nomi e le informazioni sull'indirizzo della società.
Esempio
Nell'espressione di query seguente viene utilizzata una From clausola per dichiarare una variabile di intervallo
cust per la customers raccolta. La Select clausola seleziona il nome e il valore ID del cliente e popola
CompanyName le CustomerID colonne e della nuova variabile di intervallo. L' For Each istruzione esegue il ciclo
di ogni oggetto restituito e visualizza le CompanyName CustomerID colonne e per ogni record.
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola from
Clausola WHERE
Clausola ORDER BY
Tipi anonimi
Clausola Skip (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Ignora un numero specificato di elementi in una raccolta e quindi restituisce gli elementi rimanenti.
Sintassi
Skip count
Parti
count
Obbligatorio. Valore o espressione che restituisce il numero di elementi della sequenza da ignorare.
Commenti
La Skip clausola fa in modo che una query ignori gli elementi all'inizio di un elenco di risultati e restituisca gli
elementi rimanenti. Il numero di elementi da ignorare è identificato dal count parametro.
È possibile utilizzare la Skip clausola con la Take clausola per restituire un intervallo di dati da qualsiasi
segmento di una query. A tale scopo, passare l'indice del primo elemento dell'intervallo alla Skip clausola e la
dimensione dell'intervallo alla Take clausola.
Quando si utilizza la Skip clausola in una query, potrebbe essere necessario assicurarsi che i risultati vengano
restituiti in un ordine che consentirà alla Skip clausola di ignorare i risultati desiderati. Per ulteriori
informazioni sull'ordinamento dei risultati di query, vedere clausola ORDER BY.
È possibile usare la SkipWhile clausola per specificare che solo determinati elementi vengono ignorati, a
seconda della condizione specificata.
Esempio
Nell'esempio di codice seguente viene utilizzata la Skip clausola insieme alla Take clausola per restituire dati
da una query in pagine. La GetCustomers funzione utilizza la Skip clausola per ignorare i clienti nell'elenco fino
al valore di indice iniziale fornito e utilizza la Take clausola per restituire una pagina di clienti a partire da tale
valore di indice.
Public Sub PagingSample()
Dim pageNumber As Integer = 0
Dim pageSize As Integer = 10
Console.WriteLine(vbCrLf)
pageNumber += 1
customersPage = GetCustomers(pageNumber * pageSize, pageSize)
Loop
End Sub
Return returnCustomers
End Function
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola ORDER BY
Clausola Skip While
Clausola Take
Clausola Skip While (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Ignora gli elementi in una raccolta finché una condizione specificata è true e quindi restituisce gli elementi
rimanenti.
Sintassi
Skip While expression
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
La Skip While clausola ignora gli elementi dall'inizio di un risultato della query fino a quando l'oggetto
specificato expression restituisce false . expression Una volta restituito false , la query restituisce tutti gli
elementi rimanenti. expression Viene ignorato per i risultati rimanenti.
La clausola è Skip While diversa dalla Where clausola in quanto la Where clausola può essere usata per
escludere tutti gli elementi da una query che non soddisfano una determinata condizione. La Skip While
clausola esclude gli elementi solo fino alla prima volta che la condizione non viene soddisfatta. La Skip While
clausola è particolarmente utile quando si lavora con un risultato di query ordinato.
È possibile ignorare un numero specifico di risultati dall'inizio di un risultato della query usando la Skip
clausola.
Esempio
Nell'esempio di codice seguente viene utilizzata la Skip While clausola per ignorare i risultati fino a quando
non viene trovato il primo cliente del Stati Uniti.
Public Sub SkipWhileSample()
Dim customers = GetCustomerList()
' Return customers starting from the first U.S. customer encountered.
Dim customerList = From cust In customers
Order By cust.Country
Skip While IsInternationalCustomer(cust)
Return True
End Function
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola Skip
Clausola Take While
Clausola WHERE
Clausola Take (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
Take count
Parti
count
Obbligatorio. Valore o espressione che restituisce il numero di elementi della sequenza da restituire.
Commenti
La Take clausola fa in modo che una query includa un numero specificato di elementi contigui dall'inizio di un
elenco di risultati. Il numero di elementi da includere è specificato dal count parametro.
È possibile utilizzare la Take clausola con la Skip clausola per restituire un intervallo di dati da qualsiasi
segmento di una query. A tale scopo, passare l'indice del primo elemento dell'intervallo alla Skip clausola e la
dimensione dell'intervallo alla Take clausola. In questo caso, la Take clausola deve essere specificata dopo la
Skip clausola.
Quando si utilizza la Take clausola in una query, potrebbe essere necessario assicurarsi che i risultati vengano
restituiti in un ordine che consenta alla Take clausola di includere i risultati desiderati. Per ulteriori informazioni
sull'ordinamento dei risultati di query, vedere clausola ORDER BY.
È possibile utilizzare la TakeWhile clausola per specificare che vengano restituiti solo determinati elementi, a
seconda della condizione specificata.
Esempio
Nell'esempio di codice seguente viene utilizzata la Take clausola insieme alla Skip clausola per restituire dati
da una query in pagine. La funzione GetCustomers utilizza la Skip clausola per ignorare i clienti nell'elenco fino
al valore di indice iniziale fornito e utilizza la Take clausola per restituire una pagina di clienti a partire da tale
valore di indice.
Public Sub PagingSample()
Dim pageNumber As Integer = 0
Dim pageSize As Integer = 10
Console.WriteLine(vbCrLf)
pageNumber += 1
customersPage = GetCustomers(pageNumber * pageSize, pageSize)
Loop
End Sub
Return returnCustomers
End Function
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola ORDER BY
Clausola Take While
Clausola Skip
Clausola Take While (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Include gli elementi in una raccolta finché una condizione specificata è true e quindi ignora gli elementi
rimanenti.
Sintassi
Take While expression
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
La Take While clausola include gli elementi dall'inizio di un risultato della query fino a quando l'oggetto
specificato expression restituisce false . Una volta expression restituiti false , la query ignorerà tutti gli
elementi rimanenti. expression Viene ignorato per i risultati rimanenti.
La clausola è Take While diversa dalla Where clausola in quanto la Where clausola può essere utilizzata per
includere tutti gli elementi di una query che soddisfano una determinata condizione. La Take While clausola
include gli elementi solo fino alla prima volta che la condizione non viene soddisfatta. La Take While clausola è
particolarmente utile quando si lavora con un risultato di query ordinato.
Esempio
Nell'esempio di codice seguente viene utilizzata la Take While clausola per recuperare i risultati fino a quando
non viene trovato il primo cliente senza ordini.
Public Sub TakeWhileSample()
Dim customers = GetCustomerList()
' Return customers until the first customer with no orders is found.
Dim customersWithOrders = From cust In customers
Order By cust.Orders.Count Descending
Take While HasOrders(cust)
Return False
End Function
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola SELECT
Clausola from
Clausola Take
Clausola Skip While
Clausola WHERE
Clausola Where (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Sintassi
Where condition
Parti
condition
Obbligatorio. Espressione che determina se i valori per l'elemento corrente nella raccolta sono inclusi nella
raccolta di output. L'espressione deve restituire un Boolean valore o l'equivalente di un Boolean valore. Se la
condizione restituisce True , l'elemento viene incluso nel risultato della query. in caso contrario, l'elemento
viene escluso dal risultato della query.
Commenti
La Where clausola consente di filtrare i dati della query selezionando solo gli elementi che soddisfano
determinati criteri. Gli elementi i cui valori determinano che la Where clausola restituisca True sono inclusi nel
risultato della query; gli altri elementi sono esclusi. L'espressione utilizzata in una Where clausola deve restituire
un oggetto Boolean o l'equivalente di un Boolean , ad esempio un Integer che restituisce False quando il
valore è zero. È possibile combinare più espressioni in una Where clausola utilizzando operatori logici come
And ,, Or AndAlso , OrElse , Is e IsNot .
Per impostazione predefinita, le espressioni di query non vengono valutate fino a quando non vengono
accessibili, ad esempio quando sono associate a dati o iterate in un For ciclo. Di conseguenza, la Where
clausola non viene valutata fino a quando non viene eseguito l'accesso alla query. Se i valori sono esterni alla
query utilizzata nella Where clausola, verificare che nel momento in cui viene eseguita la query venga utilizzato
il valore appropriato nella Where clausola. Per ulteriori informazioni sull'esecuzione di query, vedere scrittura
della prima query LINQ.
È possibile chiamare le funzioni all'interno Where di una clausola per eseguire un calcolo o un'operazione su un
valore dell'elemento corrente nella raccolta. La chiamata di una funzione in una Where clausola può causare
l'esecuzione immediata della query quando viene definita al posto di quando viene eseguito l'accesso. Per
ulteriori informazioni sull'esecuzione di query, vedere scrittura della prima query LINQ.
Esempio
Nell'espressione di query seguente viene utilizzata una From clausola per dichiarare una variabile di intervallo
cust per ogni Customer oggetto della customers raccolta. La Where clausola usa la variabile di intervallo per
limitare l'output ai clienti dall'area specificata. Il For Each ciclo Visualizza il nome della società per ogni cliente
nel risultato della query.
Sub DisplayCustomersForRegion(ByVal customers As List(Of Customer),
ByVal region As String)
Esempio
Nell'esempio seguente vengono utilizzati gli And Or operatori logici e nella Where clausola.
' Get a list of elements that have an atomic number from 12 to 14,
' or that have a name that ends in "r".
Dim subset = From theElement In elements
Where (theElement.AtomicNumber >= 12 And theElement.AtomicNumber < 15) _
Or theElement.Name.EndsWith("r")
Order By theElement.Name
' Output:
' Aluminum 13
' Magnesium 12
' Silicon 14
' Sulfur 16
End Sub
Vedi anche
Introduzione a LINQ in Visual Basic
Query
Clausola from
Clausola SELECT
Istruzione For Each...Next
Istruzioni (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Gli argomenti di questa sezione contengono tabelle con le istruzioni eseguibili e di dichiarazione di Visual Basic
e con elenchi importanti applicabili a numerose istruzioni.
Sezioni correlate
Riferimenti al linguaggio Visual Basic
Istruzioni A-E
05/03/2021 • 2 minutes to read • Edit Online
Nella tabella seguente è incluso un elenco di istruzioni del linguaggio Visual Basic.
Esci
Vedi anche
Istruzioni F-P
Istruzioni Q-Z
Riferimenti al linguaggio Visual Basic
Istruzione AddHandler
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
AddHandler event, AddressOf eventhandler
Parti
Commenti
Le AddHandler RemoveHandler istruzioni e consentono di avviare e arrestare la gestione degli eventi in qualsiasi
momento durante l'esecuzione del programma.
La firma della eventhandler stored procedure deve corrispondere alla firma dell'evento event .
La parola chiave Handles e l'istruzione AddHandler consentono entrambe di specificare che quelle particolari
routine gestiscono particolari eventi, ma esistono alcune differenze. L'istruzione AddHandler connette le routine
agli eventi in fase di esecuzione. Usare la parola chiave Handles quando si definisce una routine, per specificare
che questa gestisce un particolare evento. Per ulteriori informazioni, vedere handle.
NOTE
Per gli eventi personalizzati, l' AddHandler istruzione richiama la funzione di AddHandler accesso dell'evento. Per
ulteriori informazioni sugli eventi personalizzati, vedere istruzione Event.
Esempio
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Vedere anche
Istruzione RemoveHandler
Selettori
Istruzione Event
Eventi
Istruzione Call (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Trasferisce il controllo a una Function Sub procedura di libreria a collegamento dinamico (dll), o.
Sintassi
[ Call ] procedureName [ (argumentList) ]
Parti
Commenti
È possibile utilizzare la Call parola chiave quando si chiama una routine. Per la maggior parte delle chiamate di
procedura, non è necessario usare questa parola chiave.
In genere si usa la Call parola chiave quando l'espressione chiamata non inizia con un identificatore. Call
Non è consigliabile usare la parola chiave per altri usi.
Se la procedura restituisce un valore, l' Call istruzione lo ignora.
Esempio
Nel codice seguente vengono illustrati due esempi Call in cui la parola chiave è necessaria per chiamare una
routine. In entrambi gli esempi, l'espressione chiamata non inizia con un identificatore.
Sub TestCall()
Call (Sub() Console.Write("Hello"))()
Class TheClass
Public Sub ShowText()
Console.Write(" World")
End Sub
End Class
Vedi anche
Istruzione Function
Istruzione Sub
Declare Statement
Espressioni lambda
Istruzione Class (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Dichiara il nome di una classe e introduce la definizione di variabili, proprietà, eventi e routine inclusi nella
classe.
Sintassi
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
Parti
T ERM IN E DEF IN IZ IO N E
- Pubblico
- Protetto
- Amico
- Privata
- Amico protetto
- Privato protetto
Commenti
Un' Class istruzione definisce un nuovo tipo di dati. Una classe è un blocco predefinito fondamentale della
programmazione orientata a oggetti (OOP). Per altre informazioni, vedere oggetti e classi.
È possibile usare Class solo a livello di spazio dei nomi o di modulo. Ciò significa che il contesto di
dichiarazione per una classe deve essere un file di origine, uno spazio dei nomi, una classe, una struttura, un
modulo o un'interfaccia e non può essere una routine o un blocco. Per altre informazioni, vedere Contesti delle
dichiarazioni e livelli di accesso predefiniti.
Ogni istanza di una classe ha una durata indipendente da tutte le altre istanze. Questa durata inizia quando
viene creata da una nuova clausola operator o da una funzione come CreateObject . Termina quando tutte le
variabili che puntano all'istanza sono state impostate su Nothing o su istanze di altre classi.
Per impostazione predefinita, le classi accedono a Friend . È possibile modificare i livelli di accesso con i
modificatori di accesso. Per altre informazioni, vedere livelli di accesso in Visual Basic.
Regole
Annidamento. È possibile definire una classe all'interno di un'altra. La classe esterna viene chiamata
classe che la contiene e la classe interna è chiamata classe annidata.
Ereditarietà. Se la classe utilizza l' istruzione Inherits, è possibile specificare solo una classe o
un'interfaccia di base. Una classe non può ereditare da più di un elemento.
Una classe non può ereditare da un'altra classe con un livello di accesso più restrittivo. Una classe, ad
esempio, Public non può ereditare da una Friend classe.
Una classe non può ereditare da una classe annidata al suo interno.
Implementazione. Se la classe utilizza l' istruzione Implements, è necessario implementare ogni
membro definito da ogni interfaccia specificata in interfacenames . Un'eccezione a questa operazione è la
riimplementazione di un membro della classe base. Per ulteriori informazioni, vedere la sezione relativa
alla riimplementazione in Implements.
Proprietà predefinita. Una classe può specificare al massimo una proprietà come proprietà predefinita.
Per ulteriori informazioni, vedere default.
Comportamento
Livello di accesso. All'interno di una classe, è possibile dichiarare ogni membro con il proprio livello di
accesso. I membri della classe hanno per impostazione predefinita l'accesso pubblico , eccetto le variabili
e le costanti, per impostazione predefinita l'accesso privato . Quando una classe dispone di un accesso
più limitato di uno dei relativi membri, il livello di accesso della classe ha la precedenza.
Ambito. Una classe è nell'ambito di tutti gli spazi dei nomi, la classe, la struttura o il modulo che lo
contiene.
L'ambito di ogni membro della classe è l'intera classe.
Vita. Visual Basic non supporta classi statiche. L'equivalente funzionale di una classe statica viene fornito
da un modulo. Per ulteriori informazioni, vedere istruzione Module.
I membri della classe hanno durate a seconda della modalità e della posizione in cui vengono dichiarati.
Per ulteriori informazioni, vedere Lifetime in Visual Basic.
Qualificazione. Il codice esterno a una classe deve qualificare il nome di un membro con il nome della
classe.
Se il codice all'interno di una classe annidata crea un riferimento non qualificato a un elemento di
programmazione, Visual Basic cerca prima l'elemento nella classe annidata, quindi nella classe che lo
contiene e così via fino all'elemento contenitore più esterno.
Classi e moduli
Questi elementi presentano molte analogie, ma esistono anche alcune differenze importanti.
Terminologia. Le versioni precedenti di Visual Basic riconoscono due tipi di moduli: moduli di classe (file
con estensione CLS) e moduli standard (file con estensione BAS). La versione corrente chiama queste
classi e moduli, rispettivamente.
Membri condivisi. È possibile controllare se un membro di una classe è un membro condiviso o di
istanza.
Orientamento dell'oggetto. Le classi sono orientate agli oggetti, ma i moduli non lo sono. È possibile
creare una o più istanze di una classe. Per altre informazioni, vedere oggetti e classi.
Esempio
Nell'esempio seguente viene utilizzata un' Class istruzione per definire una classe e diversi membri.
Class BankAccount
Shared interestRate As Decimal
Private accountNumber As String
Private accountBalance As Decimal
Public holdOnAccount As Boolean = False
Vedi anche
Oggetti e classi
Strutture e classi
Istruzione Interface
Istruzione Module
Property Statement
Durata degli oggetti: come creare e distruggere oggetti
Generic Types in Visual Basic
Procedura: Usare una classe generica
Istruzione Const (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Sintassi
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Const constantlist
Parti
attributelist
facoltativo. Elenco di attributi che si applicano a tutte le costanti dichiarate in questa istruzione. Vedere l' elenco
degli attributi tra parentesi angolari (" < " e " > ").
accessmodifier
facoltativo. Usare questa funzione per specificare quale codice può accedere a queste costanti. Può essere public,
protected, Friend, Protected Friend, privateo private protected.
Shadows
facoltativo. Usare questa classe per dichiarare e nascondere un elemento di programmazione in una classe base.
Vedere Shadows.
constantlist
Obbligatorio. Elenco di costanti dichiarate in questa istruzione.
constant [ , constant ... ]
PA RT E DESC RIZ IO N E
Commenti
Se si dispone di un valore che non cambia mai nell'applicazione, è possibile definire una costante denominata e
utilizzarla al posto di un valore letterale. Un nome è più facile da ricordare rispetto a un valore. È possibile
definire la costante una sola volta e usarla in molte posizioni nel codice. Se in una versione successiva è
necessario ridefinire il valore, l' Const istruzione è l'unica posizione necessaria per apportare una modifica.
È possibile usare Const solo a livello di modulo o di procedura. Ciò significa che il contesto di dichiarazione per
una variabile deve essere una classe, una struttura, un modulo, una procedura o un blocco e non può essere un
file di origine, uno spazio dei nomi o un'interfaccia. Per altre informazioni, vedere Contesti delle dichiarazioni e
livelli di accesso predefiniti.
Le costanti locali (all'interno di una procedura) utilizzano per impostazione predefinita l'accesso pubblico e non
è possibile usare alcun modificatore di accesso. Le costanti membro della classe e del modulo (all'esterno di
qualsiasi routine) per impostazione predefinita è l'accesso privato e le costanti membro della struttura vengono
predefinite per l'accesso pubblico. È possibile modificare i livelli di accesso con i modificatori di accesso.
Regole
Contesto della dichiarazione. Una costante dichiarata a livello di modulo, all'esterno di qualsiasi
routine, è una costante membro; si tratta di un membro della classe, della struttura o del modulo che lo
dichiara.
Una costante dichiarata a livello di routine è una costante locale. è locale per la routine o il blocco che lo
dichiara.
Attributi. È possibile applicare attributi solo a costanti membro, non a costanti locali. Un attributo
fornisce informazioni ai metadati dell'assembly, che non è significativo per l'archiviazione temporanea, ad
esempio le costanti locali.
Modificatori. Per impostazione predefinita, tutte le costanti sono Shared , Static e ReadOnly . Non è
possibile usare una di queste parole chiave quando si dichiara una costante.
A livello di procedura, non è possibile usare Shadows o alcun modificatore di accesso per dichiarare
costanti locali.
Più costanti. È possibile dichiarare più costanti nella stessa istruzione di dichiarazione, specificando la
constantname parte per ciascuna di esse. Più costanti sono separate da virgole.
Tipi diversi. È possibile specificare tipi di dati diversi per costanti diverse utilizzando una clausola
separata As per ogni variabile dichiarata. Tuttavia, non è possibile dichiarare più costanti in modo che
siano dello stesso tipo utilizzando una As clausola comune.
Inizializzazione. È necessario inizializzare il valore di ogni costante in constantlist . Usare
initializer per fornire un'espressione da assegnare alla costante. L'espressione può essere costituita da
qualsiasi combinazione di valori letterali, altre costanti già definite e membri di enumerazione già definiti.
Per combinare tali elementi, è possibile utilizzare operatori aritmetici e logici.
Non è possibile usare variabili o funzioni in initializer . Tuttavia, è possibile usare parole chiave di
conversione, ad esempio CByte e CShort . È anche possibile usare AscW se lo si chiama con una
costante String o un Char argomento, poiché può essere valutato in fase di compilazione.
Comportamento
Ambito. Le costanti locali sono accessibili solo dall'interno della procedura o del blocco. Le costanti
membro sono accessibili da qualsiasi punto all'interno della classe, della struttura o del modulo.
Qualificazione. Il codice esterno a una classe, una struttura o un modulo deve qualificare il nome di una
costante membro con il nome della classe, della struttura o del modulo. Il codice esterno a una procedura
o a un blocco non può fare riferimento alle costanti locali all'interno di tale procedura o blocco.
Esempio
Nell'esempio seguente viene utilizzata l' Const istruzione per dichiarare le costanti da utilizzare al posto dei
valori letterali.
Esempio
Se si definisce una costante con tipo Object di dati, il compilatore Visual Basic lo assegna al tipo initializer ,
anziché Object . Nell'esempio seguente la costante naturalLogBase presenta il tipo in fase di esecuzione
Decimal .
Nell'esempio precedente viene utilizzato il ToString metodo sull' Type oggetto restituito dall' operatore GetType,
perché Type non può essere convertito in String utilizzando CStr .
Vedi anche
Asc
AscW
Istruzione Enum
#Const (direttiva)
Istruzione Dim
Istruzione ReDim
Conversioni implicite ed esplicite
Costanti ed enumerazioni
Costanti ed enumerazioni
CString
Istruzione Continue (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
Continue { Do | For | While }
Osservazioni
È possibile trasferire dall'interno di Do un For ciclo, o While all'iterazione successiva del ciclo. Il controllo
passa immediatamente al test della condizione del ciclo, equivalente al trasferimento all' For istruzione o o
While all' Do Loop istruzione o che contiene la Until While clausola o.
È possibile usare in Continue qualsiasi posizione del ciclo che consente i trasferimenti. Le regole che
consentono il trasferimento del controllo sono le stesse dell' istruzione goto.
Se, ad esempio, un ciclo è interamente contenuto all'interno di un blocco, di Try un Catch blocco o di un
Finally blocco, è possibile utilizzare Continue per trasferire il ciclo. Se, invece, la Try struttura... End Try è
contenuta all'interno del ciclo, non è possibile utilizzare Continue per trasferire il controllo fuori dal Finally
blocco ed è possibile utilizzarlo per il trasferimento da un Try blocco o Catch solo se si trasferisce
completamente dalla struttura. Try . End Try ..
Se sono presenti cicli annidati dello stesso tipo, ad esempio un Do ciclo all'interno di un altro Do ciclo, un'
Continue Do istruzione passa all'iterazione successiva del Do ciclo più interno che la contiene. Non è possibile
usare Continue per passare all'iterazione successiva di un ciclo contenitore dello stesso tipo.
Se sono presenti cicli annidati di tipi diversi, ad esempio un Do ciclo all'interno di un For ciclo, è possibile
passare all'iterazione successiva di uno dei due cicli usando Continue Do o Continue For .
Esempio
Nell'esempio di codice seguente viene utilizzata l' Continue While istruzione per passare alla colonna successiva
di una matrice se il divisore è zero. L'oggetto Continue While si trova all'interno di un For ciclo. Trasferisce all'
While col < lastcol istruzione, che è l'iterazione successiva del ciclo più interno While che contiene il For
ciclo.
Dim row, col As Integer
Dim lastrow As Integer = 6
Dim lastcol As Integer = 10
Dim a(,) As Double = New Double(lastrow, lastcol) {}
Dim b(7) As Double
row = -1
While row < lastrow
row += 1
col = -1
While col < lastcol
col += 1
a(row, col) = 0
For i As Integer = 0 To b.GetUpperBound(0)
If b(i) = col Then
Continue While
Else
a(row, col) += (row + b(i)) / (col - b(i))
End If
Next i
End While
End While
Vedi anche
Istruzione Do...Loop
Istruzione For...Next
Istruzione While...End While
Istruzione Try...Catch...Finally
Declare Statement
05/03/2021 • 16 minutes to read • Edit Online
Sintassi
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Sub ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ]
' -or-
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Overloads ] _
Declare [ charsetmodifier ] [ Function ] name Lib "libname" _
[ Alias "aliasname" ] [ ([ parameterlist ]) ] [ As returntype ]
Parti
T ERM IN E DEF IN IZ IO N E
- Pubblico
- Protetto
- Amico
- Privata
- Amico protetto
- Privato protetto
-oppure-
Commenti
In alcuni casi è necessario chiamare una routine definita in un file, ad esempio una DLL o una risorsa di codice,
all'esterno del progetto. Quando si esegue questa operazione, il compilatore Visual Basic non ha accesso alle
informazioni necessarie per chiamare correttamente la stored procedure, ad esempio la posizione in cui si trova
la stored procedure, il modo in cui viene identificata, la sequenza chiamante e il tipo restituito e il set di caratteri
stringa usato. L' Declare istruzione crea un riferimento a una procedura esterna e fornisce le informazioni
necessarie.
Si può usare Declare solo a livello di modulo. Ciò significa che il contesto di dichiarazione per un riferimento
esterno deve essere una classe, una struttura o un modulo e non può essere un file di origine, uno spazio dei
nomi, un'interfaccia, una routine o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di
accesso predefiniti.
Riferimenti esterni per impostazione predefinita l'accesso pubblico . È possibile modificare i livelli di accesso con
i modificatori di accesso.
Regole
Attributi. È possibile applicare attributi a un riferimento esterno. Tutti gli attributi applicati hanno effetto
solo nel progetto e non nel file esterno.
Modificatori. Le procedure esterne sono implicitamente condivise. Non è possibile usare la Shared
parola chiave quando si dichiara un riferimento esterno e non è possibile modificarne lo stato condiviso.
Una procedura esterna non può partecipare all'override, all'implementazione di membri di interfaccia o
alla gestione degli eventi. Di conseguenza, non è possibile usare la Overrides Overridable parola
chiave,, NotOverridable , MustOverride , Implements o Handles in un' Declare istruzione.
Nome della procedura esterna. Non è necessario assegnare a questo riferimento esterno lo stesso
nome (in name ) del nome del punto di ingresso della stored procedure all'interno del file esterno (
aliasname ). È possibile usare una Alias clausola per specificare il nome del punto di ingresso. Questo
può essere utile se la procedura esterna ha lo stesso nome di un modificatore riservato Visual Basic o di
una variabile, di una routine o di qualsiasi altro elemento di programmazione nello stesso ambito.
NOTE
I nomi dei punti di ingresso nella maggior parte delle dll fanno distinzione tra maiuscole e minuscole
Numero di procedura esterna. In alternativa, è possibile usare una Alias clausola per specificare il
numero ordinale del punto di ingresso all'interno della tabella di esportazione del file esterno. A tale
scopo, si inizia aliasname con un simbolo di cancelletto ( # ). Questo può essere utile se un carattere nel
nome della procedura esterna non è consentito in Visual Basic o se il file esterno Esporta la stored
procedure senza un nome.
NOTE
Se la procedura esterna non è stata scritta per la .NET Framework, è necessario prestare attenzione che i tipi di
dati corrispondano. Se, ad esempio, si dichiara un riferimento esterno a una procedura Visual Basic 6,0 con un
Integer parametro (16 bit in Visual Basic 6,0), è necessario identificare l'argomento corrispondente come
Short nell' Declare istruzione, perché questo è il tipo Integer a 16 bit in Visual Basic. Analogamente, Long ha
una larghezza di dati diversa in Visual Basic 6,0 ed Date è implementata in modo diverso.
NOTE
Il compilatore Visual Basic non verifica che i tipi di dati siano compatibili con quelli della procedura esterna. In caso
di mancata corrispondenza, il Common Language Runtime genera un' MarshalDirectiveException eccezione in fase
di esecuzione.
Tipi di dati predefiniti. Se Option Strict è Off e non si specifica il tipo di dati di un parametro in
parameterlist , il compilatore Visual Basic converte l'argomento corrispondente nel tipo di dati Object.
Analogamente, se non si specifica returntype , il compilatore accetta il tipo di dati restituito come
Object .
NOTE
Poiché si tratta di una procedura esterna che potrebbe essere stata scritta su una piattaforma diversa, è pericoloso
creare ipotesi sui tipi di dati o per consentirne l'impostazione predefinita. È molto più sicuro specificare il tipo di
dati di ogni parametro e del valore restituito, se presente. Questa operazione migliora inoltre la leggibilità del
codice.
Comportamento
Ambito. Un riferimento esterno è nell'ambito di tutta la classe, la struttura o il modulo.
Vita. Un riferimento esterno ha la stessa durata della classe, della struttura o del modulo in cui è
dichiarata.
Chiamata a una routine esterna. È possibile chiamare una routine esterna nello stesso modo in cui si
chiama una Function routine o, Sub usandola in un'espressione se restituisce un valore o
specificandone il valore in un' istruzione Call se non restituisce un valore.
Gli argomenti vengono passati alla procedura esterna esattamente come specificato parameterlist nell'
Declare istruzione. Non prendere in considerazione il modo in cui i parametri sono stati originariamente
dichiarati nel file esterno. Analogamente, se è presente un valore restituito, utilizzarlo esattamente come
specificato da returntype nell' Declare istruzione.
Set di caratteri. È possibile specificare in charsetmodifier che modo Visual Basic deve effettuare il
marshalling delle stringhe quando chiama la routine esterna. Il Ansi modificatore indica Visual Basic di
effettuare il marshalling di tutte le stringhe in valori ANSI e il Unicode modificatore lo indirizza per
eseguire il marshalling di tutte le stringhe in valori Unicode. Il Auto modificatore indica Visual Basic di
effettuare il marshalling delle stringhe in base alle regole di .NET Framework basate sul riferimento
esterno name o, aliasname se specificato. Il valore predefinito è Ansi .
charsetmodifier specifica anche il modo in cui Visual Basic deve cercare la procedura esterna all'interno
del file esterno. Ansi ed Unicode entrambi Visual Basic direttamente per cercarli senza modificarne il
nome durante la ricerca. Auto indica Visual Basic per determinare il set di caratteri di base della
piattaforma di runtime ed eventualmente modificare il nome della procedura esterna, come indicato di
seguito:
In una piattaforma ANSI, ad esempio Windows 95, Windows 98 o Windows Millennium Edition,
cercare prima la procedura esterna senza modificarne il nome. Se l'operazione ha esito negativo,
aggiungere "A" alla fine del nome della procedura esterna e cercarla nuovamente.
In una piattaforma Unicode, ad esempio Windows NT, Windows 2000 o Windows XP, cercare
prima la procedura esterna senza modificarne il nome. Se l'operazione ha esito negativo,
aggiungere "W" alla fine del nome della procedura esterna e cercarla nuovamente.
Meccanismo. Visual Basic utilizza il meccanismo .NET Framework Platform Invoke (PInvoke) per
risolvere e accedere a procedure esterne. L' Declare istruzione e la DllImportAttribute classe utilizzano
entrambi questo meccanismo automaticamente e non è necessaria alcuna conoscenza di PInvoke. Per
altre informazioni, vedere procedura dettagliata: chiamata delle API di Windows.
IMPORTANT
Se la procedura esterna viene eseguita all'esterno del Common Language Runtime (CLR), si tratta di codice non gestito.
Quando si chiama una procedura di questo tipo, ad esempio una funzione API Windows o un metodo COM, è possibile
esporre l'applicazione ai rischi per la sicurezza. Per altre informazioni, vedere linee guida per la codifica di codice non
gestito.
Esempio
Nell'esempio seguente viene dichiarato un riferimento esterno a una Function routine che restituisce il nome
utente corrente. Chiama quindi la procedura esterna GetUserNameA come parte della getUser procedura.
Esempio
DllImportAttributeFornisce un metodo alternativo per l'utilizzo di funzioni nel codice non gestito. Nell'esempio
seguente viene dichiarata una funzione importata senza usare un' Declare istruzione.
<DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=CharSet.Unicode,
ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
Public Shared Function MoveFile(ByVal src As String,
ByVal dst As String) As Boolean
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to MoveFile to be forwarded to MoveFileW in KERNEL32.DLL.
End Function
Vedi anche
LastDllError
Istruzione Imports (tipo e spazio dei nomi .NET)
Operatore AddressOf
Istruzione Function
Istruzione Sub
Elenco parametri
Istruzione Call
Procedura dettagliata: Chiamata delle API di Windows
Istruzione Delegate
05/03/2021 • 7 minutes to read • Edit Online
Utilizzato per dichiarare un delegato. Un delegato è un tipo di riferimento che fa riferimento a un Shared
metodo di un tipo o a un metodo di istanza di un oggetto. Per creare un'istanza di questa classe delegata è
possibile utilizzare qualsiasi routine con tipi restituiti e parametri corrispondenti. La stored procedure può quindi
essere richiamata in un secondo momento tramite l'istanza del delegato.
Sintassi
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
L' Delegate istruzione definisce il parametro e i tipi restituiti di una classe delegata. Per creare un'istanza di
questa classe delegata è possibile utilizzare qualsiasi routine con i tipi restituiti e i parametri corrispondenti. La
stored procedure può quindi essere richiamata per mezzo dell'istanza del delegato, chiamando il metodo del
delegato Invoke .
I delegati possono essere dichiarati a livello di spazio dei nomi, modulo, classe o struttura, ma non all'interno di
una routine.
Ogni classe delegata definisce un costruttore a cui viene passata la specifica di un metodo dell'oggetto. Un
argomento di un costruttore di delegati deve essere un riferimento a un metodo o a un'espressione lambda.
Per specificare un riferimento a un metodo, usare la sintassi seguente:
AddressOf [ expression .] methodname
Il tipo in fase di compilazione dell'elemento expression deve essere il nome di una classe o un'interfaccia
contenente un metodo con il nome specificato la cui firma corrisponde a quella della classe delegata. Il metodo
methodname può essere o un metodo condiviso o un metodo di istanza. methodname non è un elemento
facoltativo, anche se si crea un delegato per il metodo predefinito della classe.
Per specificare un'espressione lambda, usare la sintassi seguente:
Function ([ parm As type , parm2 As type2 , ...]) expression
La firma della funzione deve corrispondere a quella del tipo delegato. Per ulteriori informazioni sulle espressioni
lambda, vedere espressioni lambda.
Per altre informazioni sui delegati, vedere Delegati.
Esempio
Nell'esempio seguente viene utilizzata l' Delegate istruzione per dichiarare un delegato per l'utilizzo di due
numeri e la restituzione di un numero. Il DelegateTest metodo accetta un'istanza di un delegato di questo tipo e
la usa per operare su coppie di numeri.
Function AddNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x + y
End Function
Function SubtractNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x - y
End Function
Sub DelegateTest(
ByVal x As Double,
ByVal op As MathOperator,
ByVal y As Double
)
Dim ret As Double
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
End Sub
Vedi anche
Operatore AddressOf
Di
Delegati
Procedura: Usare una classe generica
Generic Types in Visual Basic
Covarianza e controvarianza
In
Out
Istruzione Dim (Visual Basic)
05/03/2021 • 23 minutes to read • Edit Online
Sintassi
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Parti
attributelist
facoltativo. Specifica che si tratta di variabili oggetto che fanno riferimento a istanze di una classe in
grado di generare eventi. Vedere WithEvents.
variablelist
PA RT E DESC RIZ IO N E
Commenti
Il compilatore Visual Basic usa l' Dim istruzione per determinare il tipo di dati della variabile e altre
informazioni, ad esempio il codice che può accedere alla variabile. Nell'esempio seguente viene dichiarata una
variabile che conterrà un Integer valore.
È possibile specificare qualsiasi tipo di dati o il nome di un'enumerazione, una struttura, una classe o
un'interfaccia.
Per un tipo riferimento, usare la New parola chiave per creare una nuova istanza della classe o della struttura
specificata dal tipo di dati. Se si usa New , non si usa un'espressione di inizializzazione. Vengono invece forniti gli
argomenti, se necessari, al costruttore della classe da cui si crea la variabile.
È possibile dichiarare una variabile in una routine, un blocco, una classe, una struttura o un modulo. Non è
possibile dichiarare una variabile in un file di origine, uno spazio dei nomi o un'interfaccia. Per altre
informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.
Una variabile dichiarata a livello di modulo, all'esterno di qualsiasi routine, è una variabile membro o un campo.
Le variabili membro sono nell'ambito della classe, della struttura o del modulo. Una variabile dichiarata a livello
di routine è una variabile locale. Le variabili locali si trovano nell'ambito solo all'interno della routine o del
blocco.
I modificatori di accesso seguenti vengono utilizzati per dichiarare le variabili all'esterno di una routine: Public
,, Protected Friend , Protected Friend e Private . Per altre informazioni, vedere livelli di accesso in Visual
Basic.
La parola chiave è facoltativa e in genere omessa se si specifica uno dei modificatori seguenti: Public ,,
Dim
Protected Friend , Protected Friend , Private , Shared , Shadows , Static , ReadOnly o WithEvents .
Se Option Explicit è on (impostazione predefinita), il compilatore richiede una dichiarazione per ogni variabile
utilizzata. Per altre informazioni, vedere istruzione Option Explicit.
Se viene specificato un inizializzatore e non viene specificato un tipo di dati in una As clausola, viene utilizzata l'
inferenza del tipo per dedurre il tipo di dati dall'inizializzatore. Nell'esempio seguente, sia num1 che num2 sono
fortemente tipizzati come numeri interi. Nella seconda dichiarazione, l'inferenza del tipo deduce il tipo dal valore
3.
L'inferenza del tipo si applica a livello di routine. Non si applica all'esterno di una routine in una classe, una
struttura, un modulo o un'interfaccia. Per ulteriori informazioni sull'inferenza del tipo, vedere l' istruzione Option
deduce e l' inferenza del tipo locale.
Per informazioni su cosa accade quando un tipo di dati o un inizializzatore non viene specificato, vedere valori e
tipi di dati predefiniti più avanti in questo argomento.
È possibile utilizzare un inizializzatore di oggetto per dichiarare istanze di tipi denominati e anonimi. Il codice
seguente crea un'istanza di una Student classe e usa un inizializzatore di oggetto per inizializzare le proprietà.
Se si dichiara più di una variabile con una As clausola, non è possibile fornire un inizializzatore per quel gruppo
di variabili.
È possibile specificare tipi di dati diversi per variabili diverse utilizzando una As clausola separata per ogni
variabile dichiarata. Ogni variabile accetta il tipo di dati specificato nella prima As clausola rilevata dopo la
relativa variablename parte.
Matrici
È possibile dichiarare una variabile in modo che contenga una matrice, che può includere più valori. Per
specificare che una variabile include una matrice, attenersi variablename immediatamente alle parentesi. Per
altre informazioni sulle matrici, vedere Matrici.
È possibile specificare il limite inferiore e superiore di ogni dimensione di una matrice. A tale scopo, includere un
oggetto boundslist all'interno delle parentesi. Per ogni dimensione, boundslist specifica il limite superiore e,
facoltativamente, il limite inferiore. Il limite inferiore è sempre zero, indipendentemente dal fatto che sia
specificato o meno. Ogni indice può variare da zero al valore del limite superiore.
Le due istruzioni seguenti sono equivalenti. Ogni istruzione dichiara una matrice di 21 Integer elementi.
Quando si accede alla matrice, l'indice può variare da 0 a 20.
Nell'istruzione seguente viene dichiarata una matrice bidimensionale di tipo Double . La matrice include 4 righe
(3 + 1) di 6 colonne (5 + 1) ognuna. Si noti che un limite superiore rappresenta il valore massimo possibile per
l'indice e non la lunghezza della dimensione. La lunghezza della dimensione è il limite superiore più uno.
Se la matrice ha più di una dimensione, è necessario includere virgole tra le parentesi per indicare il numero di
dimensioni.
È possibile dichiarare una matrice di lunghezza zero dichiarando una delle dimensioni della matrice come-1.
Una variabile che contiene una matrice di lunghezza zero non ha il valore Nothing . Le matrici di lunghezza zero
sono richieste da alcune funzioni Common Language Runtime. Se si tenta di accedere a una matrice di questo
tipo, si verifica un'eccezione in fase di esecuzione. Per altre informazioni, vedere Matrici.
È possibile inizializzare i valori di una matrice usando un valore letterale di matrice. A tale scopo, racchiudere i
valori di inizializzazione tra parentesi graffe ( {} ).
Per le matrici multidimensionali, l'inizializzazione di ogni dimensione separata è racchiusa tra parentesi graffe
nella dimensione esterna. Gli elementi vengono specificati in ordine di riga.
IN IZ IA L IZ Z ATO RE
T IP O DI DAT I SP EC IF IC ATO ? SP EC IF IC ATO ? ESEM P IO RISULTATO
Se Option Strict è
abilitato, si verifica un errore
in fase di compilazione.
IN IZ IA L IZ Z ATO RE
T IP O DI DAT I SP EC IF IC ATO ? SP EC IF IC ATO ? ESEM P IO RISULTATO
Se le istruzioni
Option Infer e
Option Strict sono
disabilitate, il tipo di dati
accettato dalla variabile è
Object .
Se Option Infer è
disabilitato e
Option Strict è abilitato,
si verifica un errore in fase
di compilazione.
Se si specifica un tipo di dati ma non si specifica un inizializzatore, Visual Basic inizializza la variabile sul valore
predefinito per il tipo di dati. Nella tabella seguente vengono illustrati i valori di inizializzazione predefiniti.
Char Binario 0
Boolean False
Ogni elemento di una struttura viene inizializzato come se fosse una variabile separata. Se si dichiara la
lunghezza di una matrice senza inizializzarne gli elementi, ogni elemento viene inizializzato come se fosse una
variabile separata.
In una classe o una struttura, la La prima volta che la stored procedure Quando il programma interrompe
procedura è Shared viene chiamata su un'istanza specifica o l'esecuzione
sulla classe o sulla struttura stessa
In una classe o una struttura, la La prima volta che la stored procedure Quando l'istanza viene rilasciata per
procedura non è Shared viene chiamata su un'istanza specifica Garbage Collection (GC)
Attributi e modificatori
È possibile applicare attributi solo alle variabili membro e non alle variabili locali. Un attributo fornisce
informazioni ai metadati dell'assembly, che non è significativo per l'archiviazione temporanea, ad esempio le
variabili locali.
A livello di modulo, non è possibile usare il Static modificatore per dichiarare le variabili membro. A livello di
procedura, non è possibile usare Shared , Shadows , ReadOnly , WithEvents o qualsiasi modificatore di accesso
per dichiarare le variabili locali.
È possibile specificare quale codice può accedere a una variabile fornendo un oggetto accessmodifier . Le
variabili membro della classe e del modulo (all'esterno di qualsiasi routine) sono predefinite per l'accesso
privato e le variabili membro della struttura sono predefinite per l'accesso pubblico. È possibile modificare i
livelli di accesso con i modificatori di accesso. Non è possibile usare i modificatori di accesso per le variabili
locali (all'interno di una routine).
È possibile specificare WithEvents solo sulle variabili membro, non sulle variabili locali all'interno di una routine.
Se si specifica WithEvents , il tipo di dati della variabile deve essere un tipo di classe specifico, non Object . Non
è possibile dichiarare una matrice con WithEvents . Per ulteriori informazioni sugli eventi, vedere eventi.
NOTE
Il codice esterno a una classe, una struttura o un modulo deve qualificare il nome di una variabile membro con il nome
della classe, della struttura o del modulo. Il codice esterno a una procedura o a un blocco non può fare riferimento ad
alcuna variabile locale all'interno di tale procedura o blocco.
Esempio
Nell'esempio seguente vengono dichiarate le variabili utilizzando l' Dim istruzione con varie opzioni.
Esempio
Nell'esempio seguente vengono elencati i numeri primi compresi tra 1 e 30. L'ambito delle variabili locali è
descritto nei commenti del codice.
Public Sub ListPrimes()
' The sb variable can be accessed only
' within the ListPrimes procedure.
Dim sb As New System.Text.StringBuilder()
Debug.WriteLine(sb.ToString)
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Return True
End If
End Function
Esempio
Nell'esempio seguente la speedValue variabile viene dichiarata a livello di classe. La Private parola chiave
viene usata per dichiarare la variabile. Alla variabile è possibile accedere da qualsiasi routine della Car classe.
Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
' The speedValue variable can be accessed by
' any procedure in the Car class.
Private speedValue As Integer = 0
Vedi anche
Istruzione Const
Istruzione ReDim
Istruzione Option Explicit
Option Infer (istruzione)
Option Strict Statement
Compilazione (pagina), Creazione progetti (Visual Basic)
Dichiarazione di variabile
Matrici
Inizializzatori di oggetto: tipi denominati e tipi anonimi
Tipi anonimi
Inizializzatori di oggetto: tipi denominati e tipi anonimi
Procedura: dichiarare un oggetto utilizzando un inizializzatore di oggetto
Inferenza del tipo di variabile locale
Istruzione Do...Loop (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Ripete un blocco di istruzioni mentre una Boolean condizione è True o finché la condizione non diventa True .
Sintassi
Do { While | Until } condition
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
' -or-
Do
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Utilizzare una Do...Loop struttura quando si desidera ripetere un set di istruzioni un numero indefinito di volte,
fino a quando non viene soddisfatta una condizione. Se si desidera ripetere le istruzioni impostando il numero
di volte, per... L'istruzione successiva è in genere una scelta migliore.
È possibile utilizzare While o Until per specificare condition , ma non entrambi.
È possibile eseguire il test condition solo una volta, sia all'inizio che alla fine del ciclo. Se si verifica condition
all'inizio del ciclo (nell' Do istruzione), il ciclo potrebbe non essere eseguito neanche una volta. Se si esegue il
test alla fine del ciclo (nell' Loop istruzione), il ciclo viene sempre eseguito almeno una volta.
La condizione viene in genere generata da un confronto di due valori, ma può essere qualsiasi espressione che
restituisce un valore booleano di tipo di dati ( True o False ). Sono inclusi i valori di altri tipi di dati, ad
esempio i tipi numerici, che sono stati convertiti in Boolean .
È possibile annidare Do cicli inserendo un ciclo all'interno di un altro. È anche possibile annidare diversi tipi di
strutture di controllo tra loro. Per altre informazioni, vedere strutture di controlli annidati.
NOTE
La Do...Loop struttura offre una maggiore flessibilità rispetto al tempo... End While , perché consente di decidere se
terminare il ciclo quando viene condition interrotto True o quando diventa prima True . Consente inoltre di
eseguire il test condition sia all'inizio che alla fine del ciclo.
Esci da do
L'istruzione Exit Do può fornire un metodo alternativo per uscire da Do…Loop . Exit Do trasferisce
immediatamente il controllo all'istruzione che segue l' Loop istruzione.
Exit Do viene spesso usato dopo la valutazione di una determinata condizione, ad esempio in una
If...Then...Else struttura. Potrebbe essere necessario uscire da un ciclo se viene rilevata una condizione che
rende superfluo o Impossibile continuare l'iterazione, ad esempio un valore errato o una richiesta di
terminazione. Un uso di Exit Do è quello di verificare la presenza di una condizione che può causare un ciclo
infinito, ovvero un ciclo che può eseguire un numero di volte elevato o infinito. È possibile utilizzare Exit Do
per eseguire l'escape del ciclo.
È possibile includere qualsiasi numero di Exit Do istruzioni in un punto qualsiasi di un oggetto Do…Loop .
Quando viene utilizzato all'interno Do di cicli annidati, Exit Do trasferisce il controllo al di fuori del ciclo più
interno e al successivo livello di nidificazione.
Esempio
Nell'esempio seguente, le istruzioni del ciclo continuano a essere eseguite fino a quando la index variabile non
è maggiore di 10. La Until clausola si trova alla fine del ciclo.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Esempio
Nell'esempio seguente viene utilizzata una While clausola anziché una Until clausola e condition viene
testato all'inizio del ciclo anziché alla fine.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Esempio
Nell'esempio seguente, condition Arresta il ciclo quando la index variabile è maggiore di 100. Nell' If
istruzione del ciclo, tuttavia, l' Exit Do istruzione arresta il ciclo quando la variabile di indice è maggiore di 10.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Esempio
Nell'esempio seguente vengono lette tutte le righe in un file di testo. Il OpenText metodo apre il file e restituisce
un oggetto StreamReader che legge i caratteri. Nella Do...Loop condizione, il Peek metodo di StreamReader
determina se sono presenti caratteri aggiuntivi.
sr.Close()
End If
End Sub
Vedi anche
Strutture di ciclo
Istruzione For...Next
Tipo di dati Boolean
Strutture di controllo annidate
Istruzione Exit
Istruzione While...End While
Istruzione Else (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Introduce un gruppo di istruzioni da eseguire o compilate se non sono stati eseguiti o compilati altri gruppi di
istruzioni condizionali.
Commenti
È possibile usare la parola chiave Else nei contesti seguenti:
Istruzione If...Then...Else
Istruzione Select...Case
#If... Quindi... #Else direttiva
Vedi anche
Parole chiave
Istruzione End
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
End
Osservazioni
È possibile inserire l' End istruzione in un punto qualsiasi di una procedura per forzare l'arresto dell'esecuzione
dell'intera applicazione. End chiude tutti i file aperti con un' Open istruzione e cancella tutte le variabili
dell'applicazione. L'applicazione viene chiusa non appena non è presente alcun altro programma che contiene
riferimenti ai relativi oggetti e nessun codice è in esecuzione.
NOTE
L' End istruzione arresta l'esecuzione del codice improvvisamente e non richiama il Dispose metodo o o Finalize
qualsiasi altro codice Visual Basic. I riferimenti agli oggetti contenuti in altri programmi vengono invalidati. Se End viene
rilevata un'istruzione all'interno di un Try Catch blocco o, il controllo non passa al Finally blocco corrispondente.
L' Stop istruzione sospende l'esecuzione, ma, a differenza di End , non chiude alcun file né cancella alcuna
variabile, a meno che non venga rilevata in un file eseguibile compilato (exe).
Poiché End termina l'applicazione senza dover partecipare a risorse che potrebbero essere aperte, provare a
chiuderla prima di usarla. Se ad esempio nell'applicazione sono presenti moduli aperti, è necessario chiuderli
prima che il controllo raggiunga l' End istruzione.
Si consiglia End di usare con parsimonia e solo quando è necessario arrestare immediatamente. I modi normali
per terminare una procedura (istruzionereturn e istruzione Exit) non solo chiudono la stored procedure, ma
forniscono anche al codice chiamante la possibilità di chiudere in modo corretto. Un'applicazione console, ad
esempio, può semplicemente Return dalla Main procedura.
IMPORTANT
L' End istruzione chiama il Exit metodo della Environment classe nello System spazio dei nomi. Exit richiede l'
UnmanagedCode autorizzazione. In caso contrario, SecurityException si verificherà un errore.
Quando seguito da una parola chiave aggiuntiva, l' <keyword> istruzione End delimita la fine della definizione
della procedura o del blocco appropriato. Ad esempio, End Function termina la definizione di una Function
stored procedure.
Esempio
Nell'esempio seguente viene utilizzata l' End istruzione per terminare l'esecuzione del codice se richiesto
dall'utente.
Sub Form_Load()
Dim answer As MsgBoxResult
answer = MsgBox("Do you want to quit now?", MsgBoxStyle.YesNo)
If answer = MsgBoxResult.Yes Then
MsgBox("Terminating program")
End
End If
End Sub
Vedi anche
SecurityPermissionFlag
Istruzione Stop
<keyword>Istruzione End
Istruzione End <keyword> (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Quando seguito da una parola chiave aggiuntiva, termina la definizione del blocco di istruzioni introdotto da tale
parola chiave.
Sintassi
End AddHandler
End Class
End Enum
End Event
End Function
End Get
End If
End Interface
End Module
End Namespace
End Operator
End Property
End RaiseEvent
End RemoveHandler
End Select
End Set
End Structure
End Sub
End SyncLock
End Try
End While
End With
Parti
PA RT E DESC RIZ IO N E
Direttive
Quando è preceduto da un simbolo di cancelletto ( # ), la End parola chiave termina un blocco di pre-
elaborazione introdotto dalla direttiva corrispondente.
#End ExternalSource
#End If
#End Region
PA RT E DESC RIZ IO N E
Commenti
L' istruzione End, senza una parola chiave aggiuntiva, termina immediatamente l'esecuzione.
Sintassi
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Parti
attributelist
facoltativo. Elenco degli attributi che si applicano a questa enumerazione. È necessario racchiudere l'
elenco degli attributi tra parentesi angolari (" < " e " > ").
L' FlagsAttribute attributo indica che il valore di un'istanza dell'enumerazione può includere più membri
di enumerazione e che ogni membro rappresenta un campo di bit nel valore di enumerazione.
accessmodifier
facoltativo. Specifica il codice che può accedere a questa enumerazione. Può essere uno dei seguenti:
Pubblica
Protetto
Friend
Privata
Protected Friend
Privato protetto
Shadows
facoltativo. Specifica che questa enumerazione dichiara e nasconde un elemento di programmazione con
nome identico o un set di elementi in overload in una classe base. È possibile specificare le
ombreggiature solo sull'enumerazione stessa, non su nessuno dei relativi membri.
enumerationname
Obbligatorio. Nome dell'enumerazione. Per informazioni sui nomi validi, vedere nomi di elementi
dichiarati.
datatype
Obbligatorio. Elenco di costanti membro dichiarate in questa istruzione. Vengono visualizzati più membri
nelle singole righe del codice sorgente.
Ognuno member presenta la sintassi e le parti seguenti:
[<attribute list>] member name [ = initializer ]
PA RT E DESC RIZ IO N E
End Enum
Commenti
Se si dispone di un set di valori non modificabili logicamente correlati tra loro, è possibile definirli insieme in
un'enumerazione. Che fornisce nomi significativi per l'enumerazione e i relativi membri, che sono più facili da
ricordare rispetto ai relativi valori. È quindi possibile usare i membri di enumerazione in molte posizioni nel
codice.
I vantaggi dell'utilizzo delle enumerazioni includono quanto segue:
Riduce gli errori causati dalla trasposizione o dalla digitazione errata dei numeri.
Semplifica la modifica dei valori in futuro.
Semplifica la lettura del codice, il che significa che è meno probabile che vengano introdotti errori.
Garantisce la compatibilità con le edizioni. Se si utilizzano le enumerazioni, è meno probabile che il codice
abbia esito negativo se in futuro qualcuno modifica i valori corrispondenti ai nomi dei membri.
Un'enumerazione ha un nome, un tipo di dati sottostante e un set di membri. Ogni membro rappresenta una
costante.
Un'enumerazione dichiarata a livello di classe, struttura, modulo o interfaccia, all'esterno di qualsiasi routine, è
un' enumerazione di membri. È un membro della classe, struttura, modulo o interfaccia che lo dichiara.
È possibile accedere alle enumerazioni dei membri da qualsiasi posizione all'interno della classe, struttura,
modulo o interfaccia. Il codice esterno a una classe, una struttura o un modulo deve qualificare il nome di
un'enumerazione membro con il nome della classe, della struttura o del modulo. Per evitare di dover utilizzare
nomi completi, è possibile aggiungere un'istruzione Imports al file di origine.
Un'enumerazione dichiarata a livello di spazio dei nomi, all'esterno di qualsiasi classe, struttura, modulo o
interfaccia, è un membro dello spazio dei nomi in cui viene visualizzata.
Il contesto di dichiarazione per un'enumerazione deve essere un file di origine, uno spazio dei nomi, una classe,
una struttura, un modulo o un'interfaccia e non può essere una routine. Per altre informazioni, vedere Contesti
delle dichiarazioni e livelli di accesso predefiniti.
È possibile applicare gli attributi a un'enumerazione nel suo complesso, ma non ai relativi membri
singolarmente. Un attributo fornisce informazioni ai metadati dell'assembly.
Tipo di dati
L' Enum istruzione può dichiarare il tipo di dati di un'enumerazione. Ogni membro accetta il tipo di dati
dell'enumerazione. È possibile specificare Byte , Integer , Long , SByte , Short , UInteger , ULong o
UShort .
Se non si specifica datatype per l'enumerazione, ogni membro accetta il tipo di dati del relativo oggetto
initializer . Se si specificano sia datatype che initializer , il tipo di dati di initializer deve essere
convertibile in datatype . Se né datatype né initializer sono presenti, il tipo di dati predefinito è Integer .
Inizializzazione di membri
L' Enumistruzione consente di inizializzare il contenuto dei membri selezionati in memberlist . Usare
initializer per fornire un'espressione da assegnare al membro.
Se non si specifica initializer per un membro, Visual Basic lo inizializza su zero (se è il primo member in
memberlist ) o su un valore maggiore di uno rispetto a quello dell'oggetto immediatamente precedente
member .
L'espressione fornita in ogni initializer può essere costituita da qualsiasi combinazione di valori letterali, altre
costanti già definite e membri di enumerazione già definiti, incluso un membro precedente di questa
enumerazione. Per combinare tali elementi, è possibile utilizzare operatori aritmetici e logici.
Non è possibile usare variabili o funzioni in initializer . Tuttavia, è possibile usare parole chiave di
conversione, ad esempio CByte e CShort . È anche possibile usare AscW se lo si chiama con una costante
String o un Char argomento, poiché può essere valutato in fase di compilazione.
Le enumerazioni non possono avere valori a virgola mobile. Se a un membro viene assegnato un valore a
virgola mobile ed Option Strict è impostato su on, si verifica un errore del compilatore. Se Option Strict è
off, il valore viene convertito automaticamente nel Enum tipo.
Se il valore di un membro supera l'intervallo consentito per il tipo di dati sottostante o se si Inizializza un
membro sul valore massimo consentito dal tipo di dati sottostante, il compilatore segnala un errore.
Modificatori
Per impostazione predefinita, le enumerazioni di membri di classe, struttura, modulo e interfaccia sono di
accesso pubblico. È possibile modificare i livelli di accesso con i modificatori di accesso. Per impostazione
predefinita, le enumerazioni di membri dello spazio dei nomi sono Friend. È possibile modificare i livelli di
accesso in pubblico, ma non in privato o protetto. Per altre informazioni, vedere livelli di accesso in Visual Basic.
Tutti i membri di enumerazione hanno accesso pubblico e non è possibile usare alcun modificatore di accesso.
Tuttavia, se l'enumerazione stessa ha un livello di accesso più limitato, il livello di accesso di enumerazione
specificato avrà la precedenza.
Per impostazione predefinita, tutte le enumerazioni sono tipi e i rispettivi campi sono costanti. Pertanto Shared
Static ReadOnly non è possibile utilizzare le parole chiave, e quando si dichiara un'enumerazione o i relativi
membri.
size = EggSizeEnum.Medium
' Continue processing...
End Sub
End Class
Esempio
Il metodo nell'esempio seguente è esterno alla Egg classe. Pertanto, EggSizeEnum è completo come
Egg.EggSizeEnum .
Esempio
Nell'esempio seguente viene utilizzata l' Enum istruzione per definire un set correlato di valori costanti
denominati. In questo caso, i valori sono i colori che è possibile scegliere per progettare moduli di immissione
dati per un database.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Esempio
Nell'esempio seguente As viene usata una clausola per specificare l'oggetto datatype di un'enumerazione.
Esempio
Nell'esempio seguente viene illustrato come utilizzare un'enumerazione bit per bit. È possibile assegnare più
valori a un'istanza di un'enumerazione bit per bit. La Enum dichiarazione include l' FlagsAttribute attributo, che
indica che l'enumerazione può essere considerata come un set di flag.
Enum EggSizeEnum
Jumbo
ExtraLarge
Large
Medium
Small
End Enum
Vedi anche
Enum
AscW
Istruzione Const
Istruzione Dim
Conversioni implicite ed esplicite
CString
Costanti ed enumerazioni
Istruzione Erase (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Usato per rilasciare le variabili di matrice e deallocare la memoria usata per i relativi elementi.
Sintassi
Erase arraylist
Parti
arraylist
Obbligatorio. Elenco di variabili di matrice da cancellare. Nel caso di più variabili, è possibile separarle mediante
virgole.
Commenti
L' Erase istruzione può essere visualizzata solo a livello di routine. Ciò significa che è possibile rilasciare matrici
all'interno di una routine ma non a livello di classe o di modulo.
L' Erase istruzione equivale all'assegnazione Nothing a ogni variabile di matrice.
Esempio
Nell'esempio seguente viene utilizzata l' Erase istruzione per cancellare due matrici e liberare la relativa
memoria (rispettivamente gli elementi di archiviazione 1000 e 100). L' ReDim istruzione assegna quindi una
nuova istanza di matrice alla matrice tridimensionale.
Vedi anche
Nothing
Istruzione ReDim
Istruzione Error
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
Error errornumber
Parti
errornumber
Obbligatorio. Può essere qualsiasi numero di errore valido.
Commenti
L' Error istruzione è supportata per la compatibilità con le versioni precedenti. Nel nuovo codice, in particolare
quando si creano oggetti, utilizzare il Err metodo dell'oggetto Raise per generare errori di run-time.
Se errornumber è definito, l' Error istruzione chiama il gestore degli errori dopo che alle proprietà dell' Err
oggetto sono stati assegnati i valori predefiniti seguenti:
P RO P RIETÀ VA LO RE
HelpFile L'unità, il percorso e il nome file completi del file della Guida
Visual Basic appropriato.
HelpContext ID del contesto del file della Guida Visual Basic appropriato
per l'errore corrispondente alla Number Proprietà.
LastDLLError Zero.
Se non esiste alcun gestore di errori o se non ne è abilitato alcuno, viene creato un messaggio di errore che
viene visualizzato dalle Err proprietà dell'oggetto.
NOTE
Alcune applicazioni host Visual Basic non possono creare oggetti. Per determinare se è possibile creare classi e oggetti,
vedere la documentazione dell'applicazione host.
Esempio
In questo esempio viene utilizzata l' Error istruzione per generare il numero di errore 11.
Requisiti
Spazio dei nomi: Microsoft. VisualBasic
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Clear
Err
Raise
Istruzione On Error
Istruzione Resume
Messaggi di errore
Istruzione Event
05/03/2021 • 12 minutes to read • Edit Online
Sintassi
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Parti
PA RT E DESC RIZ IO N E
interface . definedname
Commenti
Dopo aver dichiarato l'evento, usare l'istruzione RaiseEvent per generarlo. Nei frammenti seguenti viene
mostrato un esempio tipico di dichiarazione e generazione di un evento:
NOTE
È possibile dichiarare argomenti per gli eventi analogamente a quanto avviene per gli argomenti di routine, tenendo però
conto che non è possibile specificare per gli eventi argomenti denominati, argomenti ParamArray o argomenti
Optional , né ottenere da essi valori restituiti.
Per gestire un evento è necessario associarlo a una subroutine del gestore eventi mediante l'istruzione Handles
o AddHandler . Le firme della subroutine e dell'evento devono corrispondere. Per gestire un evento condiviso è
necessario usare l'istruzione AddHandler .
Si può usare Event solo a livello di modulo. Ciò significa che il contesto di dichiarazione per un evento deve
essere una classe, una struttura, un modulo o un'interfaccia e non può essere un file di origine, uno spazio dei
nomi, una procedura o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso
predefiniti.
Nella maggior parte dei casi, per dichiarare un evento è possibile usare la prima sintassi nella sezione relativa
alla sintassi di questo argomento. In alcuni scenari è tuttavia necessario disporre di un controllo maggiore sui
dettagli del comportamento dell'evento. L'ultima sintassi nella sezione relativa alla sintassi di questo argomento,
che usa la parola chiave Custom , offre questa possibilità consentendo la definizione di eventi personalizzati. In
un evento personalizzato si specifica esattamente ciò che accade quando il codice aggiunge o rimuove un
gestore eventi a o dall'evento oppure quando il codice genera l'evento. Per esempi, vedere procedura: dichiarare
eventi personalizzati per conservare la memoria e procedura: dichiarare eventi personalizzati per evitare il
blocco.
Esempio
Negli esempi seguenti, gli eventi vengono usati per il conto alla rovescia dei secondi, da 10 a 0. Il codice illustra
numerosi metodi, proprietà e istruzioni correlati agli eventi, inclusa l'istruzione RaiseEvent .
La classe che genera un evento viene definita origine e i metodi che lo elaborano vengono definiti gestori eventi.
Un'origine eventi può disporre di più gestori per gli eventi generati. Quando la classe genera l'evento, lo stesso
evento viene generato in tutte le classi per cui è stato scelto di gestire eventi per tale istanza dell'oggetto.
Nell'esempio vengono usati anche un form ( Form1 ) con un pulsante ( Button1 ) e una casella di testo ( TextBox1
). Quando si fa clic sul pulsante, nella prima casella di testo viene visualizzato il conto alla rovescia dei secondi da
10 a 0. Al termine dei 10 secondi, nella prima casella di testo viene visualizzato "Done".
Il codice di Form1 specifica gli stati di inizio e fine del form. Contiene inoltre il codice eseguito quando vengono
generati gli eventi.
Per usare l'esempio, aprire un nuovo progetto Windows Form. Aggiungere quindi un pulsante denominato
Button1 e una casella di testo denominata TextBox1 al form principale, denominato Form1 . Fare quindi clic con
il pulsante destro del mouse sul form e scegliere Visualizza codice per aprire l'editor di codice.
Aggiungere una variabile WithEvents alla sezione delle dichiarazioni della classe Form1 :
Aggiungere il codice seguente al codice per Form1 : Sostituire eventuali routine duplicate, ad esempio
Form_Load o Button_Click .
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Premere F5 per eseguire l'esempio precedente e fare clic sul pulsante Avvia . Nella prima casella di testo viene
avviato il conto alla rovescia dei secondi. Al termine dei 10 secondi, nella prima casella di testo viene visualizzato
"Done".
NOTE
Il metodo My.Application.DoEvents non elabora gli eventi allo stesso modo del form. Per consentire al form di gestire
direttamente gli eventi, si può ricorrere al multithreading. Per altre informazioni, vedere Threading gestito.
Vedi anche
Istruzione RaiseEvent
Istruzione Implements
Eventi
Istruzione AddHandler
Istruzione RemoveHandler
Selettori
Istruzione Delegate
Procedura: dichiarare eventi personalizzati per proteggere la memoria
Procedura: dichiarare eventi personalizzati per evitare il blocco
Condivisa
Ombreggiature
Istruzione Exit (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Esce da una routine o da un blocco e trasferisce immediatamente il controllo all'istruzione successiva alla
chiamata di routine o alla definizione del blocco.
Sintassi
Exit { Do | For | Function | Property | Select | Sub | Try | While }
Istruzioni
Exit Do
Chiude immediatamente il Do ciclo in cui viene visualizzato. L'esecuzione continua con l'istruzione che segue l'
Loop istruzione. Exit Do può essere utilizzato solo all'interno di un Do ciclo. Quando viene utilizzato
all'interno Do di cicli annidati, Exit Do chiude il ciclo più interno e trasferisce il controllo al livello di
nidificazione successivo.
Exit For
Chiude immediatamente il For ciclo in cui viene visualizzato. L'esecuzione continua con l'istruzione che segue l'
Next istruzione. Exit For può essere utilizzato solo all'interno di un For ciclo... Next o For Each .. Next ..
Quando viene utilizzato all'interno For di cicli annidati, Exit For chiude il ciclo più interno e trasferisce il
controllo al livello di nidificazione successivo.
Exit Function
Esce immediatamente dalla Function routine in cui viene visualizzato. L'esecuzione continua con l'istruzione
che segue l'istruzione che ha chiamato la Function procedura. Exit Function può essere utilizzato solo
all'interno di una Function routine.
Per specificare un valore restituito, è possibile assegnare il valore al nome della funzione su una riga prima dell'
Exit Function istruzione. Per assegnare il valore restituito e uscire dalla funzione in un'unica istruzione, è
possibile usare invece l' istruzione return.
Exit Property
Esce immediatamente dalla Property routine in cui viene visualizzato. L'esecuzione continua con l'istruzione
che ha chiamato la Property routine, ovvero con l'istruzione che richiede o imposta il valore della proprietà.
Exit Property può essere utilizzato solo all'interno di una Get routine o di una proprietà Set .
Per specificare un valore restituito in una Get routine, è possibile assegnare il valore al nome della funzione su
una riga prima dell' Exit Property istruzione. Per assegnare il valore restituito e uscire dalla Get procedura in
un'unica istruzione, è possibile usare l' Return istruzione.
In una Set routine, l' Exit Property istruzione è equivalente all' Return istruzione.
Exit Select
Esce immediatamente dal Select Case blocco in cui viene visualizzato. L'esecuzione continua con l'istruzione
che segue l' End Select istruzione. Exit Select può essere utilizzato solo all'interno di un' Select Case
istruzione.
Exit Sub
Esce immediatamente dalla Sub routine in cui viene visualizzato. L'esecuzione continua con l'istruzione che
segue l'istruzione che ha chiamato la Sub procedura. Exit Sub può essere utilizzato solo all'interno di una
Sub routine.
In una Sub routine, l' Exit Sub istruzione è equivalente all' Return istruzione.
Exit Try
Esce immediatamente dal Try blocco o Catch in cui viene visualizzato. L'esecuzione continua con il Finally
blocco se ne esiste uno oppure con l'istruzione che segue l' End Try istruzione in caso contrario. Exit Try può
essere utilizzato solo all'interno di un Try Catch blocco o e non all'interno di un Finally blocco.
Exit While
Chiude immediatamente il While ciclo in cui viene visualizzato. L'esecuzione continua con l'istruzione che
segue l' End While istruzione. Exit While può essere utilizzato solo all'interno di un While ciclo. Quando viene
usato all'interno While di cicli annidati, Exit While trasferisce il controllo al ciclo che è un livello annidato
sopra il ciclo in cui Exit While si verifica.
Commenti
Non confondere Exit istruzioni con End istruzioni. Exit non definisce la fine di un'istruzione.
Esempio
Nell'esempio seguente, la condizione del ciclo arresta il ciclo quando la index variabile è maggiore di 100. Nell'
If istruzione del ciclo, tuttavia, l' Exit Do istruzione arresta il ciclo quando la variabile di indice è maggiore di
10.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Esempio
Nell'esempio seguente viene assegnato il valore restituito al nome della funzione myFunction e quindi viene
utilizzato Exit Function per restituire dalla funzione:
Esempio
Nell'esempio seguente viene utilizzata l' istruzione return per assegnare il valore restituito e uscire dalla
funzione:
Function MyFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Vedi anche
Istruzione Continue
Istruzione Do...Loop
Istruzione End
Istruzione For Each...Next
Istruzione For...Next
Istruzione Function
Istruzione Return
Istruzione Stop
Istruzione Sub
Istruzione Try...Catch...Finally
Istruzioni F-P
05/03/2021 • 2 minutes to read • Edit Online
Nella tabella seguente è incluso un elenco di istruzioni del linguaggio Visual Basic.
Vedi anche
Istruzioni A-E
Istruzioni Q-Z
Riferimenti al linguaggio Visual Basic
Istruzione For Each...Next (Visual Basic)
05/03/2021 • 23 minutes to read • Edit Online
Sintassi
For Each element [ As datatype ] In group
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
Parti
T ERM IN E DEF IN IZ IO N E
Esempio semplice
Utilizzare un For Each ciclo... Next quando si desidera ripetere un set di istruzioni per ogni elemento di una
raccolta o di una matrice.
TIP
Oggetto per... L'istruzione successiva funziona bene quando è possibile associare ogni iterazione di un ciclo a una variabile
di controllo e determinare i valori iniziale e finale della variabile. Tuttavia, quando si tratta di una raccolta, il concetto di
valori iniziali e finali non è significativo e non si conosce necessariamente il numero di elementi della raccolta. In questo
tipo di caso, un For Each ciclo... Next è spesso una scelta migliore.
Nell'esempio seguente, il For Each ... Next l'istruzione scorre tutti gli elementi di una raccolta di elenchi.
Nested Loops
È possibile annidare For Each cicli inserendo un ciclo all'interno di un altro.
Nell'esempio seguente viene illustrato l'oggetto annidato For Each ... Next strutture.
Quando si annidano i cicli, ogni ciclo deve avere una variabile univoca element .
È anche possibile annidare diversi tipi di strutture di controllo tra loro. Per altre informazioni, vedere strutture di
controlli annidati.
È possibile inserire un numero qualsiasi di Exit For istruzioni in un For Each ciclo. Quando viene utilizzato
all'interno di cicli annidati For Each , Exit For l'esecuzione esce dal ciclo più interno e trasferisce il controllo al
livello di nidificazione successivo.
Exit For viene spesso usato dopo una valutazione di una determinata condizione, ad esempio in un If ...
Then ... Else struttura. Può essere utile usare Exit For per le condizioni seguenti:
La continuazione dell'iterazione non è necessaria o impossibile. Il problema potrebbe essere causato da
un valore errato o da una richiesta di terminazione.
Viene rilevata un'eccezione in Try ... Catch ... Finally . È possibile utilizzare Exit For alla fine del
Finally blocco.
Un ciclo infinito, ovvero un ciclo che può eseguire un numero di volte elevato o infinito. Se si rileva una
condizione di questo tipo, è possibile utilizzare Exit For per eseguire l'escape del ciclo. Per ulteriori
informazioni, vedere ... Istruzione Loop.
Iterators
Si usa un iteratore per eseguire un'iterazione personalizzata su una raccolta. Un iteratore può essere una
funzione o una funzione di Get accesso. Viene utilizzata un' Yield istruzione per restituire ogni elemento della
raccolta uno alla volta.
È possibile chiamare un iteratore usando un' For Each...Next istruzione. Ogni iterazione del ciclo For Each
chiama l'iteratore. Quando Yield viene raggiunta un'istruzione nell'iteratore, viene restituita l'espressione nell'
Yield istruzione e viene mantenuta la posizione corrente nel codice. L'esecuzione viene ripresa a partire da
quella posizione la volta successiva che viene chiamato l'iteratore.
Nell'esempio seguente viene utilizzata una funzione iteratore. La funzione iteratore ha un' Yield istruzione che
si trova all'interno di un oggetto per... Ciclo successivo . Nel ListEvenNumbers Metodo ogni iterazione del corpo
dell' For Each istruzione crea una chiamata alla funzione iteratore, che procede all' Yield istruzione successiva.
Public Sub ListEvenNumbers()
For Each number As Integer In EvenSequence(5, 18)
Debug.Write(number & " ")
Next
Debug.WriteLine("")
' Output: 6 8 10 12 14 16 18
End Sub
Implementazione tecnica
Quando un For Each ... Next l'istruzione viene eseguita, Visual Basic valuta la raccolta solo una volta, prima
dell'avvio del ciclo. Se il blocco di istruzioni cambia element o group , queste modifiche non influiscono
sull'iterazione del ciclo.
Quando tutti gli elementi della raccolta sono stati assegnati successivamente a element , il For Each ciclo viene
arrestato e il controllo passa all'istruzione che segue l' Next istruzione.
Se Option deduce è on (impostazione predefinita), il Visual Basic compilatore può dedurre il tipo di dati di
element . Se è disattivata e element non è stata dichiarata al di fuori del ciclo, è necessario dichiararla nell'
For Each istruzione. Per dichiarare il tipo di dati di in element modo esplicito, utilizzare una As clausola. A
meno che il tipo di dati dell'elemento non sia definito al di fuori del For Each costrutto... Next , il relativo
ambito è il corpo del ciclo. Si noti che non è possibile dichiarare element sia all'esterno che all'interno del ciclo.
Facoltativamente, è possibile specificare element nell' Next istruzione. Ciò migliora la leggibilità del
programma, soprattutto se sono presenti cicli nidificati For Each . È necessario specificare la stessa variabile di
quella visualizzata nell' For Each istruzione corrispondente.
È consigliabile evitare di modificare il valore di element all'interno di un ciclo. Questa operazione può rendere
più difficile la lettura e il debug del codice. La modifica del valore di group non influisce sulla raccolta o sui
relativi elementi, che sono stati determinati quando il ciclo è stato immesso per la prima volta.
Quando si annidano i cicli, se Next viene rilevata un'istruzione di un livello di nidificazione esterno prima Next
di di un livello interno, il compilatore segnala un errore. Tuttavia, il compilatore può rilevare questo errore di
sovrapposizione solo se si specifica element in ogni Next istruzione.
Se il codice dipende dall'attraversamento di una raccolta in un ordine particolare, un For Each ciclo... Next non
è la scelta migliore, a meno che non si conoscano le caratteristiche dell'oggetto enumeratore esposto dalla
raccolta. L'ordine di attraversamento non è determinato dal Visual Basic, ma dal MoveNext metodo dell'oggetto
enumeratore. Pertanto, potrebbe non essere possibile stimare quale elemento della raccolta è il primo da
restituire in element o che è il successivo da restituire dopo un determinato elemento. È possibile ottenere
risultati più affidabili utilizzando una struttura di ciclo diversa, ad esempio For ... Next o Do ... Loop .
Il runtime deve essere in grado di convertire gli elementi di in group element . L' Option Strict istruzione []
controlla se sono consentite entrambe le conversioni verso un tipo di ingrandimento e più piccolo (
Option Strict è disattivato, il valore predefinito) o se sono consentite solo conversioni verso un tipo di
ingrandimento ( Option Strict è on). Per altre informazioni, vedere conversioniverso un tipo di dati più piccolo.
Il tipo di dati di group deve essere un tipo di riferimento che fa riferimento a una raccolta o a una matrice
enumerabile. In genere, ciò significa che group fa riferimento a un oggetto che implementa l' IEnumerable
interfaccia dello System.Collections spazio dei nomi o l' IEnumerable<T> interfaccia dello
System.Collections.Generic spazio dei nomi. System.Collections.IEnumerable definisce il GetEnumerator
metodo, che restituisce un oggetto enumeratore per la raccolta. L'oggetto enumeratore implementa l'
System.Collections.IEnumerator interfaccia dello System.Collections spazio dei nomi ed espone la Current
proprietà e i Reset MoveNext metodi e. Visual Basic utilizza questi per attraversare la raccolta.
conversioni verso un tipo di dati più piccolo
Quando Option Strict è impostato su, le conversioni verso un tipo di caratteri più On piccolo generano in
genere errori del compilatore. In un' For Each istruzione, tuttavia, le conversioni dagli elementi in group a
element vengono valutate e eseguite in fase di esecuzione e gli errori del compilatore causati da conversioni
verso un tipo di caratteri più piccolo vengono eliminati.
Nell'esempio seguente l'assegnazione di m come valore iniziale di n non viene compilata quando
Option Strict è impostata su on perché la conversione di un oggetto Long in un oggetto Integer è una
conversione verso un tipo di caratteri più piccolo. Nell' For Each istruzione, tuttavia, non viene segnalato alcun
errore del compilatore, anche se l'assegnazione a number richiede la stessa conversione da Long a Integer .
Nell' For Each istruzione che contiene un numero elevato, si verifica un errore di run-time quando ToInteger
viene applicato al numero elevato.
Option Strict On
Module Module1
Sub Main()
' The assignment of m to n causes a compiler error when
' Option Strict is on.
Dim m As Long = 987
'Dim n As Integer = m
' The For Each loop requires the same conversion but
' causes no errors, even when Option Strict is on.
For Each number As Integer In New Long() {45, 3, 987}
Console.Write(number & " ")
Next
Console.WriteLine()
' Output: 45 3 987
Console.ReadKey()
End Sub
End Module
Chiamate IEnumerator
Quando viene avviata l'esecuzione di un For Each ciclo... Next Visual Basic verifica che faccia group
riferimento a un oggetto raccolta valido. In caso contrario, viene generata un'eccezione. In caso contrario,
chiama il MoveNext metodo e la Current proprietà dell'oggetto enumeratore per restituire il primo elemento. Se
MoveNext indica che non è presente alcun elemento successivo, ovvero se la raccolta è vuota, il For Each ciclo
viene arrestato e il controllo passa all'istruzione che segue l' Next istruzione. In caso contrario, Visual Basic
imposta sul element primo elemento ed esegue il blocco di istruzioni.
Ogni volta che Visual Basic rileva l' Next istruzione, viene restituito all' For Each istruzione. Anche in questo
caso chiama MoveNext e Current per restituire l'elemento successivo, quindi esegue di nuovo il blocco o
arresta il ciclo a seconda del risultato. Questo processo continua fino a MoveNext indicare che non è presente
alcun elemento successivo o che Exit For viene rilevata un'istruzione.
Modifica della raccolta. L'oggetto enumeratore restituito da GetEnumerator normalmente non consente di
modificare la raccolta aggiungendo, eliminando, sostituendo o riordinando gli elementi. Se si modifica la
raccolta dopo che è stato avviato un For Each ciclo... Next , l'oggetto enumeratore diventa non valido e il
tentativo successivo di accedere a un elemento causa un' InvalidOperationException eccezione.
Tuttavia, questo blocco di modifiche non è determinato dall'Visual Basic, bensì dall'implementazione dell'
IEnumerable interfaccia. È possibile implementare IEnumerable in modo da consentire la modifica durante
l'iterazione. Se si sta prendendo in considerazione questa modifica dinamica, assicurarsi di comprendere le
caratteristiche dell' IEnumerable implementazione nella raccolta in uso.
Modifica degli elementi della raccolta. La Current proprietà dell'oggetto enumeratore è ReadOnlye
restituisce una copia locale di ogni elemento della raccolta. Ciò significa che non è possibile modificare gli
elementi stessi in un For Each ciclo... Next . Eventuali modifiche apportate influiscono solo sulla copia locale da
Current e non vengono riflesse nella raccolta sottostante. Tuttavia, se un elemento è un tipo riferimento, è
possibile modificare i membri dell'istanza a cui fa riferimento. Nell'esempio seguente viene modificato il
BackColor membro di ogni thisControl elemento. Non è tuttavia possibile modificare thisControl se stesso.
Nell'esempio precedente è possibile modificare il BackColor membro di ogni thisControl elemento, sebbene
non sia possibile modificarlo thisControl .
Attraversamento di matrici. Poiché la Array classe implementa l' IEnumerable interfaccia, tutte le matrici
espongono il GetEnumerator metodo. Ciò significa che è possibile scorrere una matrice con un For Each ciclo...
Next . Tuttavia, è possibile leggere solo gli elementi della matrice. Non è possibile modificarli.
Esempio
Nell'esempio seguente vengono elencate tutte le cartelle presenti in C:\ Directory tramite la DirectoryInfo classe.
Esempio
L'esempio seguente illustra una procedura per ordinare una raccolta. Nell'esempio vengono ordinate le istanze
di una Car classe archiviate in un oggetto List<T> . La classe Car implementa l'interfaccia IComparable<T>,
che richiede l'implementazione del metodo CompareTo.
Ogni chiamata al CompareTo metodo esegue un confronto singolo usato per l'ordinamento. Il codice scritto
dall'utente presente nel metodo CompareTo restituisce un valore per ogni confronto dell'oggetto corrente con
un altro oggetto. Il valore restituito è minore di zero se l'oggetto corrente è inferiore all'altro oggetto, maggiore
di zero se l'oggetto corrente è superiore all'altro oggetto e zero se sono uguali. In questo modo è possibile
definire nel codice i criteri di maggiore, minore e uguale.
Nel metodo ListCars l'istruzione cars.Sort() ordina l'elenco. Questa chiamata al metodo Sort di List<T>
determina la chiamata automatica al metodo CompareTo per gli oggetti Car in List .
' Output:
' blue 50 car4
' blue 30 car5
' blue 20 car1
' green 50 car7
' green 10 car3
' red 60 car6
' red 50 car2
End Sub
Return compare
End Function
End Class
Vedi anche
raccolte
Istruzione For...Next
Strutture di ciclo
Istruzione While...End While
Istruzione Do...Loop
Widening and Narrowing Conversions
Inizializzatori di oggetto: tipi denominati e tipi anonimi
Inizializzatori di insieme
Matrici
Istruzione For...Next (Visual Basic)
05/03/2021 • 15 minutes to read • Edit Online
Sintassi
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Parti
PA RT E DESC RIZ IO N E
Semplici esempi
Utilizzare una For struttura... Next quando si desidera ripetere un set di istruzioni per un numero di volte.
Nell'esempio seguente, la index variabile inizia con un valore pari a 1 e viene incrementata a ogni iterazione
del ciclo, terminando dopo il valore di index raggiunge 5.
Nell'esempio seguente, la number variabile inizia da 2 e viene ridotta di 0,25 in ogni iterazione del ciclo,
terminando dopo il valore di number raggiunge 0. L' Step argomento di -.25 riduce il valore di 0,25 a ogni
iterazione del ciclo.
TIP
Un po'... Istruzione End While o do... L'istruzione Loop funziona bene se non si conosce in anticipo il numero di volte in cui
eseguire le istruzioni nel ciclo. Tuttavia, quando si prevede di eseguire il ciclo un numero specifico di volte, un For ciclo...
Next rappresenta una scelta migliore. Il numero di iterazioni viene determinato quando si immette il ciclo per la prima
volta.
Annidamento di cicli
È possibile annidare For cicli inserendo un ciclo all'interno di un altro. Nell'esempio seguente vengono
illustrate le strutture annidate con For Next valori di passaggio diversi. Il ciclo esterno crea una stringa per
ogni iterazione del ciclo. Il ciclo interno decrementa una variabile del contatore di cicli per ogni iterazione del
ciclo.
For indexA = 1 To 3
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
Quando si annidano cicli, ogni ciclo deve avere una counter variabile univoca.
È anche possibile annidare strutture di controllo di tipi diversi l'una all'altra. Per altre informazioni, vedere
strutture di controlli annidati.
È possibile inserire un numero qualsiasi di Exit For istruzioni in un For ... Next loop. Se utilizzato all'interno
di For ... Next esegue il loop, Exit For esce dal ciclo più interno e trasferisce il controllo al successivo livello di
nidificazione.
Exit For viene spesso usato dopo la valutazione di una condizione, ad esempio in un If ... Then ... Else
struttura). Può essere utile usare Exit For per le condizioni seguenti:
La continuazione dell'iterazione non è necessaria o impossibile. Questa condizione può essere creata da
un valore errato o da una richiesta di terminazione.
A Try ... Catch ... Finally l'istruzione rileva un'eccezione. È possibile utilizzare Exit For alla fine del
Finally blocco.
Si dispone di un ciclo infinito, ovvero un ciclo che può eseguire un numero di volte elevato o addirittura
infinito. Se si rileva una condizione di questo tipo, è possibile utilizzare Exit For per eseguire l'escape
del ciclo. Per ulteriori informazioni, vedere ... Istruzione Loop.
Implementazione tecnica
Quando For viene avviato un ciclo... Next , Visual Basic valuta start , end e step . Visual Basic valuta questi
valori solo in questo momento e quindi assegna start a counter . Prima dell'esecuzione del blocco di
istruzioni, Visual Basic viene confrontato counter con end . Se counter è già maggiore del end valore (o
minore se step è negativo), il For ciclo termina e il controllo passa all'istruzione che segue l' Next istruzione.
In caso contrario, viene eseguito il blocco di istruzioni.
Ogni volta che Visual Basic rileva l' Next istruzione, viene incrementato counter di e viene step restituito all'
For istruzione. Anche in questo caso viene confrontato counter con end e di nuovo esegue il blocco o esce
dal ciclo, a seconda del risultato. Questo processo continua fino a quando non counter end Exit For vengono
rilevati i passaggi o un'istruzione.
Il ciclo non viene arrestato fino a quando non counter viene superato end . Se counter è uguale a end , il
ciclo continua. Il confronto che determina se eseguire il blocco è counter <= end se step è positivo e
counter >= end se step è negativo.
Se si modifica il valore di counter all'interno di un ciclo, il codice potrebbe essere più difficile da leggere ed
eseguire il debug. La modifica del valore di start , end o step non influisce sui valori di iterazione che sono
stati determinati quando il ciclo è stato immesso per la prima volta.
Se si annidano i cicli, il compilatore segnala un errore se rileva l' Next istruzione di un livello di nidificazione
esterno prima dell' Next istruzione di un livello interno. Tuttavia, il compilatore può rilevare questo errore di
sovrapposizione solo se si specifica counter in ogni Next istruzione.
Argomento Step
Il valore di step può essere positivo o negativo. Questo parametro determina l'elaborazione del ciclo in base
alla tabella seguente:
Sì No Sì.
Il tipo di dati di counter determina il tipo di iterazione, che deve essere uno dei tipi seguenti:
Byte ,, SByte , UShort Short , UInteger , Integer , ULong , Long , Decimal , Single O Double .
Enumerazione dichiarata tramite un' istruzione enum.
Oggetto Object .
Tipo T che dispone degli operatori seguenti, dove B è un tipo che può essere utilizzato in un' Boolean
espressione.
Public Shared Operator >= (op1 As T, op2 As T) As B
Facoltativamente, è possibile specificare la counter variabile nell' Next istruzione. Questa sintassi migliora la
leggibilità del programma, soprattutto se sono presenti cicli nidificati For . È necessario specificare la variabile
visualizzata nell' For istruzione corrispondente.
Le start espressioni, e step possono restituire qualsiasi tipo di dati che viene ampliato al tipo di
end
counter . Se si utilizza un tipo definito dall'utente per counter , potrebbe essere necessario definire l' CType
operatore di conversione per convertire i tipi di start , end o nel step tipo di counter .
Esempio
Nell'esempio seguente vengono rimossi tutti gli elementi da un elenco generico. Anziché per ogni...
Nell'istruzione successiva, nell'esempio viene illustrata un' For istruzione... che esegue l' Next iterazione in
ordine decrescente. L'esempio usa questa tecnica perché il removeAt metodo fa sì che gli elementi dopo
l'elemento rimosso abbiano un valore di indice inferiore.
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
Debug.WriteLine(lst.Count.ToString)
' Output: 0
Esempio
Nell'esempio seguente viene iterata un'enumerazione dichiarata tramite un' istruzione enum.
Esempio
Nell'esempio seguente, i parametri dell'istruzione usano una classe con overload di operatori per gli + -
operatori,, >= e <= .
Private Class Distance
Public Property Number() As Double
Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number - op2.Number)
End Operator
Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number >= op2.Number)
End Operator
Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number <= op2.Number)
End Operator
End Class
' Output: 10 14 18 22
End Sub
Vedi anche
List<T>
Strutture di ciclo
Istruzione While...End While
Istruzione Do...Loop
Strutture di controllo annidate
Istruzione Exit
raccolte
Istruzione Function (Visual Basic)
05/03/2021 • 15 minutes to read • Edit Online
Sintassi
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist |
Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Parti
attributelist
NotOverridable Overrides
Shared
facoltativo. Vedere Shared.
Shadows
facoltativo. Elenco di parametri di tipo per una routine generica. Vedere elenco dei tipi.
parameterlist
facoltativo. Elenco di nomi di variabili locali che rappresentano i parametri di questa procedura. Vedere
elenco di parametri.
returntype
Obbligatorio se Option Strict è On . Tipo di dati del valore restituito da questa procedura.
Implements
facoltativo. Indica che questa procedura implementa una o più Function procedure, ognuna delle quali è
definita in un'interfaccia implementata dalla classe o dalla struttura contenitore di questa procedura.
Vedere istruzione Implements.
implementslist
PA RT E DESC RIZ IO N E
Handles
facoltativo. Indica che questa procedura può gestire uno o più eventi specifici. Vedere handle.
eventlist
PA RT E DESC RIZ IO N E
statements
Commenti
Tutto il codice eseguibile deve trovarsi all'interno di una routine. Ogni procedura, a sua volta, viene dichiarata
all'interno di una classe, di una struttura o di un modulo a cui viene fatto riferimento come classe, struttura o
modulo contenitore.
Per restituire un valore al codice chiamante, utilizzare una Function stored procedure; in caso contrario,
utilizzare una Sub routine.
NOTE
È possibile utilizzare le espressioni lambda per definire espressioni di funzione inline. Per altre informazioni, vedere
espressione di funzione ed espressioni lambda.
L' Return istruzione assegna simultaneamente il valore restituito e chiude la funzione, come illustrato
nell'esempio seguente.
Nell'esempio seguente viene assegnato il valore restituito al nome della funzione myFunction e quindi viene
utilizzata l' Exit Function istruzione per restituire.
Le Exit Function Return istruzioni e generano un'uscita immediata da una Function routine. Qualsiasi
numero di Exit Function Return istruzioni e può comparire in qualsiasi punto della procedura ed è possibile
combinare le Exit Function Return istruzioni e.
Se si utilizza Exit Function senza assegnare un valore a name , la stored procedure restituisce il valore
predefinito per il tipo di dati specificato in returntype . Se returntype non è specificato, la procedura restituisce
Nothing , che rappresenta il valore predefinito per Object .
Funzioni asincrone
La funzionalità asincrona consente di richiamare funzioni asincrone senza usare callback espliciti o suddividere
manualmente il codice in più funzioni o espressioni lambda.
Se si contrassegna una funzione con il modificatore Async , è possibile usare l'operatore await nella funzione.
Quando il controllo raggiunge un' Await espressione nella Async funzione, il controllo torna al chiamante e
l'avanzamento nella funzione viene sospeso fino al completamento dell'attività attesa. Al termine dell'attività,
l'esecuzione può riprendere nella funzione.
NOTE
Una Async routine restituisce al chiamante quando rileva il primo oggetto atteso che non è ancora completo o
raggiunge la fine della Async procedura, a seconda di quale si verifica per primo.
Una Async funzione può avere un tipo restituito di Task<TResult> o Task . Di seguito è riportato un esempio di
una Async funzione con un tipo restituito Task<TResult> .
Una Async funzione non può dichiarare parametri ByRef .
Un' istruzione Sub può anche essere contrassegnata con il Async modificatore. Viene utilizzato principalmente
per i gestori eventi, in cui non è possibile restituire un valore. Una Async Sub routine non può essere attesa e il
chiamante di una Async Sub routine non può intercettare le eccezioni generate dalla Sub procedura.
Per altre informazioni sulle Async funzioni, vedere programmazione asincrona con Async e await, flusso di
controllo in programmi asincronie tipi restituiti asincroni.
Funzioni iteratore
Una funzione iteratore esegue un'iterazione personalizzata su una raccolta, ad esempio un elenco o una matrice.
Una funzione iteratore usa l'istruzione yield per restituire un elemento alla volta. Quando viene raggiunta
un'istruzione yield , viene memorizzata la posizione corrente nel codice. L'esecuzione viene riavviata a partire da
quella posizione la volta successiva che viene chiamata la funzione iteratore.
È possibile chiamare un iteratore dal codice client usando un per ogni... Istruzione successiva .
Il tipo restituito di una funzione iteratore può essere IEnumerable , IEnumerable<T> , IEnumerator o
IEnumerator<T> .
Per ulteriori informazioni, vedere iteratori.
Esempio
Nell'esempio seguente viene utilizzata l' Function istruzione per dichiarare il nome, i parametri e il codice che
formano il corpo di una Function routine. Il ParamArray modificatore consente alla funzione di accettare un
numero variabile di argomenti.
Esempio
Nell'esempio seguente viene richiamata la funzione dichiarata nell'esempio precedente.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
End Module
Esempio
Nell'esempio seguente DelayAsync è un oggetto Async Function che ha un tipo restituito Task<TResult> .
DelayAsync ha un'istruzione Return che restituisce un numero intero. La dichiarazione di funzione di
DelayAsync deve quindi avere un tipo restituito Task(Of Integer) . Poiché il tipo restituito è Task(Of Integer) ,
la valutazione dell' Await espressione in DoSomethingAsync genera un numero intero. Questa operazione viene
illustrata in questa istruzione: Dim result As Integer = Await delayTask .
La startButton_Click procedura è un esempio di Async Sub procedura. Poiché DoSomethingAsync è una Async
funzione, l'attività per la chiamata a DoSomethingAsync deve essere attesa, come illustrato nell'istruzione
seguente: Await DoSomethingAsync() . La startButton_Click Sub procedura deve essere definita con il Async
modificatore perché contiene un' Await espressione.
' Imports System.Diagnostics
' Imports System.Threading.Tasks
' Output:
' Result: 5
Vedi anche
Istruzione Sub
Routine Function
Elenco parametri
Istruzione Dim
Istruzione Call
Di
Matrici di parametri
Procedura: Usare una classe generica
Risoluzione dei problemi relativi alle routine
Espressioni lambda
Espressione di funzione
Istruzione Get
05/03/2021 • 6 minutes to read • Edit Online
Dichiara una Get routine di proprietà utilizzata per recuperare il valore di una proprietà.
Sintassi
[ <attributelist> ] [ accessmodifier ] Get()
[ statements ]
End Get
Parti
T ERM IN E DEF IN IZ IO N E
- Protetto
- Amico
- Privata
- Protected Friend
Commenti
Ogni proprietà deve disporre di una Get routine Property, a meno che la proprietà non sia contrassegnata
come WriteOnly . La Get stored procedure viene utilizzata per restituire il valore corrente della proprietà.
Visual Basic chiama automaticamente la routine di una proprietà Get quando un'espressione richiede il valore
della proprietà.
Il corpo della dichiarazione di proprietà può contenere solo le Get routine e della proprietà Set tra l' istruzione
Property e l' End Property istruzione. Non è possibile archiviare un valore diverso da tali procedure. In
particolare, non è possibile archiviare il valore corrente della proprietà. È necessario archiviare questo valore
all'esterno della proprietà, perché se viene archiviato in una delle routine della proprietà, l'altra routine della
proprietà non potrà accedervi. L'approccio usuale consiste nell'archiviare il valore in una variabile privata
dichiarata allo stesso livello della proprietà. È necessario definire una Get routine all'interno della proprietà a
cui si applica.
Get Per impostazione predefinita, la procedura viene impostata sul livello di accesso della proprietà che lo
contiene, a meno che non si utilizzi accessmodifier nell' Get istruzione.
Regole
Livelli di accesso misti. Se si definisce una proprietà di lettura/scrittura, è possibile specificare
facoltativamente un livello di accesso diverso per la Get routine o Set , ma non per entrambi. In tal
caso, il livello di accesso della routine deve essere più restrittivo del livello di accesso della proprietà. Se,
ad esempio, la proprietà è dichiarata Friend , è possibile dichiarare la Get routine Private , ma non
Public .
Se si definisce una ReadOnly proprietà, la Get routine rappresenta l'intera proprietà. Non è possibile
dichiarare un livello di accesso diverso per Get , perché in questo caso verrebbero impostati due livelli di
accesso per la proprietà.
Tipo restituito. L' istruzione Property può dichiarare il tipo di dati del valore restituito. La Get stored
procedure restituisce automaticamente il tipo di dati. È possibile specificare qualsiasi tipo di dati o il nome
di un'enumerazione, una struttura, una classe o un'interfaccia.
Se l' Property istruzione non specifica returntype , la procedura restituisce Object .
Comportamento
Restituzione da una routine. Quando la Get procedura viene restituita al codice chiamante,
l'esecuzione continua all'interno dell'istruzione che ha richiesto il valore della proprietà.
Get le routine Property possono restituire un valore utilizzando l' istruzione return o assegnando il
valore restituito al nome della proprietà. Per ulteriori informazioni, vedere "valore restituito" nell'
istruzione Function.
Le Exit Property Return istruzioni e generano un'uscita immediata da una routine di proprietà.
Qualsiasi numero di Exit Property Return istruzioni e può comparire in qualsiasi punto della procedura
ed è possibile combinare le Exit Property Return istruzioni e.
Valore restituito. Per restituire un valore da una Get routine, è possibile assegnare il valore al nome
della proprietà o includerlo in un' istruzione Return. L' Return istruzione assegna simultaneamente il
Get valore restituito della routine e chiude la procedura.
Se si utilizza Exit Property senza assegnare un valore al nome della proprietà, la Get stored procedure
restituisce il valore predefinito per il tipo di dati della proprietà. Per ulteriori informazioni, vedere "valore
restituito" nell' istruzione Function.
Nell'esempio seguente vengono illustrati due modi in cui la proprietà quoteForTheDay di sola lettura può
restituire il valore contenuto nella variabile privata quoteValue .
Esempio
Nell'esempio seguente viene utilizzata l' Get istruzione per restituire il valore di una proprietà.
Class propClass
' Define a private local variable to store the property value.
Private currentTime As String
' Define the read-only property.
Public ReadOnly Property DateAndTime() As String
Get
' The Get procedure is called automatically when the
' value of the property is retrieved.
currentTime = CStr(Now)
' Return the date and time As a string.
Return currentTime
End Get
End Property
End Class
Vedi anche
Istruzione set
Property Statement
Istruzione Exit
Oggetti e classi
Procedura dettagliata: definizione delle classi
Istruzione GoTo
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
GoTo line
Parte
line
Obbligatorio. Qualsiasi etichetta di riga.
Commenti
L' GoTo istruzione può creare un ramo solo per le righe della routine in cui viene visualizzata. La riga deve avere
un'etichetta di linea GoTo a cui può fare riferimento. Per altre informazioni, vedere How to: Label statements.
NOTE
GoTo le istruzioni possono rendere difficile la lettura e la gestione del codice. Quando possibile, usare invece una
struttura di controllo. Per altre informazioni, vedere Flusso di controllo.
Non è possibile usare un' GoTo istruzione per creare un ramo dall'esterno di For ... Next , For Each ... Next ,.
SyncLock .. End SyncLock , Try .. Catch . ... Finally , With ... End With o Using ... End Using costruzione in
un'etichetta all'interno di.
Try blocco Solo da un Catch blocco della stessa Solo all'esterno dell'intera costruzione
costruzione 1
1 se uno Try ... Catch ... Finally la costruzione è annidata all'interno di un'altra, un Catch blocco può creare
rami nel Try blocco al proprio livello di annidamento, ma non in un altro Try blocco. Oggetto annidato Try ...
Catch ... Finally la costruzione deve essere completamente inclusa in Try un Catch blocco o della
costruzione all'interno della quale è annidata.
Nella figura seguente viene illustrata una Try costruzione annidata all'interno di un'altra. Vari rami tra i blocchi
delle due costruzioni sono indicati come validi o non validi.
Esempio
Nell'esempio seguente viene utilizzata l' GoTo istruzione per creare un ramo delle etichette di riga in una
procedura.
Sub GoToStatementDemo()
Dim number As Integer = 1
Dim sampleString As String
' Evaluate number and branch to appropriate label.
If number = 1 Then GoTo Line1 Else GoTo Line2
Line1:
sampleString = "Number equals 1"
GoTo LastLine
Line2:
' The following statement never gets executed because number = 1.
sampleString = "Number equals 2"
LastLine:
' Write "Number equals 1" in the Debug window.
Debug.WriteLine(sampleString)
End Sub
Vedi anche
Istruzione Do...Loop
Istruzione For...Next
Istruzione For Each...Next
Istruzione If...Then...Else
Istruzione Select...Case
Istruzione Try...Catch...Finally
Istruzione While...End While
Istruzione With...End With
Istruzione If...Then...Else (Visual Basic) |
05/03/2021 • 8 minutes to read • Edit Online
Esegue un gruppo di istruzioni in base a determinate condizioni, a seconda del valore di un'espressione.
Sintassi
' Multiline syntax:
If condition [ Then ]
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If
Parti
condition
Obbligatorio. Espressione. Deve restituire True o oppure False a un tipo di dati convertibile in modo implicito
in Boolean .
Se l'espressione è una variabile Nullable Boolean che non restituisce alcunvalore, la condizione viene
considerata come se l'espressione è False e i ElseIf blocchi vengono valutati se esistono oppure il Else
blocco viene eseguito se esistente.
Then
Obbligatorio nella sintassi a riga singola; facoltativo nella sintassi su più righe.
statements
facoltativo. Una o più istruzioni If che seguono... Then che vengono eseguite se condition restituisce True .
elseifcondition
Obbligatorio se ElseIf è presente. Espressione. Deve restituire True o oppure False a un tipo di dati
convertibile in modo implicito in Boolean .
elseifstatements
facoltativo. Una o più istruzioni ElseIf che seguono... Then che vengono eseguite se elseifcondition
restituisce True .
elsestatements
facoltativo. Una o più istruzioni eseguite se nessuna condition espressione o precedente elseifcondition
restituisce True .
End If
Termina la versione multiriga di If ... Then ... Else blocco.
Commenti
Sintassi su più righe
Quando un If ... Then ... Else viene rilevata l'istruzione, condition viene testata. Se condition è True ,
vengono eseguite le istruzioni seguenti Then . Se condition è False , ogni ElseIf istruzione, se presente,
viene valutata in ordine. Quando True elseifcondition viene trovato un oggetto, vengono eseguite le
istruzioni immediatamente successive all'oggetto associato ElseIf . Se nessun elseifcondition True oggetto
restituisce o se non sono presenti ElseIf istruzioni, verranno eseguite le istruzioni seguenti Else . Dopo
l'esecuzione delle istruzioni che seguono Then , ElseIf o Else , l'esecuzione continua con l'istruzione
seguente End If .
Le ElseIf Else clausole e sono entrambe facoltative. È possibile avere tutte le ElseIf clausole desiderate in
If ... Then ... Else ma non ElseIf può comparire dopo una Else clausola. If ... Then ... Else le istruzioni
possono essere nidificate l'una all'altra.
Nella sintassi su più righe, l' If istruzione deve essere l'unica istruzione nella prima riga. Le ElseIf Else
istruzioni, e End If possono essere precedute solo da un'etichetta di riga. .. If . Then ... Else il blocco deve
terminare con un' End If istruzione.
TIP
L'oggetto Select... L'istruzione case può essere più utile quando si valuta una singola espressione con diversi valori
possibili.
Nella sintassi a riga singola è possibile eseguire più istruzioni come risultato di una If decisione... Then . Tutte
le istruzioni devono trovarsi sulla stessa riga ed essere separate da due punti.
Console.WriteLine(message)
End Sub
End Module
'This example displays output like the following:
' There are 4 items.
Module Nested
Public Sub Main()
' Run the function as part of the WriteLine output.
Console.WriteLine("Time Check is " & CheckIfTime() & ".")
End Sub
Module SingleLine
Public Sub Main()
' If A > 10, execute the three colon-separated statements in the order
' that they appear
If A > 10 Then A = A + 1 : B = B + A : C = C + B
End Sub
End Module
'This example displays output like the following:
'A value before If: 11
'B value before If: 6
'C value before If: 3
'A value after If: 12
'B value after If: 18
'C value after If: 21
Vedi anche
Choose
Switch
#If... Direttive then... #Else
Istruzione Select...Case
Strutture di controllo annidate
Strutture decisionali
Operatori logici e bit per bit in Visual Basic
Operatore If
Istruzione Implements
05/03/2021 • 4 minutes to read • Edit Online
Specifica una o più interfacce o membri di interfaccia che devono essere implementati nella definizione della
classe o della struttura in cui vengono visualizzati.
Sintassi
Implements interfacename [, ...]
' -or-
Implements interfacename.interfacemember [, ...]
Parti
interfacename
Obbligatorio. Interfaccia le cui proprietà, routine ed eventi devono essere implementati dai membri
corrispondenti nella classe o nella struttura.
interfacemember
Obbligatorio. Membro di un'interfaccia implementata.
Commenti
Un'interfaccia è una raccolta di prototipi che rappresentano i membri (proprietà, routine ed eventi) che
l'interfaccia incapsula. Le interfacce contengono solo le dichiarazioni per i membri; le classi e le strutture
implementano questi membri. Per ulteriori informazioni, vedi Interfacce.
L' Implements istruzione deve seguire immediatamente l' Class Structure istruzione o.
Quando si implementa un'interfaccia, è necessario implementare tutti i membri dichiarati nell'interfaccia.
L'omissione di qualsiasi membro viene considerato un errore di sintassi. Per implementare un singolo membro,
è necessario specificare la parola chiave Implements , che è separata dall' Implements istruzione, quando si
dichiara il membro nella classe o nella struttura. Per ulteriori informazioni, vedi Interfacce.
Le classi possono usare implementazioni private di proprietà e procedure, ma questi membri sono accessibili
solo eseguendo il cast di un'istanza della classe di implementazione in una variabile dichiarata come tipo
dell'interfaccia.
Esempio
Nell'esempio seguente viene illustrato come utilizzare l' Implements istruzione per implementare i membri di
un'interfaccia. Definisce un'interfaccia denominata ICustomerInfo con un evento, una proprietà e una routine. La
classe customerInfo implementa tutti i membri definiti nell'interfaccia.
Public Interface ICustomerInfo
Event UpdateComplete()
Property CustomerName() As String
Sub UpdateCustomerStatus()
End Interface
Si noti che la classe customerInfo Usa l' Implements istruzione in una riga separata del codice sorgente per
indicare che la classe implementa tutti i membri dell' ICustomerInfo interfaccia. Ogni membro della classe usa
quindi la Implements parola chiave come parte della dichiarazione del membro per indicare che implementa il
membro di interfaccia.
Esempio
Le due procedure seguenti illustrano come usare l'interfaccia implementata nell'esempio precedente. Per testare
l'implementazione, aggiungere queste procedure al progetto e chiamare la testImplements procedura.
Sub HandleUpdateComplete()
' This is the event handler for the UpdateComplete event.
MsgBox("Update is complete.")
End Sub
Vedi anche
Implementazioni
Istruzione Interface
Interfacce
Istruzione Imports (tipo e spazio dei nomi .NET)
05/03/2021 • 7 minutes to read • Edit Online
Consente di fare riferimento ai nomi dei tipi senza qualifica dello spazio dei nomi.
Sintassi
Imports [ aliasname = ] namespace
' -or-
Imports [ aliasname = ] namespace.element
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
L' Imports istruzione consente di fare riferimento direttamente ai tipi contenuti in un determinato spazio dei
nomi.
È possibile specificare un singolo nome di spazio dei nomi o una stringa di spazi dei nomi annidati. Ogni spazio
dei nomi annidato è separato dallo spazio dei nomi di livello superiore successivo per un punto ( . ), come
illustrato nell'esempio seguente:
Imports System.Collections.Generic
Ogni file di origine può contenere un numero qualsiasi di Imports istruzioni. Devono seguire qualsiasi
dichiarazione di opzione, ad esempio l' Option Strict istruzione, e devono precedere qualsiasi dichiarazione di
elemento di programmazione, ad esempio Module istruzioni o Class .
È possibile usare Imports solo a livello di file. Ciò significa che il contesto di dichiarazione per l'importazione
deve essere un file di origine e non può essere uno spazio dei nomi, una classe, una struttura, un modulo,
un'interfaccia, una routine o un blocco.
Si noti che l' Imports istruzione non rende disponibili gli elementi di altri progetti e assembly per il progetto.
L'importazione non comporta l'impostazione di un riferimento. Rimuove solo la necessità di qualificare i nomi
già disponibili per il progetto. Per ulteriori informazioni, vedere "importazione di elementi contenitore" in
riferimenti a elementi dichiarati.
NOTE
È possibile definire istruzioni implicite Imports usando la pagina riferimenti, Progettazione progetti (Visual Basic). Per
ulteriori informazioni, vedere procedura: aggiungere o rimuovere spazi dei nomi importati (Visual Basic).
Alias di importazione
Un alias di importazione definisce l'alias per uno spazio dei nomi o un tipo. Gli alias di importazione sono utili
quando è necessario usare elementi con lo stesso nome dichiarati in uno o più spazi dei nomi. Per ulteriori
informazioni e un esempio, vedere "qualificazione di un nome di elemento" in riferimenti a elementi dichiarati.
Non è consigliabile dichiarare un membro a livello di modulo con lo stesso nome di aliasname . In tal caso, il
compilatore Visual Basic utilizza aliasname solo per il membro dichiarato e non lo riconosce più come alias di
importazione.
Sebbene la sintassi utilizzata per dichiarare un alias di importazione sia simile a quella utilizzata per
l'importazione di un prefisso dello spazio dei nomi XML, i risultati sono diversi. Un alias di importazione può
essere usato come espressione nel codice, mentre un prefisso dello spazio dei nomi XML può essere usato solo
nei valori letterali XML o nelle proprietà Axis XML come prefisso per un nome di attributo o di elemento
completo.
Nomi di elementi
Se si specifica element , deve rappresentare un elemento contenitore, ovvero un elemento di programmazione
che può contenere altri elementi. Gli elementi contenitore includono classi, strutture, moduli, interfacce ed
enumerazioni.
L'ambito degli elementi resi disponibili da un' Imports istruzione varia a seconda che si specifichi element . Se
si specificano solo namespace , tutti i membri denominati in modo univoco dello spazio dei nomi e i membri
degli elementi contenitore all'interno di tale spazio dei nomi sono disponibili senza qualificazione. Se si
specificano sia che namespace element , solo i membri di tale elemento saranno disponibili senza qualifica.
Esempio
Nell'esempio seguente vengono restituite tutte le cartelle nella directory C: \ utilizzando la DirectoryInfo classe:
Il codice non contiene Imports istruzioni all'inizio del file. Pertanto, i DirectoryInfo StringBuilder riferimenti, e
CrLf sono tutti completi con gli spazi dei nomi.
Return sb.ToString
End Function
Esempio
Nell'esempio seguente vengono incluse Imports le istruzioni per gli spazi dei nomi a cui si fa riferimento.
Pertanto, non è necessario che i tipi siano completi con gli spazi dei nomi.
Return sb.ToString
End Function
Esempio
Nell'esempio seguente sono incluse Imports istruzioni che consentono di creare alias per gli spazi dei nomi a
cui si fa riferimento. I tipi sono qualificati con gli alias.
Return sb.ToString
End Function
Esempio
Nell'esempio seguente sono incluse Imports istruzioni per la creazione di alias per i tipi a cui si fa riferimento.
Gli alias vengono utilizzati per specificare i tipi.
Return sb.ToString
End Function
Vedi anche
Istruzione Namespace
Spazi dei nomi in Visual Basic
Riferimenti e istruzione Imports
Istruzione Imports (spazio dei nomi XML)
References to Declared Elements
Istruzione Imports (spazio dei nomi XML)
05/03/2021 • 7 minutes to read • Edit Online
Importa i prefissi degli spazi dei nomi XML da utilizzare nei valori letterali XML e nelle proprietà Axis XML.
Sintassi
Imports <xmlns:xmlNamespacePrefix = "xmlNamespaceName">
Parti
xmlNamespacePrefix
facoltativo. Stringa a cui possono fare riferimento gli elementi e gli attributi XML xmlNamespaceName . Se non
xmlNamespacePrefix viene specificato alcun oggetto, lo spazio dei nomi XML importato sarà lo spazio dei nomi
XML predefinito. Deve essere un identificatore XML valido. Per ulteriori informazioni, vedere nomi di elementi e
attributi XML dichiarati.
xmlNamespaceName
Obbligatorio. Stringa che identifica lo spazio dei nomi XML importato.
Commenti
È possibile utilizzare l' Imports istruzione per definire gli spazi dei nomi XML globali che è possibile utilizzare
con i valori letterali XML e le proprietà Axis XML o come parametri passati all' GetXmlNamespace operatore. Per
informazioni sull'uso dell' Imports istruzione per importare un alias che può essere usato in presenza di nomi
di tipo nel codice, vedere istruzione Imports (tipo e spazio dei nomi .NET). La sintassi per la dichiarazione di uno
spazio dei nomi XML tramite l' Imports istruzione è identica a quella utilizzata in XML. Pertanto, è possibile
copiare una dichiarazione dello spazio dei nomi da un file XML e utilizzarla in un' Imports istruzione.
I prefissi degli spazi dei nomi XML sono utili quando si desidera creare ripetutamente elementi XML che
appartengono allo stesso spazio dei nomi. Il prefisso dello spazio dei nomi XML dichiarato con l' Imports
istruzione è globale nel senso che è disponibile per tutto il codice del file. È possibile usarlo quando si creano
valori letterali dell'elemento XML e quando si accede alle proprietà Axis XML. Per altre informazioni, vedere
valore letterale elemento XML e Proprietà Axis XML.
Se si definisce uno spazio dei nomi XML globale senza un prefisso dello spazio dei nomi (ad esempio,), lo spazio
dei nomi Imports <xmlns="http://SomeNameSpace>" viene considerato lo spazio dei nomi XML predefinito. Lo
spazio dei nomi XML predefinito viene utilizzato per qualsiasi valore letterale elemento XML o proprietà asse
degli attributi XML che non specificano in modo esplicito uno spazio dei nomi. Lo spazio dei nomi predefinito
viene utilizzato anche se lo spazio dei nomi specificato è lo spazio dei nomi vuoto (ovvero xmlns="" ). Lo spazio
dei nomi XML predefinito non si applica agli attributi XML nei valori letterali XML o alle proprietà axis
dell'attributo XML che non dispongono di uno spazio dei nomi.
Gli spazi dei nomi XML definiti in un valore letterale XML, denominati spazi dei nomi XML locali, hanno la
precedenza sugli spazi dei nomi XML definiti dall' Imports istruzione come globali. Gli spazi dei nomi XML
definiti dall' Imports istruzione hanno la precedenza sugli spazi dei nomi XML importati per un progetto Visual
Basic. Se un valore letterale XML definisce uno spazio dei nomi XML, tale spazio dei nomi locale non si applica
alle espressioni incorporate.
Gli spazi dei nomi XML globali seguono le stesse regole di definizione e definizione dell'ambito di .NET
Framework spazi dei nomi. Di conseguenza, è possibile includere un' Imports istruzione per definire uno spazio
dei nomi XML globale ovunque sia possibile importare uno spazio dei nomi .NET Framework. Sono inclusi i file
di codice e gli spazi dei nomi importati a livello di progetto. Per informazioni sugli spazi dei nomi importati a
livello di progetto, vedere pagina riferimenti, Progettazione progetti (Visual Basic).
Ogni file di origine può contenere un numero qualsiasi di Imports istruzioni. Devono seguire le dichiarazioni di
opzioni, ad esempio l' Option Strict istruzione, e devono precedere le dichiarazioni degli elementi di
programmazione, ad esempio le Module Class istruzioni o.
Esempio
Nell'esempio seguente viene importato uno spazio dei nomi XML predefinito e uno spazio dei nomi XML
identificato con il prefisso ns . Viene quindi creato un valore letterale XML che utilizza entrambi gli spazi dei
nomi.
Module Module1
Sub Main()
' Create element by using the default global XML namespace.
Dim inner = <innerElement/>
' Create element by using both the default global XML namespace
' and the namespace identified with the "ns" prefix.
Dim outer = <ns:outer>
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
<%= inner %>
</ns:outer>
End Module
<ns:outer xmlns="http://DefaultNamespace"
xmlns:ns="http://NewNamespace">
<ns:innerElement></ns:innerElement>
<siblingElement></siblingElement>
<innerElement />
</ns:outer>
Esempio
Nell'esempio seguente viene importato il prefisso dello spazio dei nomi XML ns . Viene quindi creato un valore
letterale XML che utilizza il prefisso dello spazio dei nomi e viene visualizzato il formato finale dell'elemento.
' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1/>
<%= inner2 %>
</ns:middle>
</ns:outer>
End Class
<ns:outer xmlns:ns="http://SomeNamespace">
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1 />
<inner2 xmlns="http://SomeNamespace" />
</ns:middle>
</ns:outer>
Si noti che il compilatore ha convertito il prefisso dello spazio dei nomi XML da un prefisso globale a una
definizione di prefisso locale.
Esempio
Nell'esempio seguente viene importato il prefisso dello spazio dei nomi XML ns . Il prefisso dello spazio dei
nomi viene quindi usato per creare un valore letterale XML e accedere al primo nodo figlio con il nome
completo ns:name .
Class TestClass4
End Class
Vedi anche
Valore letterale di elemento XML
Proprietà Axis XML
Nomi di elementi e attributi XML dichiarati
Operatore GetXmlNamespace
Inherits Statement
05/03/2021 • 4 minutes to read • Edit Online
Fa in modo che la classe o l'interfaccia corrente erediti gli attributi, le variabili, le proprietà, le procedure e gli
eventi da un'altra classe o set di interfacce.
Sintassi
Inherits basetypenames
Parti
T ERM IN E DEF IN IZ IO N E
-oppure-
Commenti
Se utilizzata, l' Inherits istruzione deve essere la prima riga non vuota non di commento in una definizione di
classe o di interfaccia. Deve seguire immediatamente l' Class istruzione o Interface .
È possibile utilizzare Inherits solo in una classe o in un'interfaccia. Ciò significa che il contesto di dichiarazione
per un'ereditarietà non può essere un file di origine, uno spazio dei nomi, una struttura, un modulo, una
procedura o un blocco.
Regole
Ereditarietà della classe. Se una classe utilizza l' Inherits istruzione, è possibile specificare una sola
classe di base.
Una classe non può ereditare da una classe annidata al suo interno.
Ereditarietà dell'interfaccia. Se un'interfaccia usa l' Inherits istruzione, è possibile specificare una o
più interfacce di base. È possibile ereditare da due interfacce anche se ognuna definisce un membro con
lo stesso nome. In tal caso, il codice di implementazione deve usare la qualificazione del nome per
specificare il membro che sta implementando.
Un'interfaccia non può ereditare da un'altra interfaccia con un livello di accesso più restrittivo.
Un'interfaccia, ad esempio, Public non può ereditare da un' Friend interfaccia.
Un'interfaccia non può ereditare da un'interfaccia annidata al suo interno.
Un esempio di ereditarietà della classe nel .NET Framework è la ArgumentException classe, che eredita dalla
SystemException classe. In questo modo vengono fornite ArgumentException tutte le proprietà e le procedure
predefinite richieste dalle eccezioni di sistema, ad esempio la Message proprietà e il ToString metodo.
Un esempio di ereditarietà dell'interfaccia nel .NET Framework è l' ICollection interfaccia, che eredita dall'
IEnumerable interfaccia. Questo fa ICollection in modo che erediti la definizione dell'enumeratore necessario per
attraversare una raccolta.
Esempio
Nell'esempio seguente viene utilizzata l' Inherits istruzione per mostrare in che modo una classe denominata
thisClass può ereditare tutti i membri di una classe di base denominata anotherClass .
Esempio
Nell'esempio seguente viene illustrata l'ereditarietà di più interfacce.
L'interfaccia denominata thisInterface include ora tutte le definizioni nelle IComparable interfacce, IDisposable
e, che IFormattable i membri ereditati forniscono rispettivamente per il confronto specifico del tipo di due
oggetti, il rilascio delle risorse allocate e l'espressione del valore di un oggetto come String . Una classe che
implementa thisInterface deve implementare tutti i membri di ogni interfaccia di base.
Vedi anche
MustInherit
NotInheritable
Oggetti e classi
Nozioni fondamentali sull'ereditarietà
Interfacce
Istruzione Interface (Visual Basic)
05/03/2021 • 11 minutes to read • Edit Online
Sintassi
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
Parti
T ERM IN E DEF IN IZ IO N E
- Pubblico
- Protetto
- Amico
- Privata
- Amico protetto
- Privato protetto
Commenti
Un' interfaccia definisce un set di membri, ad esempio proprietà e procedure, che possono essere implementate
da classi e strutture. L'interfaccia definisce solo le firme dei membri e non i rispettivi meccanismi interni.
Una classe o una struttura implementa l'interfaccia fornendo il codice per ogni membro definito dall'interfaccia.
Infine, quando l'applicazione crea un'istanza da tale classe o struttura, un oggetto esiste e viene eseguito in
memoria. Per ulteriori informazioni, vedere oggetti e classi e interfacce.
È possibile usare Interface solo a livello di spazio dei nomi o di modulo. Ciò significa che il contesto di
dichiarazione per un'interfaccia deve essere un file di origine, uno spazio dei nomi, una classe, una struttura, un
modulo o un'interfaccia e non può essere una routine o un blocco. Per altre informazioni, vedere Contesti delle
dichiarazioni e livelli di accesso predefiniti.
Per impostazione predefinita, le interfacce sono accessi Friend . È possibile modificare i livelli di accesso con i
modificatori di accesso. Per altre informazioni, vedere livelli di accesso in Visual Basic.
Regole
Annidamento di interfacce. È possibile definire un'interfaccia in un'altra. L'interfaccia esterna viene
chiamata interfaccia contenitore e l'interfaccia interna è chiamata interfaccia nidificata.
Dichiarazione del membro. Quando si dichiara una proprietà o una routine come membro di
un'interfaccia, si definisce solo la firma della proprietà o della routine. Sono inclusi il tipo di elemento
(proprietà o routine), i parametri e i tipi di parametro e il tipo restituito. Per questo motivo, nella
definizione del membro viene utilizzata solo una riga di codice e le istruzioni che terminano, ad esempio
End Function o, End Property non sono valide in un'interfaccia.
Al contrario, quando si definisce un'enumerazione o una struttura o una classe o un'interfaccia annidata, è
necessario includere i relativi membri dati.
Modificatori di membro. Non è possibile usare alcun modificatore di accesso quando si definiscono i
membri del modulo, né è possibile specificare un modificatore di routine condiviso o qualsiasi, ad
eccezione degli Overload. È possibile dichiarare qualsiasi membro con Shadowsed è possibile utilizzare
default quando si definisce una proprietà, nonché ReadOnly o WriteOnly.
Ereditarietà. Se l'interfaccia utilizza l' istruzione Inherits, è possibile specificare una o più interfacce di
base. È possibile ereditare da due interfacce anche se ognuna definisce un membro con lo stesso nome.
In tal caso, il codice di implementazione deve usare la qualificazione del nome per specificare il membro
che sta implementando.
Un'interfaccia non può ereditare da un'altra interfaccia con un livello di accesso più restrittivo.
Un'interfaccia, ad esempio, Public non può ereditare da un' Friend interfaccia.
Un'interfaccia non può ereditare da un'interfaccia annidata al suo interno.
Implementazione. Quando una classe utilizza l'istruzione Implements per implementare questa
interfaccia, deve implementare tutti i membri definiti all'interno dell'interfaccia. Inoltre, ogni firma nel
codice di implementazione deve corrispondere esattamente alla firma corrispondente definita in questa
interfaccia. Tuttavia, il nome del membro nel codice di implementazione non deve corrispondere al nome
del membro come definito nell'interfaccia.
Quando una classe implementa una routine, non può designare la procedura come Shared .
Proprietà predefinita. Un'interfaccia può specificare al massimo una proprietà come proprietà
predefinita, a cui è possibile fare riferimento senza utilizzare il nome della proprietà. Per specificare tale
proprietà, è necessario dichiararla con il modificatore predefinito .
Si noti che questo significa che un'interfaccia può definire una proprietà predefinita solo se eredita
nessuno.
Comportamento
Livello di accesso. Tutti i membri dell'interfaccia hanno in modo implicito l'accesso pubblico . Non è
possibile usare alcun modificatore di accesso per la definizione di un membro. Tuttavia, una classe che
implementa l'interfaccia può dichiarare un livello di accesso per ogni membro implementato.
Se si assegna un'istanza di classe a una variabile, il livello di accesso dei relativi membri può dipendere
dal fatto che il tipo di dati della variabile sia l'interfaccia sottostante o la classe di implementazione.
Questa condizione è illustrata nell'esempio seguente.
Public Interface IDemo
Sub DoSomething()
End Interface
Public Class implementIDemo
Implements IDemo
Private Sub DoSomething() Implements IDemo.DoSomething
End Sub
End Class
Dim varAsInterface As IDemo = New implementIDemo()
Dim varAsClass As implementIDemo = New implementIDemo()
Se si accede ai membri della classe tramite varAsInterface , tutti hanno accesso pubblico. Tuttavia, se si
accede ai membri tramite varAsClass , la Sub procedura doSomething ha accesso privato.
Ambito. Un'interfaccia è nell'ambito di tutti i relativi spazi dei nomi, classe, struttura o modulo.
L'ambito di ogni membro di interfaccia è l'intera interfaccia.
Vita. Un'interfaccia non ha una durata, né i relativi membri. Quando una classe implementa un'interfaccia
e un oggetto viene creato come un'istanza di tale classe, l'oggetto ha una durata all'interno
dell'applicazione in cui è in esecuzione. Per ulteriori informazioni, vedere "Lifetime" nell' istruzione Class.
Esempio
Nell'esempio seguente viene utilizzata l' Interface istruzione per definire un'interfaccia denominata
thisInterface , che deve essere implementata con un' Property istruzione e un' Function istruzione.
Si noti che Propertyle Function istruzioni e non introducono blocchi che terminano con End Property e
End Function all'interno dell'interfaccia. L'interfaccia definisce solo le firme dei relativi membri. I Property
blocchi completi e Function vengono visualizzati in una classe che implementa thisInterface .
Vedi anche
Interfacce
Istruzione Class
Istruzione Module
Istruzione Structure
Property Statement
Istruzione Function
Istruzione Sub
Generic Types in Visual Basic
Varianza nelle interfacce generiche
In
Out
Istruzione Mid
05/03/2021 • 2 minutes to read • Edit Online
Sostituisce un numero specificato di caratteri in una String variabile con caratteri di un'altra stringa.
Sintassi
Mid( _
ByRef Target As String, _
ByVal Start As Integer, _
Optional ByVal Length As Integer _
) = StringExpression
Parti
Target
Obbligatorio. Nome della String variabile da modificare.
Start
Obbligatorio. Espressione Integer . Posizione del carattere in in Target cui inizia la sostituzione del testo.
Start Usa un indice in base uno.
Length
facoltativo. Espressione Integer . Numero di caratteri da sostituire. Se omesso, String viene utilizzato tutto.
StringExpression
Obbligatorio. String espressione che sostituisce parte di Target .
Eccezioni
T IP O DI EC C EZ IO N E C O N DIZ IO N E
Commenti
Il numero di caratteri sostituiti è sempre minore o uguale al numero di caratteri in Target .
Visual Basic dispone di una Mid funzione e di un' Mid istruzione. Questi elementi operano entrambi su un
numero specificato di caratteri in una stringa, ma la Mid funzione restituisce i caratteri mentre l' Mid istruzione
sostituisce i caratteri. Per altre informazioni, vedere Mid.
NOTE
L' MidB istruzione di versioni precedenti di Visual Basic sostituisce una sottostringa in byte, anziché caratteri. Viene
utilizzato principalmente per la conversione di stringhe in applicazioni DBCS (Double-byte character set). Tutte le stringhe
di Visual Basic sono in formato Unicode e MidB non sono più supportate.
Esempio
In questo esempio viene utilizzata l' Mid istruzione per sostituire un numero specificato di caratteri in una
variabile di stringa con caratteri di un'altra stringa.
Requisiti
Spazio dei nomi: Microsoft. VisualBasic
Modulo: Strings
Vedi anche
Mid
Stringhe
Introduzione alle stringhe in Visual Basic
Istruzione Module
05/03/2021 • 6 minutes to read • Edit Online
Dichiara il nome di un modulo e introduce la definizione di variabili, proprietà, eventi e procedure inclusi nel
modulo.
Sintassi
[ <attributelist> ] [ accessmodifier ] Module name
[ statements ]
End Module
Parti
attributelist
facoltativo. Vedere elenco attributi.
accessmodifier
facoltativo. Può essere uno dei seguenti:
Pubblica
Friend
Vedere livelli di accesso in Visual Basic.
name
Obbligatorio. Nome del modulo. Vedere Declared Element Names.
statements
facoltativo. Istruzioni che definiscono le variabili, le proprietà, gli eventi, le procedure e i tipi annidati di questo
modulo.
End Module
Termina la Module definizione.
Commenti
Un' Module istruzione definisce un tipo di riferimento disponibile in tutto il relativo spazio dei nomi. Un modulo
(talvolta denominato modulo standard) è simile a una classe ma con alcune importanti differenze. Ogni modulo
dispone esattamente di un'istanza e non è necessario crearlo o assegnarlo a una variabile. I moduli non
supportano l'ereditarietà né implementano le interfacce. Si noti che un modulo non è un tipo nel senso che una
classe o una struttura è: non è possibile dichiarare un elemento di programmazione per avere il tipo di dati di un
modulo.
È possibile usare Module solo a livello di spazio dei nomi. Ciò significa che il contesto di dichiarazione per un
modulo deve essere un file di origine o uno spazio dei nomi e non può essere una classe, una struttura, un
modulo, un'interfaccia, una routine o un blocco. Non è possibile annidare un modulo all'interno di un altro
modulo o all'interno di qualsiasi tipo. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di
accesso predefiniti.
Un modulo ha la stessa durata del programma. Poiché i relativi membri sono tutti Shared , hanno anche durate
uguali a quelle del programma.
Per impostazione predefinita, i moduli sono con accesso Friend . È possibile modificare i livelli di accesso con i
modificatori di accesso. Per altre informazioni, vedere livelli di accesso in Visual Basic.
Tutti i membri di un modulo sono implicitamente Shared .
Classi e moduli
Questi elementi presentano molte analogie, ma esistono anche alcune differenze importanti.
Terminologia. Le versioni precedenti di Visual Basic riconoscono due tipi di moduli: moduli di classe (file
con estensione CLS) e moduli standard (file con estensione BAS). La versione corrente chiama queste
classi e moduli, rispettivamente.
Membri condivisi. È possibile controllare se un membro di una classe è un membro condiviso o di
istanza.
Orientamento dell'oggetto. Le classi sono orientate agli oggetti, ma i moduli non lo sono. È quindi
possibile creare un'istanza di solo classi come oggetti. Per altre informazioni, vedere oggetti e classi.
Regole
Modificatori. Tutti i membri del modulo sono condivisiin modo implicito. Non è possibile usare la
Shared parola chiave quando si dichiara un membro e non è possibile modificare lo stato condiviso di
un membro.
Ereditarietà. Un modulo non può ereditare da un tipo diverso Object da, da cui tutti i moduli ereditano.
In particolare, un modulo non può ereditare da un altro modulo.
Non è possibile usare l' istruzione Inherits in una definizione di modulo, anche per specificare Object .
Proprietà predefinita. Non è possibile definire proprietà predefinite in un modulo. Per ulteriori
informazioni, vedere default.
Comportamento
Livello di accesso. All'interno di un modulo, è possibile dichiarare ogni membro con il proprio livello di
accesso. Per impostazione predefinita, i membri del modulo hanno accesso pubblico , ad eccezione delle
variabili e delle costanti, per impostazione predefinita l'accesso privato . Quando un modulo dispone di
un accesso più limitato di uno dei relativi membri, il livello di accesso del modulo specificato ha la
precedenza.
Ambito. Un modulo è nell'ambito dello spazio dei nomi.
L'ambito di ogni membro del modulo è l'intero modulo. Si noti che tutti i membri subiscono l'
innalzamento di livello del tipo, che ne determina l'innalzamento di livello allo spazio dei nomi
contenente il modulo. Per ulteriori informazioni, vedere promozione del tipo.
Qualificazione. È possibile avere più moduli in un progetto ed è possibile dichiarare membri con lo
stesso nome in due o più moduli. Tuttavia, è necessario qualificare qualsiasi riferimento a tale membro
con il nome del modulo appropriato se il riferimento è esterno al modulo. Per altre informazioni, vedere
References to Declared Elements.
Esempio
Public Module thisModule
Sub Main()
Dim userName As String = InputBox("What is your name?")
MsgBox("User name is " & userName)
End Sub
' Insert variable, property, procedure, and event declarations.
End Module
Vedere anche
Istruzione Class
Istruzione Namespace
Istruzione Structure
Istruzione Interface
Property Statement
Promozione tipo
Istruzione Namespace
05/03/2021 • 9 minutes to read • Edit Online
Dichiara il nome di uno spazio dei nomi e fa in modo che il codice sorgente che segue la dichiarazione venga
compilato in tale spazio dei nomi.
Sintassi
Namespace [Global.] { name | name.name }
[ componenttypes ]
End Namespace
Parti
Globale
facoltativo. Consente di definire uno spazio dei nomi all'esterno dello spazio dei nomi radice del progetto.
Vedere spazi dei nomi in Visual Basic.
name
Obbligatorio. Nome univoco che identifica lo spazio dei nomi. Deve essere un identificatore di Visual Basic
valido. Per ulteriori informazioni, vedere nomi di elementi dichiarati.
componenttypes
facoltativo. Elementi che costituiscono lo spazio dei nomi. Sono inclusi, tra gli altri, le enumerazioni, le strutture,
le interfacce, le classi, i moduli, i delegati e altri spazi dei nomi.
End Namespace
Termina un Namespace blocco.
Commenti
Gli spazi dei nomi vengono usati come sistema organizzativo. Forniscono un modo per classificare e presentare
gli elementi di programmazione esposti ad altri programmi e applicazioni. Si noti che uno spazio dei nomi non è
un tipo nel senso che una classe o una struttura è: non è possibile dichiarare un elemento di programmazione
per avere il tipo di dati di uno spazio dei nomi.
Tutti gli elementi di programmazione dichiarati dopo un' Namespace istruzione appartengono a tale spazio dei
nomi. Visual Basic continua a compilare elementi nell'ultimo spazio dei nomi dichiarato fino a quando non rileva
un' End Namespace istruzione o un'altra Namespace istruzione.
Se uno spazio dei nomi è già definito, anche all'esterno del progetto, è possibile aggiungervi elementi di
programmazione. A tale scopo, è possibile utilizzare un' Namespace istruzione per indirizzare Visual Basic
compilare elementi nello spazio dei nomi.
È possibile utilizzare un' Namespace istruzione solo a livello di file o di spazio dei nomi. Ciò significa che il
contesto di dichiarazione per uno spazio dei nomi deve essere un file di origine o un altro spazio dei nomi e non
può essere una classe, una struttura, un modulo, un'interfaccia o una routine. Per altre informazioni, vedere
Contesti delle dichiarazioni e livelli di accesso predefiniti.
È possibile dichiarare uno spazio dei nomi all'interno di un altro. Non esiste un limite limitato ai livelli di
annidamento che è possibile dichiarare, ma tenere presente che quando altro codice accede agli elementi
dichiarati nello spazio dei nomi più interno, deve usare una stringa di qualificazione contenente tutti i nomi degli
spazi dei nomi nella gerarchia di nidificazione.
Livello di accesso
Gli spazi dei nomi vengono considerati come se avessero un Public livello di accesso. È possibile accedere a
uno spazio dei nomi dal codice in qualsiasi punto dello stesso progetto, da altri progetti che fanno riferimento al
progetto e da qualsiasi assembly compilato dal progetto.
Gli elementi di programmazione dichiarati a livello di spazio dei nomi, ovvero in uno spazio dei nomi, ma non
all'interno di altri elementi, possono avere Public o Friend accedere Se non è specificato, il livello di accesso
di tale elemento usa Friend per impostazione predefinita. Gli elementi che è possibile dichiarare a livello di
spazio dei nomi includono classi, strutture, moduli, interfacce, enumerazioni e delegati. Per altre informazioni,
vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.
Se si desidera specificare uno spazio dei nomi esistente in un' Namespace istruzione, ad esempio nell'esempio
della classe di elenco generico, è possibile impostare lo spazio dei nomi radice su un valore null. A tale scopo,
fare clic su Proprietà progetto dal menu progetto , quindi deselezionare la voce spazio dei nomi radice in
modo che la casella sia vuota. Se questa operazione non è stata eseguita nell'esempio di classe di elenco
generico, il compilatore Visual Basic accetta System.Collections.Generic come nuovo spazio dei nomi all'interno
del progetto Payroll , con il nome completo di Payroll.System.Collections.Generic .
In alternativa, è possibile usare la Global parola chiave per fare riferimento a elementi di spazi dei nomi definiti
all'esterno del progetto. Questa operazione consente di mantenere il nome del progetto come spazio dei nomi
radice. In questo modo si riduce la possibilità di unire involontariamente gli elementi di programmazione
insieme a quelli degli spazi dei nomi esistenti. Per ulteriori informazioni, vedere la sezione "parola chiave Global
in nomi completi" in spazi dei nomi in Visual Basic.
La Global parola chiave può essere utilizzata anche in un'istruzione dello spazio dei nomi. Ciò consente di
definire uno spazio dei nomi all'esterno dello spazio dei nomi radice del progetto. Per ulteriori informazioni,
vedere la sezione "parola chiave Global nelle istruzioni dello spazio dei nomi" negli spazi dei nomi in Visual
Basic.
Risoluzione dei problemi. Lo spazio dei nomi radice può causare concatenazioni impreviste dei nomi degli
spazi dei nomi. Se si fa riferimento agli spazi dei nomi definiti all'esterno del progetto, il compilatore Visual Basic
può interpretarerli come spazi dei nomi annidati nello spazio dei nomi radice. In tal caso, il compilatore non
riconosce alcun tipo già definito negli spazi dei nomi esterni. Per evitare questo problema, impostare lo spazio
dei nomi radice su un valore null come descritto in "spazio dei nomi radice" oppure utilizzare la Global parola
chiave per accedere agli elementi degli spazi dei nomi esterni.
Attributi e modificatori
Non è possibile applicare attributi a uno spazio dei nomi. Un attributo fornisce informazioni ai metadati
dell'assembly, che non sono significativi per i classificatori di origine, ad esempio gli spazi dei nomi.
In uno spazio dei nomi non è possibile applicare alcun modificatore di accesso o di routine o altri modificatori.
Poiché non è un tipo, questi modificatori non sono significativi.
Esempio
Nell'esempio seguente vengono dichiarati due spazi dei nomi, uno annidato nell'altro.
Namespace n1
Namespace n2
Class a
' Insert class definition.
End Class
End Namespace
End Namespace
Esempio
Nell'esempio seguente vengono dichiarati più spazi dei nomi annidati su una sola riga ed è equivalente
all'esempio precedente.
Namespace n1.n2
Class a
' Insert class definition.
End Class
End Namespace
Esempio
Nell'esempio seguente viene accesso alla classe definita negli esempi precedenti.
Esempio
Nell'esempio seguente viene definita la struttura di una nuova classe di elenco generica che viene aggiunta allo
System.Collections.Generic spazio dei nomi.
Namespace System.Collections.Generic
Class specialSortedList(Of T)
Inherits List(Of T)
' Insert code to define the special generic list class.
End Class
End Namespace
Vedi anche
Istruzione Imports (tipo e spazio dei nomi .NET)
Declared Element Names
Spazi dei nomi in Visual Basic
Istruzione On Error (Visual Basic)
05/03/2021 • 15 minutes to read • Edit Online
Abilita una routine di gestione degli errori e specifica il percorso della routine all'interno di una routine. può
essere usato anche per disabilitare una routine di gestione degli errori. L' On Error istruzione viene utilizzata
nella gestione degli errori non strutturata e può essere utilizzata al posto della gestione strutturata delle
eccezioni. La gestione strutturata delle eccezioni è incorporata in .NET, è in genere più efficiente ed è quindi
consigliabile quando si gestiscono errori di runtime nell'applicazione.
Senza la gestione degli errori o la gestione delle eccezioni, eventuali errori di run-time che si verificano sono
irreversibili: viene visualizzato un messaggio di errore e l'esecuzione viene arrestata.
NOTE
La Error parola chiave viene inoltre utilizzata nell' istruzione Error, supportata per la compatibilità con le versioni
precedenti.
Sintassi
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
NOTE
Si consiglia di utilizzare la gestione delle eccezioni strutturata nel codice, quando possibile, anziché utilizzare la gestione
delle eccezioni non strutturata e l' On Error istruzione. Per altre informazioni, vedere Istruzione Try...Catch...Finally.
Un gestore degli errori "Enabled" è uno attivato da un' On Error istruzione. Un gestore degli errori "attivo" è un
gestore abilitato che sta gestendo un errore.
Se si verifica un errore durante l'attivazione di un gestore errori (tra l'occorrenza dell'errore e un' Resume
Exit Sub istruzione,, Exit Function o Exit Property ), il gestore degli errori della procedura corrente non è in
grado di gestire l'errore. Il controllo torna alla procedura chiamante.
Se la procedura chiamante dispone di un gestore degli errori abilitato, viene attivata per gestire l'errore. Se
anche il gestore errori della procedura chiamante è attivo, il controllo passa di nuovo attraverso le routine di
chiamata precedenti fino a quando non viene trovato un gestore degli errori abilitato, ma inattivo. Se non viene
trovato alcun gestore di errori di questo tipo, l'errore è irreversibile nel punto in cui si è effettivamente verificato.
Ogni volta che il gestore degli errori passa di nuovo il controllo a una routine chiamante, tale procedura diventa
la routine corrente. Quando un errore viene gestito da un gestore degli errori in qualsiasi routine, l'esecuzione
riprende nella procedura corrente nel punto indicato dall' Resume istruzione.
NOTE
Una routine di gestione degli errori non è una Sub procedura o una Function procedura. Si tratta di una sezione di
codice contrassegnata da un'etichetta di riga o un numero di riga.
Proprietà Number
Le routine di gestione degli errori si basano sul valore della Number proprietà dell' Err oggetto per
determinare la cause dell'errore. La routine deve verificare o salvare i valori delle proprietà rilevanti nell' Err
oggetto prima che venga generato un altro errore o prima che venga chiamata una procedura che può causare
un errore. I valori delle proprietà nell' Err oggetto riflettono solo l'errore più recente. Il messaggio di errore
associato a Err.Number è contenuto in Err.Description .
Istruzione Throw
Un errore generato con il Err.Raise metodo imposta la Exception proprietà su un'istanza appena creata della
Exception classe. Per supportare la generazione di eccezioni di tipi di eccezioni derivate, Throw nel linguaggio è
supportata un'istruzione. Questo accetta un solo parametro che rappresenta l'istanza di eccezione da generare.
Nell'esempio seguente viene illustrato il modo in cui queste funzionalità possono essere utilizzate con il
supporto per la gestione delle eccezioni esistente:
Si noti che l' On Error GoTo istruzione intrappola tutti gli errori, indipendentemente dalla classe Exception.
NOTE
Il On Error Resume Next costrutto può essere preferibile a On Error GoTo quando si gestiscono gli errori generati
durante l'accesso ad altri oggetti. Err Il controllo dopo ogni interazione con un oggetto comporta la rimozione
dell'ambiguità sull'oggetto a cui il codice ha eseguito l'accesso. È possibile essere certi dell'oggetto in cui è stato inserito il
codice di errore, nonché dell' Err.Number oggetto che ha generato in origine l'errore (l'oggetto specificato in
Err.Source ).
In errore GoTo 0
On Error GoTo 0 Disabilita la gestione degli errori nella procedura corrente. Non viene specificata la riga 0 come
inizio del codice di gestione degli errori, anche se la procedura contiene una riga con numero 0. Senza un'
On Error GoTo 0 istruzione, un gestore degli errori viene disabilitato automaticamente quando si esce da una
routine.
In errore GoTo-1
On Error GoTo -1 Disabilita l'eccezione nella routine corrente. Non specifica la riga 1 come inizio del codice di
gestione degli errori, anche se la procedura contiene una riga numerata-1. Senza un' On Error GoTo -1
istruzione, un'eccezione viene disabilitata automaticamente quando si esce da una routine.
Per impedire l'esecuzione di codice di gestione degli errori quando non si è verificato alcun errore, inserire un'
Exit Sub Exit Function istruzione, o Exit Property immediatamente prima della routine di gestione degli
errori, come nel frammento seguente:
In questo caso, il codice di gestione degli errori segue l' Exit Sub istruzione e precede l' End Sub istruzione per
separarla dal flusso di procedura. È possibile inserire il codice di gestione degli errori in qualsiasi punto di una
procedura.
Cau t i on
Gli errori di sistema durante le chiamate alle librerie di collegamento dinamico (dll) di Windows non generano
eccezioni e non possono essere intercettati con Visual Basic l'intercettazione degli errori. Quando si chiamano le
funzioni DLL, è necessario controllare ogni valore restituito per l'esito positivo o negativo (in base alle specifiche
API) e, in caso di errore, controllare il valore nella Err proprietà dell'oggetto LastDLLError .
Esempio
In questo esempio viene innanzitutto utilizzata l' On Error GoTo istruzione per specificare il percorso di una
routine di gestione degli errori all'interno di una routine. Nell'esempio, un tentativo di dividere per zero genera
il numero di errore 6. L'errore viene gestito nella routine di gestione degli errori e il controllo viene quindi
restituito all'istruzione che ha causato l'errore. L' On Error GoTo 0 istruzione disattiva l'intercettazione degli
errori. Viene quindi On Error Resume Next utilizzata l'istruzione per rinviare l'intercettazione degli errori, in
modo che il contesto per l'errore generato dall'istruzione successiva possa essere noto per alcuni. Si noti che
Err.Clear viene usato per cancellare le Err proprietà dell'oggetto dopo che l'errore è stato gestito.
Requisiti
Spazio dei nomi: Microsoft. VisualBasic
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Err
Number
Description
LastDllError
Istruzione End
Istruzione Exit
Istruzione Resume
Messaggi di errore
Istruzione Try...Catch...Finally
Operator Statement
05/03/2021 • 10 minutes to read • Edit Online
Dichiara il simbolo dell'operatore, gli operandi e il codice che definiscono una routine di operatore in una classe
o una struttura.
Sintassi
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Parti
attrlist
facoltativo. Vedere elenco attributi.
Public
Obbligatorio. Indica che questa routine dell'operatore dispone di accesso pubblico .
Overloads
facoltativo. Vedere Overload.
Shared
Obbligatorio. Indica che questa routine dell'operatore è una procedura condivisa .
Shadows
facoltativo. Vedere Shadows.
Widening
Obbligatorio per un operatore di conversione, a meno che non si specifichi Narrowing . Indica che questa
routine dell'operatore definisce una conversione verso un tipo di contenuto più ampio . Vedere "conversioni
verso un tipo di ampliamento e riduzione" in questa pagina della guida.
Narrowing
Obbligatorio per un operatore di conversione, a meno che non si specifichi Widening . Indica che questa routine
dell'operatore definisce una conversione verso un tipo di caratteri più piccolo . Vedere "conversioni verso un
tipo di ampliamento e riduzione" in questa pagina della guida.
operatorsymbol
Obbligatorio. Simbolo o identificatore dell'operatore definito da questa routine di operatore.
operand1
Obbligatorio. Il nome e il tipo del singolo operando di un operatore unario (incluso un operatore di conversione)
o l'operando sinistro di un operatore binario.
operand2
Obbligatorio per gli operatori binari. Nome e tipo dell'operando di destra di un operatore binario.
operand1 e operand2 presentano la sintassi e le parti seguenti:
[ ByVal ] operandname [ As operandtype ]
PA RT E DESC RIZ IO N E
type
Facoltativo a meno che non Option Strict sia On . Tipo di dati del valore restituito dalla routine dell'operatore.
statements
facoltativo. Blocco di istruzioni eseguite dalla stored procedure.
returnvalue
Obbligatorio. Valore restituito dalla routine Operator al codice chiamante.
End Operator
Obbligatorio. Termina la definizione di questa routine di operatore.
Commenti
È possibile utilizzare Operator solo in una classe o una struttura. Ciò significa che il contesto di dichiarazione
per un operatore non può essere un file di origine, uno spazio dei nomi, un modulo, un'interfaccia, una routine o
un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.
Tutti gli operatori devono essere Public Shared . Non è possibile specificare ByRef , Optional o ParamArray
per uno degli operandi.
Non è possibile usare il simbolo dell'operatore o l'identificatore per mantenere un valore restituito. È necessario
utilizzare l' Return istruzione ed è necessario specificare un valore. Qualsiasi numero di Return istruzioni può
comparire in qualsiasi punto della procedura.
La definizione di un operatore in questo modo viene chiamata Overload degli operatori, indipendentemente dal
fatto che si usi la Overloads parola chiave. La tabella seguente elenca gli operatori che è possibile definire.
T IP O O P ERATO RI
Si noti che l'operatore = nell'elenco binario è l'operatore di confronto, non l'operatore di assegnazione.
Quando si definisce CType , è necessario specificare Widening o Narrowing .
Coppie corrispondenti
È necessario definire determinati operatori come coppie corrispondenti. Se si definisce uno degli operatori di
tale coppia, è necessario definire anche l'altro. Le coppie corrispondenti sono le seguenti:
= e <>
> e <
>= e <=
IsTrue e IsFalse
Il tipo restituito non deve corrispondere al tipo di uno degli operandi. Un operatore di confronto, ad esempio, =
<> può essere restituito Boolean anche se nessuno degli operandi è Boolean .
Analogamente, è possibile usare OrElse se è stato definito Or negli stessi operandi, con il tipo restituito della
classe o della struttura, ed è stato definito IsTrue sulla classe o sulla struttura.
Esempio
Nell'esempio di codice seguente viene utilizzata l' Operator istruzione per definire il contorno di una struttura
che include routine di operatore per gli And operatori, Or , IsFalse e IsTrue . And e Or accettano due
operandi di tipo abc e tipo restituito abc . IsFalse e IsTrue accettano un solo operando di tipo abc e
restituiscono Boolean . Queste definizioni consentono al codice chiamante di usare And , AndAlso , Or e
OrElse con operandi di tipo abc .
Vedi anche
Operatore IsFalse
Operatore IsTrue
Widening
Narrowing
Widening and Narrowing Conversions
Routine di operatore
Procedura: definire un operatore
Procedura: Definire un operatore di conversione
Procedura: chiamare una routine di operatore
Procedura: utilizzare una classe che definisce gli operatori
Istruzione Option <keyword>
05/03/2021 • 2 minutes to read • Edit Online
Introduce un'istruzione che specifica un'opzione del compilatore da applicare all'intero file di origine.
Commenti
Le opzioni del compilatore consentono di controllare se tutte le variabili devono essere dichiarate in modo
esplicito, se le conversioni di tipi più piccole devono essere esplicite o se le stringhe devono essere confrontate
come testo o come quantità binarie.
È possibile usare la parola chiave Option nei contesti seguenti:
Istruzione Option Compare
Istruzione Option Explicit
Option Infer (istruzione)
Option Strict Statement
Vedi anche
Parole chiave
Istruzione Option Compare
05/03/2021 • 6 minutes to read • Edit Online
Dichiara il metodo di confronto predefinito da usare durante il confronto dei dati di tipo stringa.
Sintassi
Option Compare { Binary | Text }
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Se usato, è necessario includere l'istruzione Option Compare in un file prima di tutte le altre istruzioni del codice
sorgente.
L'istruzione Option Compare specifica il metodo di confronto tra stringhe ( Binary o Text ). Il metodo di
confronto del testo predefinito è Binary .
Un confronto Binary confronta il valore numerico Unicode di ogni carattere in ciascuna stringa. Un confronto
Text confronta ogni carattere Unicode in base al relativo significato lessicale nelle impostazioni cultura
correnti.
Il criterio di ordinamento di Microsoft Windows è determinato dalla tabella codici. Per altre informazioni, vedere
Tabelle codici.
Nell'esempio seguente i caratteri nella tabella codici (ANSI 1252) per le lingue inglese ed europee vengono
ordinati usando Option Compare Binary , che determina un tipico ordinamento binario.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Se gli stessi caratteri nella stessa tabella codici venissero ordinati con Option Compare Text , si otterrebbe il
seguente ordinamento testuale.
(A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø)
NOTE
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero
essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi
elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Esempio
Nell'esempio seguente viene usata l'istruzione Option Compare per impostare il confronto binario come metodo
predefinito per il confronto tra stringhe. Per usare questo codice, rimuovere il commento dall'istruzione
Option Compare Binary e inserirlo all'inizio del file di origine.
Esempio
Nell'esempio seguente viene usata l'istruzione Option Compare per impostare il criterio di ordinamento del testo
senza distinzione tra maiuscole e minuscole come metodo predefinito per il confronto tra stringhe. Per usare
questo codice, rimuovere il commento dall'istruzione Option Compare Text e inserirlo all'inizio del file di origine.
' Option Compare Text
Console.WriteLine("A" = "a")
' Output: True
Vedi anche
InStr
InStrRev
Replace
Split
StrComp
-optioncompare
Operatori di confronto
Comparison Operators in Visual Basic
Operatore Like
Funzioni per i valori stringa
Istruzione Option Explicit
Option Strict Statement
Istruzione Option Explicit (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Impone la dichiarazione esplicita di tutte le variabili in un file o consente dichiarazioni implicite delle variabili.
Sintassi
Option Explicit { On | Off }
Parti
On
facoltativo. Consente Option Explicit il controllo. Se On o Off non è specificato, il valore predefinito è On .
Off
facoltativo. Disabilita Option Explicit il controllo.
Commenti
Quando Option Explicit On o Option Explicit viene visualizzato in un file, è necessario dichiarare in modo
esplicito tutte le variabili usando le Dim ReDim istruzioni o. Se si tenta di utilizzare un nome di variabile non
dichiarato, si verificherà un errore in fase di compilazione. L' Option Explicit Off istruzione consente la
dichiarazione implicita delle variabili.
Se usato, è necessario includere l'istruzione Option Explicit in un file prima di tutte le altre istruzioni del codice
sorgente.
NOTE
Option Explicit Off Non è in genere consigliabile impostare su. È possibile digitare un nome di variabile in modo
errato in una o più posizioni e ciò può causare risultati imprevisti quando viene eseguito il programma.
Esempio
Nell'esempio seguente viene utilizzata l' Option Explicit istruzione per forzare la dichiarazione esplicita di tutte
le variabili. Il tentativo di utilizzare una variabile non dichiarata genera un errore in fase di compilazione.
Vedi anche
Istruzione Dim
Istruzione ReDim
Istruzione Option Compare
Option Strict Statement
-optioncompare
-optionexplicit
-optionstrict
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
Option Infer (istruzione)
05/03/2021 • 8 minutes to read • Edit Online
Abilita l'uso dell'inferenza del tipo di variabile locale nelle variabili dichiaranti.
Sintassi
Option Infer { On | Off }
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Per impostare Option Infer in un file, digitare Option Infer On oppure Option Infer Off all'inizio del file,
prima di qualsiasi altro codice sorgente. Se il valore impostato per Option Infer in un file è in conflitto con il
valore impostato nell'IDE o sulla riga di comando, il valore nel file ha precedenza.
Quando si imposta Option Infer su On , è possibile dichiarare variabili locali senza dichiarare in modo esplicito
un tipo di dati. Tramite l'inferenza, il compilatore deriva il tipo di dati di una variabile dal tipo della relativa
espressione di inizializzazione.
Nella figura seguente, l'istruzione Option Infer è abilitata. La variabile nella dichiarazione Dim someVar = 2
viene dichiarata come Integer in base all'inferenza del tipo.
La schermata seguente mostra IntelliSense quando Option deduce è on:
Nella figura seguente, l'istruzione Option Infer è disabilitata. La variabile nella dichiarazione Dim someVar = 2
viene dichiarata come Object in base all'inferenza del tipo. In questo esempio, l'impostazione Option Strict è
impostata su off nella pagina compila, Progettazione progetti (Visual Basic).
La schermata seguente mostra IntelliSense quando Option dedurre è disattivato:
NOTE
Quando una variabile viene dichiarata come Object , il tipo di runtime può essere modificato mentre il programma è in
esecuzione. Visual Basic esegue operazioni denominate Boxing e unboxing per eseguire la conversione tra un oggetto
Object e un tipo di valore, il che rende l'esecuzione più lenta. Per informazioni su conversione boxing e unboxing, vedere
la specifica del linguaggio Visual Basic.
L'inferenza del tipo si applica a livello di routine e non si applica all'esterno di una routine in una classe, una
struttura, un modulo o un'interfaccia.
Per altre informazioni, vedere inferenza dei tipi locali.
IN IZ IA L IZ Z ATO RE
T IP O DI DAT I SP EC IF IC ATO ? SP EC IF IC ATO ? ESEM P IO RISULTATO
IN IZ IA L IZ Z ATO RE
T IP O DI DAT I SP EC IF IC ATO ? SP EC IF IC ATO ? ESEM P IO RISULTATO
Se Option Strict è
abilitato, si verifica un errore
in fase di compilazione.
Se le istruzioni
Option Infer e
Option Strict sono
disabilitate, il tipo di dati
accettato dalla variabile è
Object .
Se Option Infer è
disabilitato e
Option Strict è abilitato,
si verifica un errore in fase
di compilazione.
Esempio
Gli esempi seguenti illustrano come l'istruzione Option Infer permette di usare inferenza del tipo di variabile
locale.
' Enable Option Infer before trying these examples.
Esempio
L'esempio seguente dimostra che il tipo di runtime può differire quando una variabile viene identificata come
Object .
Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)
' Output:
' System.Int32
' System.String
Vedi anche
Istruzione Dim
Inferenza del tipo di variabile locale
Istruzione Option Compare
Istruzione Option Explicit
Option Strict Statement
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
-optioninfer
Conversione boxing e unboxing
Option Strict Statement
05/03/2021 • 17 minutes to read • Edit Online
Limita le conversioni implicite dei tipi di dati solo per le conversioni verso un tipo di dati più ampio, non
consente l'associazione tardiva e impedisce la tipizzazione implicita che restituisce un Object tipo.
Sintassi
Option Strict { On | Off }
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Quando Option Strict On o Option Strict viene visualizzato in un file, le condizioni seguenti generano un
errore in fase di compilazione:
Conversioni implicite verso un tipo di dati più piccolo
Associazione tardiva
Tipizzazione implicita che comporta un tipo Object
NOTE
Nelle configurazioni di avviso che è possibile impostare nella pagina compilazione, Progettazione progetti (Visual Basic),
sono disponibili tre impostazioni che corrispondono alle tre condizioni che provocano un errore in fase di compilazione.
Per informazioni sull'utilizzo di queste impostazioni, vedere per impostare le configurazioni di avviso nell'IDE più avanti in
questo argomento.
L' Option Strict Off istruzione disattiva il controllo degli errori e degli avvisi per tutte e tre le condizioni, anche
se le impostazioni IDE associate specificano di attivare questi errori o avvisi. L' Option Strict On istruzione
attiva il controllo di errori e avvisi per tutte e tre le condizioni, anche se le impostazioni IDE associate specificano
di disattivare questi errori o avvisi.
Se utilizzata, l' Option Strict istruzione deve essere visualizzata prima di qualsiasi altra istruzione di codice in
un file.
Quando si imposta Option Strict su On , Visual Basic verifica che i tipi di dati siano specificati per tutti gli
elementi di programmazione. I tipi di dati possono essere specificati in modo esplicito o specificati tramite
l'inferenza del tipo locale. È consigliabile specificare i tipi di dati per tutti gli elementi di programmazione, per i
motivi seguenti:
Abilita il supporto IntelliSense per le variabili e i parametri. Questo consente di visualizzare le relative
proprietà e altri membri durante la digitazione del codice.
Consente al compilatore di eseguire il controllo dei tipi. Il controllo dei tipi consente di trovare istruzioni
che possono avere esito negativo in fase di esecuzione a causa di errori di conversione del tipo. Identifica
inoltre le chiamate ai metodi su oggetti che non supportano tali metodi.
Accelera l'esecuzione del codice. Un motivo è che se non si specifica un tipo di dati per un elemento di
programmazione, il compilatore Visual Basic lo assegna al Object tipo. Il codice compilato potrebbe
dover eseguire la conversione tra Object e altri tipi di dati, riducendo così le prestazioni.
IN IZ IA L IZ Z ATO RE
T IP O DI DAT I SP EC IF IC ATO ? SP EC IF IC ATO ? ESEM P IO RISULTATO
Se Option Strict è
abilitato, si verifica un errore
in fase di compilazione.
Se le istruzioni
Option Infer e
Option Strict sono
disabilitate, il tipo di dati
accettato dalla variabile è
Object .
Se Option Infer è
disabilitato e
Option Strict è abilitato,
si verifica un errore in fase
di compilazione.
NOTE
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero
essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi
elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Esempio
Negli esempi seguenti vengono illustrati gli errori in fase di compilazione causati da conversioni di tipi implicite
che sono conversioni verso un tipo di testo più piccolo. Questa categoria di errori corrisponde alla condizione di
conversione implicita nella pagina Compila .
Esempio
Nell'esempio seguente viene illustrato un errore in fase di compilazione causato dall'associazione tardiva.
Questa categoria di errori corrisponde all' associazione tardiva; la chiamata potrebbe non riuscire in
fase di esecuzione nella pagina Compila .
Esempio
Negli esempi seguenti vengono illustrati gli errori causati da variabili dichiarate con un tipo implicito di Object .
Questa categoria di errori corrisponde al tipo implicito . la condizione presuppone l'oggetto nella pagina di
compilazione .
End Sub
Vedi anche
Widening and Narrowing Conversions
Conversioni implicite ed esplicite
Compilazione (pagina), Creazione progetti (Visual Basic)
Istruzione Option Explicit
CString
Procedura: accedere ai membri di un oggetto
Espressioni incorporate in XML
Conversione di tipo relaxed del delegato
Associazione tardiva nelle soluzioni Office
-optionstrict
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
Property Statement
05/03/2021 • 10 minutes to read • Edit Online
Dichiara il nome di una proprietà e le routine della proprietà usate per archiviare e recuperare il valore della
proprietà.
Sintassi
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
[ <attributelist> ] [ accessmodifier ] Get
[ statements ]
End Get
[ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
[ statements ]
End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
Parti
attributelist
facoltativo. Elenco di attributi che si applicano a questa proprietà o a questa Get Set routine. Vedere
elenco attributi.
Default
facoltativo. Specifica che questa proprietà è la proprietà predefinita della classe o della struttura in cui è
definita. Le proprietà predefinite devono accettare parametri e possono essere impostate e recuperate
senza specificare il nome della proprietà. Se si dichiara la proprietà come Default , non è possibile
utilizzare Private sulla proprietà o su una delle relative routine di proprietà.
accessmodifier
Facoltativo nell' Property istruzione e al massimo una delle Get Set istruzioni e. Può essere uno dei
seguenti:
Pubblica
Protetto
Friend
Privata
Protected Friend
Privato protetto
Vedere livelli di accesso in Visual Basic.
propertymodifiers
NotOverridable Overrides
Shared
facoltativo. Elenco di nomi di variabili locali che rappresentano i parametri di questa proprietà e possibili
parametri aggiuntivi della Set procedura. Vedere elenco di parametri.
returntype
Obbligatorio se Option Strict è On . Tipo di dati del valore restituito da questa proprietà.
Implements
facoltativo. Indica che questa proprietà implementa una o più proprietà, ognuna delle quali è definita in
un'interfaccia implementata dalla classe o dalla struttura contenitore di questa proprietà. Vedere
istruzione Implements.
implementslist
PA RT E DESC RIZ IO N E
Get
facoltativo. Obbligatorio se la proprietà è contrassegnata ReadOnly . Avvia una Get routine di proprietà
utilizzata per restituire il valore della proprietà. L' Get istruzione non viene utilizzata con le proprietà
implementate automaticamente.
statements
facoltativo. Obbligatorio se la proprietà è contrassegnata WriteOnly . Avvia una Set routine di proprietà
utilizzata per archiviare il valore della proprietà. L' Set istruzione non viene utilizzata con le proprietà
implementate automaticamente.
End Set
Commenti
L' Property istruzione introduce la dichiarazione di una proprietà. Una proprietà può avere una Get routine
(sola lettura), una Set routine (solo scrittura) o entrambe (lettura/scrittura). È possibile omettere Get la Set
procedura e quando si usa una proprietà implementata automaticamente. Per altre informazioni, vedere
Proprietà implementate automaticamente.
È possibile usare Property solo a livello di classe. Ciò significa che il contesto di dichiarazione per una proprietà
deve essere una classe, una struttura, un modulo o un'interfaccia e non può essere un file di origine, uno spazio
dei nomi, una procedura o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di
accesso predefiniti.
Per impostazione predefinita, le proprietà usano l'accesso pubblico. È possibile modificare il livello di accesso di
una proprietà con un modificatore di accesso nell' Property istruzione ed è possibile modificare
facoltativamente una delle routine di proprietà a un livello di accesso più restrittivo.
Visual Basic passa un parametro alla Set routine durante le assegnazioni di proprietà. Se non si specifica un
parametro per Set , il Integrated Development Environment (IDE) utilizza un parametro implicito denominato
value . Questo parametro include il valore da assegnare alla proprietà. Questo valore viene in genere archiviato
in una variabile locale privata e restituito ogni volta che Get viene chiamata la stored procedure.
Regole
Livelli di accesso misti. Se si definisce una proprietà di lettura/scrittura, è possibile specificare
facoltativamente un livello di accesso diverso per la Get routine o Set , ma non per entrambi. In tal
caso, il livello di accesso della routine deve essere più restrittivo del livello di accesso della proprietà. Se,
ad esempio, la proprietà è dichiarata Friend , è possibile dichiarare la Set routine Private , ma non
Public .
Se si definisce una ReadOnly proprietà o WriteOnly , l'unica routine della proprietà ( Get o Set
rispettivamente) rappresenta tutta la proprietà. Non è possibile dichiarare un livello di accesso diverso
per una procedura di questo tipo, perché imposta due livelli di accesso per la proprietà.
Tipo restituito. L' Property istruzione può dichiarare il tipo di dati del valore restituito. È possibile
specificare qualsiasi tipo di dati o il nome di un'enumerazione, una struttura, una classe o un'interfaccia.
Se non si specifica returntype , la proprietà restituisce Object .
Implementazione. Se questa proprietà Usa la Implements parola chiave, la classe o la struttura
contenitore deve avere un' Implements istruzione immediatamente successiva all' Class Structure
istruzione o. L' Implements istruzione deve includere ogni interfaccia specificata in implementslist .
Tuttavia, il nome con cui un'interfaccia definisce Property (in definedname ) non deve essere uguale al
nome di questa proprietà (in name ).
Comportamento
Restituzione da una routine di proprietà. Quando la Get Set procedura o restituisce al codice
chiamante, l'esecuzione continua con l'istruzione che segue l'istruzione che lo ha richiamato.
Le Exit Property Return istruzioni e generano un'uscita immediata da una routine di proprietà.
Qualsiasi numero di Exit Property Return istruzioni e può comparire in qualsiasi punto della procedura
ed è possibile combinare le Exit Property Return istruzioni e.
Valore restituito. Per restituire un valore da una Get routine, è possibile assegnare il valore al nome
della proprietà o includerlo in un' Return istruzione. Nell'esempio seguente viene assegnato il valore
restituito al nome della proprietà quoteForTheDay , quindi viene utilizzata l' Exit Property istruzione per
restituire.
Se si utilizza Exit Property senza assegnare un valore a name , la Get stored procedure restituisce il
valore predefinito per il tipo di dati della proprietà.
L' Return istruzione, allo stesso tempo, assegna il Get valore restituito della routine e chiude la
procedura. Nell'esempio riportato di seguito viene illustrata questa situazione.
Esempio
Nell'esempio seguente viene dichiarata una proprietà in una classe.
Class Class1
' Define a local variable to store the property value.
Private propertyValue As String
' Define the property.
Public Property Prop1() As String
Get
' The Get property procedure is called when the value
' of a property is retrieved.
Return propertyValue
End Get
Set(ByVal value As String)
' The Set property procedure is called when the value
' of a property is modified. The value to be assigned
' is passed in the argument to Set.
propertyValue = value
End Set
End Property
End Class
Vedi anche
Proprietà implementate automaticamente
Oggetti e classi
Istruzione Get
Istruzione set
Elenco parametri
Default
Istruzioni Q-Z
05/03/2021 • 2 minutes to read • Edit Online
Nella tabella seguente è incluso un elenco di istruzioni del linguaggio Visual Basic.
Vedi anche
Istruzioni A-E
Istruzioni F-P
Riferimenti al linguaggio Visual Basic
Istruzione RaiseEvent
05/03/2021 • 7 minutes to read • Edit Online
Attiva un evento dichiarato a livello di modulo all'interno di una classe, un form o un documento.
Sintassi
RaiseEvent eventname[( argumentlist )]
Parti
eventname
Obbligatorio. Nome dell'evento da attivare.
argumentlist
facoltativo. Elenco delimitato da virgole di variabili, matrici o espressioni. L' argumentlist argomento deve
essere racchiuso tra parentesi. Se non è presente alcun argomento, le parentesi devono essere omesse.
Commenti
Il valore richiesto eventname è il nome di un evento dichiarato all'interno del modulo. Segue Visual Basic
convenzioni di denominazione delle variabili.
Se l'evento non è stato dichiarato all'interno del modulo in cui viene generato, si verifica un errore. Nel
frammento di codice seguente viene illustrata una dichiarazione di evento e una procedura in cui viene generato
l'evento.
Non è possibile usare RaiseEvent per generare eventi non dichiarati in modo esplicito nel modulo. Ad esempio,
tutti i form ereditano un Click evento da e non System.Windows.Forms.Form possono essere generati
utilizzando RaiseEvent in un formato derivato. Se si dichiara un Click evento nel modulo modulo, viene
ombreggiato l'evento del modulo Click . È comunque possibile richiamare l'evento del form chiamando Click il
OnClick metodo.
Per impostazione predefinita, un evento definito in Visual Basic genera i relativi gestori eventi nell'ordine in cui
vengono stabilite le connessioni. Poiché gli eventi possono avere ByRef parametri, un processo che si connette
in ritardo può ricevere parametri che sono stati modificati da un gestore eventi precedente. Dopo l'esecuzione
dei gestori di eventi, il controllo viene restituito alla subroutine che ha generato l'evento.
NOTE
Gli eventi non condivisi non devono essere generati all'interno del costruttore della classe in cui sono dichiarati. Sebbene
tali eventi non causino errori in fase di esecuzione, potrebbero non essere rilevati dai gestori eventi associati. Usare il
Shared modificatore per creare un evento condiviso se è necessario generare un evento da un costruttore.
NOTE
È possibile modificare il comportamento predefinito degli eventi definendo un evento personalizzato. Per gli eventi
personalizzati, l' RaiseEvent istruzione richiama la funzione di RaiseEvent accesso dell'evento. Per ulteriori
informazioni sugli eventi personalizzati, vedere istruzione Event.
Esempio
Negli esempi seguenti, gli eventi vengono usati per il conto alla rovescia dei secondi, da 10 a 0. Nel codice
vengono illustrati diversi metodi, proprietà e istruzioni correlati agli eventi, inclusa l' RaiseEvent istruzione.
La classe che genera un evento viene definita origine e i metodi che lo elaborano vengono definiti gestori eventi.
Un'origine eventi può disporre di più gestori per gli eventi generati. Quando la classe genera l'evento, lo stesso
evento viene generato in tutte le classi per cui è stato scelto di gestire eventi per tale istanza dell'oggetto.
Nell'esempio vengono usati anche un form ( Form1 ) con un pulsante ( Button1 ) e una casella di testo ( TextBox1
). Quando si fa clic sul pulsante, nella prima casella di testo viene visualizzato il conto alla rovescia dei secondi da
10 a 0. Al termine dei 10 secondi, nella prima casella di testo viene visualizzato "Done".
Il codice di Form1 specifica gli stati di inizio e fine del form. Contiene inoltre il codice eseguito quando vengono
generati gli eventi.
Per usare questo esempio, aprire un nuovo progetto di applicazione Windows, aggiungere un pulsante
denominato Button1 e una casella di testo denominata TextBox1 al form principale, denominato Form1 . Fare
quindi clic con il pulsante destro del mouse sul form e scegliere Visualizza codice per aprire l'editor di codice.
Aggiungere una WithEvents variabile alla sezione delle dichiarazioni della Form1 classe.
Esempio
Aggiungere il codice seguente al codice per Form1 : Sostituire eventuali procedure duplicate che possono
esistere, ad esempio Form_Load o Button_Click .
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Premere F5 per eseguire l'esempio precedente e fare clic sul pulsante Avvia . Nella prima casella di testo viene
avviato il conto alla rovescia dei secondi. Al termine dei 10 secondi, nella prima casella di testo viene visualizzato
"Done".
NOTE
Il My.Application.DoEvents metodo non elabora gli eventi esattamente allo stesso modo del modulo. Per consentire al
modulo di gestire direttamente gli eventi, è possibile utilizzare il multithreading. Per altre informazioni, vedere Threading
gestito.
Vedi anche
Eventi
Istruzione Event
Istruzione AddHandler
Istruzione RemoveHandler
Selettori
Istruzione ReDim (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Sintassi
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
È possibile utilizzare l'istruzione ReDim per modificare una o più dimensioni di una matrice che è stata già
dichiarata. Se si dispone di una matrice di grandi dimensioni e alcuni degli elementi di questa non sono più
necessari, ReDim consente di liberare memoria riducendo le dimensioni della matrice. D’altra parte, se la
matrice necessita di più elementi, ReDim è in grado di aggiungerli.
L'istruzione ReDim è destinata solo alle matrici. Non è valida per valori scalari (variabili che contengono un
unico valore), raccolte o strutture. Tenere presente che se l'utente dichiara che una variabile è di tipo Array ,
l'istruzione ReDim non dispone di sufficienti informazioni sulla tipologia e non può creare la nuova matrice.
Si può usare ReDim solo a livello di routine. Pertanto, il contesto della dichiarazione relativo alla variabile deve
essere una routine. Di conseguenza, non può essere un file di origine, uno spazio dei nomi, un'interfaccia, una
classe, una struttura, un modulo o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di
accesso predefiniti.
Regole
Variabili multiple. È possibile ridimensionare diverse variabili di matrice nella stessa istruzione di
dichiarazione e specificare le name boundlist parti e per ogni variabile. Nel caso di più variabili, è
possibile separarle mediante virgole.
Limiti della matrice. Ogni voce in boundlist può specificare i limiti inferiore e superiore della
dimensione. Il limite inferiore è sempre pari a 0 (zero). Il limite superiore rappresenta il valore di indice
più alto possibile per la dimensione, non la lunghezza della dimensione (vale a dire, il limite superiore più
uno). L'indice di ogni dimensione può variare tra 0 e il relativo valore di limite superiore.
Il numero di dimensioni in boundlist deve corrispondere al numero originale di dimensioni (livello)
della matrice.
Tipi di dati. L' ReDim istruzione non può modificare il tipo di dati di una variabile di matrice o dei
relativi elementi.
Inizializzazione. L' ReDim istruzione non può fornire nuovi valori di inizializzazione per gli elementi
della matrice.
Rank . L' ReDim istruzione non può modificare il rango (numero di dimensioni) della matrice.
Ridimensionamento con Preser ve. Se si utilizza Preserve , è possibile ridimensionare solo l'ultima
dimensione della matrice. Per ogni dimensione, è necessario specificare il limite della matrice esistente.
Ad esempio, se la matrice contiene solo una dimensione, è possibile ridimensionarla e mantenere tutto il
contenuto della matrice, poiché si sta modificando l'ultima e unica dimensione. Tuttavia, se la matrice
dispone di due o più dimensioni e si utilizza Preserve , è possibile modificare i valori soltanto per l'ultima
dimensione.
Proprietà. È possibile utilizzare ReDim su una proprietà che include una matrice di valori.
Comportamento
Sostituzione di matrici. ReDim rilascia la matrice esistente e crea una nuova matrice con lo stesso
rango. La nuova matrice sostituisce quella rilasciata nella variabile di matrice.
Inizializzazione senza Preser ve. Se non si specifica Preserve , ReDim Inizializza gli elementi della
nuova matrice usando il valore predefinito per il tipo di dati.
Inizializzazione con Preser ve. Se si specifica Preserve , Visual Basic copia gli elementi dalla matrice
esistente alla nuova matrice.
Esempio
Nell'esempio seguente viene aumentata la grandezza dell'ultima dimensione di una matrice dinamica senza
perdere i dati presenti nella matrice; in seguito, viene ridotta la dimensione con perdita di dati parziali. Infine,
viene ridotta la dimensione del relativo valore originale e vengono inizializzati di nuovo tutti gli elementi della
matrice.
L'istruzione Dim crea una nuova matrice con tre dimensioni. Ogni dimensione viene dichiarata con un limite
pari a 10. In questo modo l'indice della matrice per ogni dimensione può essere compreso tra 0 e 10. Nella
seguente discussione, si fa riferimento alle tre dimensioni come livello, riga e colonna.
La prima ReDim crea una nuova matrice che sostituisce quella esistente nella intArray di variabile. ReDim
copia tutti gli elementi dalla matrice esistente in quella nuova. Inoltre, consente di aggiungere altre 10 colonne
alla fine di ogni riga di tutti i livelli e consente di inizializzare gli elementi in queste nuove colonne su 0 (valore
predefinito) di Integer , ovvero il tipo di elemento della matrice.
La seconda ReDim crea una nuova matrice e copia tutti gli elementi adeguati. Tuttavia, cinque colonne vengono
perse alla fine di ogni riga relativa a ogni livello. Ciò non rappresenta un problema se l'utente non ha più la
necessità di utilizzare tali colonne. La riduzione delle dimensioni di una grande matrice può liberare memoria
che non è più necessaria.
La terza ReDim crea una nuova matrice e rimuove altre cinque colonne dalla fine di ogni riga relativa a ogni
livello. Questa volta non copia gli elementi esistenti. Questa istruzione consente di ripristinare le dimensioni
originali della matrice. Dal momento che l'istruzione non include il modificatore Preserve , imposta i valori
predefiniti originali di tutti gli elementi della matrice.
Per altri esempi, vedere matrici.
Vedi anche
IndexOutOfRangeException
Istruzione Const
Istruzione Dim
Istruzione Erase
Nothing
Matrici
Istruzione REM (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
REM comment
' comment
Parti
comment
facoltativo. Testo di qualsiasi commento che si desidera includere. È necessario uno spazio tra la REM parola
chiave e comment .
Commenti
È possibile inserire un' REM istruzione da solo su una riga oppure è possibile inserirla in una riga che segue
un'altra istruzione. L' REM istruzione deve essere l'ultima istruzione della riga. Se segue un'altra istruzione,
l'oggetto REM deve essere separato dall'istruzione da uno spazio.
È possibile utilizzare le virgolette singole ( ' ) anziché REM . Questo vale se il commento segue un'altra
istruzione sulla stessa riga o si trova da solo su una riga.
NOTE
Non è possibile continuare un' REM istruzione utilizzando una sequenza di continuazione di riga ( _ ). Una volta che
viene avviato un commento, il compilatore non esamina i caratteri per un significato speciale. Per un commento su più
righe, usare un'altra REM istruzione o un simbolo di commento ( ' ) in ogni riga.
Esempio
Nell'esempio seguente viene illustrata l' REM istruzione, che viene utilizzata per includere osservazioni
esplicative in un programma. Viene inoltre illustrata l'alternativa di utilizzare il carattere virgoletta singola ( ' )
anziché REM .
Vedi anche
Commenti nel codice
Procedura: Interrompere e combinare istruzioni nel codice
Istruzione RemoveHandler
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
RemoveHandler event, AddressOf eventhandler
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Le AddHandler RemoveHandler istruzioni e consentono di avviare e arrestare la gestione degli eventi per un
evento specifico in qualsiasi momento durante l'esecuzione del programma.
NOTE
Per gli eventi personalizzati, l' RemoveHandler istruzione richiama la funzione di RemoveHandler accesso dell'evento. Per
ulteriori informazioni sugli eventi personalizzati, vedere istruzione Event.
Esempio
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Vedere anche
Istruzione AddHandler
Selettori
Istruzione Event
Eventi
Istruzione Resume
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
Resume [ Next | line ]
Parti
Resume
Obbligatorio. Se l'errore si è verificato nella stessa procedura del gestore degli errori, l'esecuzione riprende con
l'istruzione che ha causato l'errore. Se l'errore si è verificato in una routine chiamata, l'esecuzione riprende in
corrispondenza dell'istruzione che ha eseguito l'ultima chiamata alla routine che contiene la routine di gestione
degli errori.
Next
facoltativo. Se l'errore si è verificato nella stessa procedura del gestore degli errori, l'esecuzione riprende con
l'istruzione immediatamente successiva all'istruzione che ha causato l'errore. Se l'errore si è verificato in una
routine chiamata, l'esecuzione riprende con l'istruzione immediatamente successiva all'istruzione che ha
eseguito l'ultima chiamata alla routine che contiene la routine di gestione degli errori (o On Error Resume Next
istruzione).
line
facoltativo. L'esecuzione riprende in corrispondenza della riga specificata nell' line argomento obbligatorio. L'
line argomento è un'etichetta di riga o un numero di riga e deve essere nella stessa procedura del gestore
degli errori.
Commenti
NOTE
Si consiglia di utilizzare la gestione delle eccezioni strutturata nel codice, quando possibile, anziché utilizzare la gestione
delle eccezioni non strutturata e le On Error Resume istruzioni e. Per altre informazioni, vedere Istruzione
Try...Catch...Finally.
Se si utilizza un' Resume istruzione in un punto qualsiasi di una routine di gestione degli errori, si verificherà un
errore.
L' Resume istruzione non può essere utilizzata in nessuna routine che contiene un' Try...Catch...Finally
istruzione.
Esempio
In questo esempio viene utilizzata l' Resume istruzione per terminare la gestione degli errori in una stored
procedure e quindi riprendere l'esecuzione con l'istruzione che ha causato l'errore. Viene generato l'errore
numero 55 per illustrare l'uso dell' Resume istruzione.
Sub ResumeStatementDemo()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
z = x / y ' Creates a divide by zero error
Exit Sub ' Exit Sub to avoid error handler.
ErrorHandler: ' Error-handling routine.
Select Case Err.Number ' Evaluate error number.
Case 6 ' "Divide by zero" error.
y = 1 ' Sets the value of y to 1 and tries the calculation again.
Case Else
' Handle other situations here....
End Select
Resume ' Resume execution at same line
' that caused the error.
End Sub
Requisiti
Spazio dei nomi: Microsoft. VisualBasic
Assembly: Libreria di runtime Visual Basic (in Microsoft.VisualBasic.dll)
Vedi anche
Istruzione Try...Catch...Finally
Istruzione Error
Istruzione On Error
Istruzione Return (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Restituisce il controllo al codice che ha chiamato Function una Sub routine,, Get , Set o Operator .
Sintassi
Return
' -or-
Return expression
Parte
expression
Obbligatorio in una Function Get procedura, o Operator . Espressione che rappresenta il valore da restituire
al codice chiamante.
Commenti
In una Sub Set routine o l' Return istruzione è equivalente a un' Exit Sub istruzione o Exit Property e
expression non deve essere fornita.
In una Function Get routine, o Operator , l' Return istruzione deve includere expression e expression deve
restituire un tipo di dati convertibile nel tipo restituito della routine. In una Function Get routine o è inoltre
possibile assegnare un'espressione al nome della stored procedure per fungere da valore restituito e quindi
eseguire un' Exit Function Exit Property istruzione o. In una Operator procedura è necessario utilizzare
Return expression .
NOTE
Il codice in un Finally blocco viene eseguito dopo Return che un'istruzione in un Try Catch blocco o viene
rilevata, ma prima dell' Return esecuzione dell'istruzione. Un' Return istruzione non può essere inclusa in un Finally
blocco.
Esempio
Nell'esempio seguente l'istruzione viene utilizzata Return più volte per tornare al codice chiamante quando la
procedura non deve eseguire altre operazioni.
Public Function GetAgePhrase(ByVal age As Integer) As String
If age > 60 Then Return "Senior"
If age > 40 Then Return "Middle-aged"
If age > 20 Then Return "Adult"
If age > 12 Then Return "Teen-aged"
If age > 4 Then Return "School-aged"
If age > 1 Then Return "Toddler"
Return "Infant"
End Function
Vedi anche
Istruzione Function
Istruzione Sub
Istruzione Get
Istruzione set
Operator Statement
Property Statement
Istruzione Exit
Istruzione Try...Catch...Finally
Istruzione Select...Case (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Esegue uno dei diversi gruppi di istruzioni, a seconda del valore di un'espressione.
Sintassi
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Parti
T ERM IN E DEF IN IZ IO N E
- expression1 To expression2
-[ Is ] espressione comparisonoperator
- espressione
elsestatements facoltativo. Una o più istruzioni che seguono l' Case Else
esecuzione se testexpression non corrisponde ad alcuna
clausola in expressionlist di una delle Case istruzioni.
Commenti
Se testexpression corrisponde Case expressionlist a qualsiasi clausola, le istruzioni che seguono tale Case
istruzione vengono eseguite fino alla successiva Case Case Else istruzione, o End Select . Il controllo passa
quindi all'istruzione che segue End Select . Se testexpression corrisponde expressionlist a una clausola in
più di una Case clausola, vengono eseguite solo le istruzioni che seguono la prima corrispondenza.
L' Case Else istruzione viene utilizzata per introdurre l'oggetto elsestatements da eseguire se non viene
trovata alcuna corrispondenza tra testexpression e una expressionlist clausola in nessuna delle altre Case
istruzioni. Sebbene non sia obbligatorio, è consigliabile avere un' Case Else istruzione nella Select Case
costruzione per gestire testexpression i valori imprevisti. Se nessuna Case expressionlist clausola
corrisponde testexpression e non è presente alcuna Case Else istruzione, il controllo passa all'istruzione che
segue End Select .
È possibile utilizzare più espressioni o intervalli in ogni Case clausola. La riga seguente, ad esempio, è valida.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
NOTE
La Is parola chiave usata nelle Case Case Else istruzioni e non è uguale all' operatore is, che viene usato per il
confronto dei riferimenti agli oggetti.
È possibile specificare intervalli e più espressioni per le stringhe di caratteri. Nell'esempio seguente, Case trova
la corrispondenza con qualsiasi stringa esattamente uguale a "mele", ha un valore compreso tra "Nuts" e "soup"
in ordine alfabetico o contiene lo stesso valore del valore corrente di testItem .
Case "apples", "nuts" To "soup", testItem
L'impostazione di Option Compare può influire sui confronti tra stringhe. In Option Compare Text le stringhe
"mele" e "mele" si confrontano come uguali, ma in non lo Option Compare Binary sono.
NOTE
Un' Case istruzione con più clausole può presentare il comportamento noto come corto circuito. Visual Basic valuta le
clausole da sinistra a destra e se una corrisponde a testexpression , le clausole rimanenti non vengono valutate. Il
cortocircuito può migliorare le prestazioni, ma può produrre risultati imprevisti se si prevede che ogni espressione in
expressionlist venga valutata. Per ulteriori informazioni sul corto circuito, vedere espressioni booleane.
Se il codice all'interno di un Case Case Else blocco di istruzioni o non richiede l'esecuzione di altre istruzioni
nel blocco, può uscire dal blocco utilizzando l' Exit Select istruzione. Questa operazione trasferisce
immediatamente il controllo all'istruzione seguente End Select .
Select Case le costruzioni possono essere nidificate. Ogni costruzione annidata Select Case deve avere un'
End Select istruzione corrispondente e deve essere completamente contenuta all'interno di un singolo Case
Case Else blocco di istruzioni o della Select Case costruzione esterna in cui è annidato.
Esempio
Nell'esempio seguente viene utilizzata una Select Case costruzione per scrivere una riga corrispondente al
valore della variabile number . La seconda Case istruzione contiene il valore che corrisponde al valore corrente
di number , quindi viene eseguita l'istruzione che scrive "between 6 and 8 Inclusive".
Vedi anche
Choose
Istruzione End
Istruzione If...Then...Else
Istruzione Option Compare
Istruzione Exit
Istruzione Set (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Dichiara una Set routine della proprietà usata per assegnare un valore a una proprietà.
Sintassi
[ <attributelist> ] [ accessmodifier ] Set (ByVal value [ As datatype ])
[ statements ]
End Set
Parti
attributelist
facoltativo. Vedere elenco attributi.
accessmodifier
Facoltativo al massimo una delle Get Set istruzioni e in questa proprietà. Può essere uno dei seguenti:
Protetto
Friend
Privata
Protected Friend
Commenti
Ogni proprietà deve disporre di una Set routine Property, a meno che la proprietà non sia contrassegnata
come ReadOnly . La Set procedura viene utilizzata per impostare il valore della proprietà.
Visual Basic chiama automaticamente la routine di una proprietà Set quando un'istruzione di assegnazione
fornisce un valore da archiviare nella proprietà.
Visual Basic passa un parametro alla Set routine durante le assegnazioni di proprietà. Se non si specifica un
parametro per Set , il Integrated Development Environment (IDE) utilizza un parametro implicito denominato
value . Il parametro include il valore da assegnare alla proprietà. Questo valore viene in genere archiviato in
una variabile locale privata e restituito ogni volta che Get viene chiamata la stored procedure.
Il corpo della dichiarazione di proprietà può contenere solo le Get routine e della proprietà Set tra l' istruzione
Property e l' End Property istruzione. Non è possibile archiviare un valore diverso da tali procedure. In
particolare, non è possibile archiviare il valore corrente della proprietà. È necessario archiviare questo valore
all'esterno della proprietà, perché se viene archiviato in una delle routine della proprietà, l'altra routine della
proprietà non potrà accedervi. L'approccio usuale consiste nell'archiviare il valore in una variabile privata
dichiarata allo stesso livello della proprietà. È necessario definire una Set routine all'interno della proprietà a
cui si applica.
Set Per impostazione predefinita, la procedura viene impostata sul livello di accesso della proprietà che lo
contiene, a meno che non si utilizzi accessmodifier nell' Set istruzione.
Regole
Livelli di accesso misti. Se si definisce una proprietà di lettura/scrittura, è possibile specificare
facoltativamente un livello di accesso diverso per la Get routine o Set , ma non per entrambi. In tal
caso, il livello di accesso della routine deve essere più restrittivo del livello di accesso della proprietà. Se,
ad esempio, la proprietà è dichiarata Friend , è possibile dichiarare la Set routine Private , ma non
Public .
Se si definisce una WriteOnly proprietà, la Set routine rappresenta l'intera proprietà. Non è possibile
dichiarare un livello di accesso diverso per Set , perché in questo caso verrebbero impostati due livelli di
accesso per la proprietà.
Comportamento
Restituzione da una routine di proprietà. Quando la Set procedura viene restituita al codice
chiamante, l'esecuzione continua seguendo l'istruzione che ha fornito il valore da archiviare.
Set le routine di proprietà possono restituire utilizzando l'istruzione return o l' istruzione Exit.
Le Exit Property Return istruzioni e generano un'uscita immediata da una routine di proprietà.
Qualsiasi numero di Exit Property Return istruzioni e può comparire in qualsiasi punto della procedura
ed è possibile combinare le Exit Property Return istruzioni e.
Esempio
Nell'esempio seguente viene utilizzata l' Set istruzione per impostare il valore di una proprietà.
Class propClass
Private propVal As Integer
Property Prop1() As Integer
Get
Return propVal
End Get
Set(ByVal value As Integer)
propVal = value
End Set
End Property
End Class
Vedi anche
Istruzione Get
Property Statement
Istruzione Sub
Routine Property
Istruzione Stop (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sospende l'esecuzione.
Sintassi
Stop
Osservazioni
È possibile inserire Stop istruzioni in qualsiasi punto delle procedure per sospendere l'esecuzione. L'utilizzo
dell' Stop istruzione è simile all'impostazione di un punto di interruzione nel codice.
L' Stop istruzione sospende l'esecuzione, ma, a differenza di End , non chiude alcun file né cancella alcuna
variabile, a meno che non venga rilevata in un file eseguibile compilato (exe).
NOTE
Se l' Stop istruzione viene rilevata nel codice in esecuzione all'esterno del Integrated Development Environment (IDE), il
debugger viene richiamato. Questo vale indipendentemente dal fatto che il codice sia stato compilato in modalità debug o
al dettaglio.
Esempio
In questo esempio viene utilizzata l' Stop istruzione per sospendere l'esecuzione per ogni iterazione del
For...Next ciclo.
Dim i As Integer
For i = 1 To 10
Debug.WriteLine(i)
' Stop during each iteration and wait for user to resume.
Stop
Next i
Vedi anche
Istruzione End
Istruzione Structure
05/03/2021 • 10 minutes to read • Edit Online
Dichiara il nome di una struttura e introduce la definizione delle variabili, delle proprietà, degli eventi e delle
procedure incluse nella struttura.
Sintassi
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
Parti
T ERM IN E DEF IN IZ IO N E
- Pubblico
- Protetto
- Amico
- Privata
- Amico protetto
- Privato protetto
Commenti
L' Structure istruzione definisce un tipo di valore composto che è possibile personalizzare. Una struttura è una
generalizzazione del tipo definito dall'utente (UDT) delle versioni precedenti di Visual Basic. Per altre
informazioni, vedere Structures.
Le strutture supportano molte delle stesse funzionalità delle classi. Ad esempio, le strutture possono avere
proprietà e procedure, possono implementare interfacce e possono avere costruttori con parametri. Tuttavia,
esistono differenze significative tra le strutture e le classi in aree quali ereditarietà, dichiarazioni e utilizzo.
Inoltre, le classi sono tipi di riferimento e le strutture sono tipi di valore. Per altre informazioni, vedere strutture e
classi.
È possibile usare Structure solo a livello di spazio dei nomi o di modulo. Ciò significa che il contesto di
dichiarazione per una struttura deve essere un file di origine, uno spazio dei nomi, una classe, una struttura, un
modulo o un'interfaccia e non può essere una routine o un blocco. Per altre informazioni, vedere Contesti delle
dichiarazioni e livelli di accesso predefiniti.
Per impostazione predefinita, le strutture sono accessi Friend . È possibile modificare i livelli di accesso con i
modificatori di accesso. Per altre informazioni, vedere livelli di accesso in Visual Basic.
Regole
Annidamento. È possibile definire una struttura in un'altra. La struttura esterna viene chiamata struttura
che lo contiene e la struttura interna viene chiamata struttura annidata. Tuttavia, non è possibile accedere
ai membri di una struttura annidata tramite la struttura che lo contiene. È invece necessario dichiarare
una variabile del tipo di dati della struttura nidificata.
Dichiarazione del membro. È necessario dichiarare ogni membro di una struttura. Un membro di
struttura non può essere protetto o Protected Friend perché non può ereditare da una struttura. La
struttura stessa, tuttavia, può essere Protected o Protected Friend .
È possibile dichiarare zero o più variabili non condivise oppure eventi non condivisi o non personalizzati
in una struttura. Non è possibile avere solo costanti, proprietà e procedure, anche se alcune di esse non
sono condivise.
Inizializzazione. Non è possibile inizializzare il valore di un membro dati non condiviso di una struttura
come parte della relativa dichiarazione. È necessario inizializzare tale membro dati tramite un costruttore
con parametri sulla struttura oppure assegnare un valore al membro dopo aver creato un'istanza della
struttura.
Ereditarietà. Una struttura non può ereditare da un tipo diverso ValueType da, da cui ereditano tutte le
strutture. In particolare, una struttura non può ereditare da un'altra.
Non è possibile usare l' istruzione Inherits in una definizione di struttura, neanche per specificare
ValueType .
Implementazione. Se la struttura usa l' istruzione Implements, è necessario implementare ogni
membro definito da ogni interfaccia specificata in interfacenames .
Proprietà predefinita. Una struttura può specificare al massimo una proprietà come proprietà
predefinita, usando il modificatore predefinito . Per ulteriori informazioni, vedere default.
Comportamento
Livello di accesso. All'interno di una struttura, è possibile dichiarare ogni membro con il proprio livello
di accesso. Per impostazione predefinita, tutti i membri della struttura sono con accesso pubblico . Si noti
che se la struttura ha un livello di accesso più limitato, questo limita automaticamente l'accesso ai relativi
membri, anche se si modificano i livelli di accesso con i modificatori di accesso.
Ambito. Una struttura è nell'ambito di tutti gli spazi dei nomi, la classe, la struttura o il modulo che lo
contiene.
L'ambito di ogni membro della struttura è l'intera struttura.
Vita. Una struttura non ha una durata. Ogni istanza di tale struttura ha invece una durata indipendente
da tutte le altre istanze.
Il ciclo di vita di un'istanza inizia quando viene creato da una nuova clausola di operatore . Termina
quando termina la durata della variabile che lo include.
Non è possibile estendere la durata di un'istanza della struttura. Un modulo fornisce un'approssimazione
alla funzionalità della struttura statica. Per ulteriori informazioni, vedere istruzione Module.
I membri della struttura hanno durate a seconda della modalità e della posizione in cui vengono
dichiarati. Per ulteriori informazioni, vedere "Lifetime" nell' istruzione Class.
Qualificazione. Il codice esterno a una struttura deve qualificare il nome di un membro con il nome
della struttura.
Se il codice all'interno di una struttura annidata crea un riferimento non qualificato a un elemento di
programmazione, Visual Basic cerca prima l'elemento nella struttura nidificata, quindi nella struttura che
lo contiene e così via fino all'elemento contenitore più esterno. Per altre informazioni, vedere References
to Declared Elements.
Consumo di memoria. Come per tutti i tipi di dati compositi, non è possibile calcolare in modo sicuro il
consumo di memoria totale di una struttura aggiungendo le allocazioni di archiviazione nominale dei
relativi membri. Inoltre, non è possibile presupporre in modo sicuro che l'ordine di archiviazione in
memoria sia uguale all'ordine di dichiarazione. Se è necessario controllare il layout di archiviazione di
una struttura, è possibile applicare l' StructLayoutAttribute attributo all' Structure istruzione.
Esempio
Nell'esempio seguente viene utilizzata l' Structure istruzione per definire un set di dati correlati per un
dipendente. Mostra l'uso dei Public membri, Friend e Private per riflettere la riservatezza degli elementi di
dati. Vengono inoltre illustrati i membri della procedura, della proprietà e dell'evento.
Public Structure employee
' Public members, accessible from throughout declaration region.
Public firstName As String
Public middleName As String
Public lastName As String
' Friend members, accessible from anywhere within the same assembly.
Friend employeeNumber As Integer
Friend workPhone As Long
' Private members, accessible only from within the structure itself.
Private homePhone As Long
Private level As Integer
Private salary As Double
Private bonus As Double
' Procedure member, which can access structure's private members.
Friend Sub CalculateBonus(ByVal rate As Single)
bonus = salary * CDbl(rate)
End Sub
' Property member to return employee's eligibility.
Friend ReadOnly Property Eligible() As Boolean
Get
Return level >= 25
End Get
End Property
' Event member, raised when business phone number has changed.
Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure
Vedi anche
Istruzione Class
Istruzione Interface
Istruzione Module
Istruzione Dim
Istruzione Const
Istruzione Enum
Istruzione Event
Operator Statement
Property Statement
Strutture e classi
Istruzione Sub (Visual Basic)
05/03/2021 • 12 minutes to read • Edit Online
Sintassi
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
Parti
attributelist
Shared
Obbligatorio. Nome della procedura. Vedere Declared Element Names. Per creare una routine del
costruttore per una classe, impostare il nome di una Sub stored procedure sulla New parola chiave. Per
altre informazioni, vedere durata degli oggetti: come creare ed eliminare definitivamente oggetti.
typeparamlist
facoltativo. Elenco di parametri di tipo per una routine generica. Vedere elenco dei tipi.
parameterlist
facoltativo. Elenco di nomi di variabili locali che rappresentano i parametri di questa procedura. Vedere
elenco di parametri.
Implements
facoltativo. Indica che questa procedura implementa una o più Sub procedure, ognuna delle quali è
definita in un'interfaccia implementata dalla classe o dalla struttura contenitore di questa procedura.
Vedere istruzione Implements.
implementslist
PA RT E DESC RIZ IO N E
Handles
facoltativo. Indica che questa procedura può gestire uno o più eventi specifici. Vedere handle.
eventlist
PA RT E DESC RIZ IO N E
statements
Commenti
Tutto il codice eseguibile deve trovarsi all'interno di una routine. Utilizzare una Sub stored procedure quando
non si desidera restituire un valore al codice chiamante. Utilizzare una Function procedura quando si desidera
restituire un valore.
Le Exit Sub Return istruzioni e generano un'uscita immediata da una Sub routine. Qualsiasi numero di
Exit Sub Return istruzioni e può comparire in qualsiasi punto della procedura ed è possibile combinare le
Exit Sub Return istruzioni e.
Chiamata a una procedura secondaria
Per chiamare una Sub stored procedure, utilizzare il nome della stored procedure in un'istruzione e quindi
seguire tale nome con l'elenco di argomenti racchiuso tra parentesi. È possibile omettere le parentesi solo se
non si forniscono argomenti. Tuttavia, il codice è più leggibile se si includono sempre le parentesi.
Una Sub routine e una Function procedura possono avere parametri ed eseguire una serie di istruzioni.
Tuttavia, una Function routine restituisce un valore e una Sub procedura non lo è. Pertanto, non è possibile
utilizzare una Sub stored procedure in un'espressione.
È possibile utilizzare la Call parola chiave quando si chiama una Sub routine, ma tale parola chiave non è
consigliata per la maggior parte degli utilizzi. Per ulteriori informazioni, vedere istruzione Call.
Visual Basic a volte riorganizza le espressioni aritmetiche per aumentare l'efficienza interna. Per questo motivo,
se nell'elenco di argomenti sono incluse espressioni che chiamano altre routine, non è necessario presupporre
che tali espressioni verranno richiamate in un ordine particolare.
NOTE
Una Async routine viene restituita al chiamante quando viene rilevato il primo oggetto atteso che non è ancora
completo o viene raggiunta la fine della Async procedura, a seconda di quale si verifica per primo.
È anche possibile contrassegnare un' istruzione di funzione con il Async modificatore. Una Async funzione può
avere un tipo restituito di Task<TResult> o Task . Un esempio più avanti in questo argomento illustra una Async
funzione con tipo restituito Task<TResult> .
Async``Sub le stored procedure vengono utilizzate principalmente per i gestori eventi, in cui non è possibile
restituire un valore. Una Async Sub routine non può essere attesa e il chiamante di una Async Sub stored
procedure non può intercettare le eccezioni Sub generate dalla procedura.
Una Async routine non può dichiarare parametri ByRef .
Per altre informazioni sulle Async procedure, vedere programmazione asincrona con Async e await, flusso di
controllo in programmi asincronie tipi restituiti asincroni.
Esempio
Nell'esempio seguente viene utilizzata l' Sub istruzione per definire il nome, i parametri e il codice che formano
il corpo di una Sub routine.
Sub ComputeArea(ByVal length As Double, ByVal width As Double)
' Declare local variable.
Dim area As Double
If length = 0 Or width = 0 Then
' If either argument = 0 then exit Sub immediately.
Exit Sub
End If
' Calculate area of rectangle.
area = length * width
' Print area to Immediate window.
Debug.WriteLine(area)
End Sub
Esempio
Nell'esempio seguente DelayAsync è un oggetto Async Function che ha un tipo restituito Task<TResult> .
DelayAsync ha un'istruzione Return che restituisce un numero intero. La dichiarazione di funzione di
DelayAsync deve pertanto avere un tipo restituito di Task(Of Integer) . Poiché il tipo restituito è
Task(Of Integer) , la valutazione dell' Await espressione in DoSomethingAsync produce un Integer, come
illustrato nell'istruzione seguente: Dim result As Integer = Await delayTask .
La startButton_Click procedura è un esempio di Async Sub procedura. Poiché DoSomethingAsync è una Async
funzione, l'attività per la chiamata a DoSomethingAsync deve essere attesa, come illustrato nell'istruzione
seguente: Await DoSomethingAsync() . La startButton_Click Sub procedura deve essere definita con il Async
modificatore perché contiene un' Await espressione.
' Output:
' Result: 5
Vedi anche
Istruzione Implements
Istruzione Function
Elenco parametri
Istruzione Dim
Istruzione Call
Di
Matrici di parametri
Procedura: Usare una classe generica
Risoluzione dei problemi relativi alle routine
Metodi parziali
Istruzione SyncLock
05/03/2021 • 9 minutes to read • Edit Online
Sintassi
SyncLock lockobject
[ block ]
End SyncLock
Parti
lockobject
Obbligatorio. Espressione che restituisce un riferimento a un oggetto.
block
facoltativo. Blocco di istruzioni da eseguire quando viene acquisito il blocco.
End SyncLock
Termina un SyncLock blocco.
Commenti
L' SyncLock istruzione garantisce che più thread non eseguano contemporaneamente il blocco di istruzioni.
SyncLock impedisce l'immissione del blocco da parte di ogni thread finché nessun altro thread lo esegue.
L'uso più comune di SyncLock è quello di proteggere i dati dall'aggiornamento simultaneo di più di un thread.
Se le istruzioni che modificano i dati devono andare al completamento senza interruzioni, inserirle all'interno di
un SyncLock blocco.
Un blocco di istruzioni protetto da un blocco esclusivo viene talvolta definito sezione critica.
Regole
Diramazione. Non è possibile eseguire il branching in un SyncLock blocco dall'esterno del blocco.
Valore dell'oggetto Lock. Il valore di lockobject non può essere Nothing . È necessario creare l'oggetto
Lock prima di utilizzarlo in un' SyncLock istruzione.
Non è possibile modificare il valore di lockobject durante l'esecuzione di un SyncLock blocco. Il
meccanismo richiede che l'oggetto Lock rimanga invariato.
Non è possibile usare l'operatore await in un SyncLock blocco.
Comportamento
Meccanismo. Quando un thread raggiunge l' SyncLock istruzione, valuta l' lockobject espressione e
sospende l'esecuzione fino a quando non acquisisce un blocco esclusivo sull'oggetto restituito
dall'espressione. Quando un altro thread raggiunge l' SyncLock istruzione, non acquisisce un blocco fino
a quando il primo thread non esegue l' End SyncLock istruzione.
Dati protetti. Se lockobject è una Shared variabile, il blocco esclusivo impedisce a un thread in qualsiasi
istanza della classe di eseguire il SyncLock blocco mentre un altro thread lo esegue. Questa operazione
protegge i dati condivisi tra tutte le istanze.
Se lockobject è una variabile di istanza (non Shared ), il blocco impedisce a un thread in esecuzione
nell'istanza corrente di eseguire il SyncLock blocco contemporaneamente a un altro thread nella stessa
istanza. Ciò consente di proteggere i dati gestiti dalla singola istanza.
Acquisizione e rilascio. Un SyncLock blocco si comporta come una Try...Finally costruzione in cui il
Try blocco acquisisce un blocco esclusivo su lockobject e il blocco lo Finally rilascia. Per questo
motivo, il SyncLock blocco garantisce il rilascio del blocco, indipendentemente dal modo in cui si esce dal
blocco. Questo vale anche nel caso di un'eccezione non gestita.
Chiamate del Framework. Il SyncLock blocco acquisisce e rilascia il blocco esclusivo chiamando i Enter
metodi e Exit della Monitor classe nello System.Threading spazio dei nomi.
Procedure di programmazione
L' lockobject espressione deve sempre restituire un oggetto che appartiene esclusivamente alla classe. È
necessario dichiarare una Private variabile oggetto per proteggere i dati appartenenti all'istanza corrente o
una Private Shared variabile oggetto per proteggere i dati comuni a tutte le istanze.
Non utilizzare la Me parola chiave per fornire un oggetto Lock per i dati dell'istanza. Se il codice esterno alla
classe dispone di un riferimento a un'istanza della classe, può utilizzare tale riferimento come oggetto Lock per
un SyncLock blocco completamente diverso da quello dell'utente, proteggendo i dati diversi. In questo modo, la
classe e l'altra classe potrebbero bloccarsi reciprocamente dall'esecuzione dei blocchi non correlati SyncLock .
Analogamente, il blocco su una stringa può essere problematico perché qualsiasi altro codice nel processo che
utilizza la stessa stringa condividerà lo stesso blocco.
Non è inoltre consigliabile utilizzare il Me.GetType metodo per fornire un oggetto Lock per i dati condivisi.
Questo perché GetType restituisce sempre lo stesso Type oggetto per un nome di classe specificato. Il codice
esterno può chiamare GetType sulla classe e ottenere lo stesso oggetto di blocco in uso. In questo modo le due
classi si bloccano tra loro i SyncLock blocchi.
Esempi
Descrizione
Nell'esempio seguente viene illustrata una classe che gestisce un semplice elenco di messaggi. Include i
messaggi in una matrice e l'ultimo elemento usato della matrice in una variabile. La addAnotherMessage
procedura incrementa l'ultimo elemento e archivia il nuovo messaggio. Queste due operazioni sono protette
dalle SyncLock istruzioni e End SyncLock , perché una volta che l'ultimo elemento è stato incrementato, il nuovo
messaggio deve essere archiviato prima che qualsiasi altro thread possa incrementare nuovamente l'ultimo
elemento.
Se la classe condivide un elenco di messaggi tra tutte le relative istanze, le variabili
simpleMessageList
messagesList e messagesLast verrebbero dichiarate come Shared . In questo caso, la variabile messagesLock
deve anche essere Shared , in modo che sia presente un singolo oggetto Lock usato da ogni istanza.
Codice
Class simpleMessageList
Public messagesList() As String = New String(50) {}
Public messagesLast As Integer = -1
Private messagesLock As New Object
Public Sub addAnotherMessage(ByVal newMessage As String)
SyncLock messagesLock
messagesLast += 1
If messagesLast < messagesList.Length Then
messagesList(messagesLast) = newMessage
End If
End SyncLock
End Sub
End Class
Descrizione
Nell'esempio seguente vengono usati i thread e SyncLock . Finché l' SyncLock istruzione è presente, il blocco di
istruzioni è una sezione critica e balance mai diventa un numero negativo. È possibile impostare come
commento SyncLock le End SyncLock istruzioni e per vedere l'effetto dell'uscita dalla SyncLock parola chiave.
Codice
Imports System.Threading
Module Module1
Class Account
Dim thisLock As New Object
Dim balance As Integer
' Comment out the SyncLock and End SyncLock lines to see
' the effect of leaving out the SyncLock keyword.
SyncLock thisLock
If balance >= amount Then
Console.WriteLine("Balance before Withdrawal : " & balance)
Console.WriteLine("Amount to Withdraw : -" & amount)
balance = balance - amount
Console.WriteLine("Balance after Withdrawal : " & balance)
Return amount
Else
' Transaction rejected.
Return 0
End If
End SyncLock
End Function
Sub Main()
Dim threads(10) As Thread
Dim acc As New Account(1000)
For i As Integer = 0 To 9
Dim t As New Thread(New ThreadStart(AddressOf acc.DoTransactions))
threads(i) = t
Next
For i As Integer = 0 To 9
threads(i).Start()
Next
End Sub
End Module
Commenti
Vedi anche
System.Threading.Monitor
System.Threading.Interlocked
Panoramica delle primitive di sincronizzazione
Istruzione Then
05/03/2021 • 2 minutes to read • Edit Online
Commenti
È possibile usare la parola chiave Then nei contesti seguenti:
#If... Quindi... #Else direttiva
Istruzione If...Then...Else
Vedi anche
Parole chiave
Istruzione Throw (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
Throw [ expression ]
Parte
expression
Fornisce informazioni sull'eccezione da generare. Facoltativo quando si trova in un' Catch istruzione, in caso
contrario obbligatorio.
Commenti
L' Throw istruzione genera un'eccezione che può essere gestita con codice di gestione delle eccezioni strutturato
( Try ... Catch ... Finally ) o codice di gestione delle eccezioni non strutturato ( On Error GoTo ). È possibile
usare l' Throw istruzione per intercettare gli errori all'interno del codice perché Visual Basic sposta lo stack di
chiamate fino a trovare il codice di gestione delle eccezioni appropriato.
Un'istruzione Throw senza espressione può essere utilizzata solo in un' Catch istruzione, nel qual caso
l'istruzione genera nuovamente l'eccezione attualmente gestita dall' Catch istruzione.
L' Throw istruzione Reimposta lo stack di chiamate per l' expression eccezione. Se expression non viene
specificato, lo stack di chiamate viene lasciato invariato. È possibile accedere allo stack di chiamate per
l'eccezione tramite la StackTrace Proprietà.
Esempio
Nel codice seguente viene utilizzata l' Throw istruzione per generare un'eccezione:
Vedi anche
Istruzione Try...Catch...Finally
Istruzione On Error
Istruzione Try...Catch...Finally (Visual Basic)
02/11/2020 • 23 minutes to read • Edit Online
Consente di gestire alcuni o tutti i possibili errori che possono verificarsi in un blocco di codice specifico, mentre
è ancora in esecuzione il codice.
Sintassi
Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Se si prevede che una particolare eccezione possa verificarsi durante una particolare sezione di codice, inserire il
codice in un Try blocco e usare un Catch blocco per mantenere il controllo e gestire l'eccezione, se si verifica.
Un' Try…Catch istruzione è costituita Try da un blocco seguito da una o più Catch clausole, che specificano i
gestori per varie eccezioni. Quando viene generata un'eccezione in un Try blocco, Visual Basic cerca l' Catch
istruzione che gestisce l'eccezione. Se Catch non viene trovata alcuna istruzione corrispondente, Visual Basic
esamina il metodo che ha chiamato il metodo corrente e così via fino allo stack di chiamate. Se non Catch viene
trovato alcun blocco, Visual Basic Visualizza un messaggio di eccezione non gestita per l'utente e interrompe
l'esecuzione del programma.
In un'istruzione è possibile utilizzare più di un' Catch istruzione Try…Catch . In tal caso, l'ordine delle Catch
clausole è significativo perché vengono esaminate in ordine. Intercettare le eccezioni più specifiche prima di
quelle meno specifiche.
Le Catch condizioni dell'istruzione seguenti sono le meno specifiche e intercettano tutte le eccezioni che
derivano dalla Exception classe. In genere, è consigliabile usare una di queste varianti come ultimo Catch
blocco nella Try...Catch...Finally struttura, dopo avere intercettato tutte le eccezioni specifiche previste. Il
flusso di controllo non può mai raggiungere un Catch blocco che segue una di queste varianti.
type È Exception , ad esempio: Catch ex As Exception
TIP
L' Try…Catch…Finally istruzione è disponibile come frammento di codice IntelliSense. In Gestione frammenti di codice
espandere modelli di codice-if, for each, tr y catch, Proper ty e così via , quindi gestione degli errori (eccezioni) .
Per altre informazioni, vedere Code Snippets (Frammenti di codice).
Blocco finally
Se si dispone di una o più istruzioni che devono essere eseguite prima di uscire dalla Try struttura, utilizzare un
Finally blocco. Il controllo passa al Finally blocco immediatamente prima che venga passato all'esterno della
Try…Catch struttura. Questo vale anche se si verifica un'eccezione in qualsiasi punto all'interno della Try
struttura.
Un Finally blocco è utile per l'esecuzione di codice che deve essere eseguito anche se si verifica un'eccezione.
Il controllo viene passato al Finally blocco indipendentemente dal modo in cui il Try...Catch blocco viene
chiuso.
Il codice in un Finally blocco viene eseguito anche se il codice rileva un' Return istruzione in un Try blocco o
Catch . Il controllo non passa da un Try Catch blocco o al blocco corrispondente Finally nei casi seguenti:
TIP
Se non è necessario intercettare eccezioni specifiche, l' Using istruzione si comporta come un Try…Finally blocco e
garantisce l'eliminazione delle risorse, indipendentemente dalla modalità di uscita dal blocco. Questo vale anche con
un'eccezione non gestita. Per ulteriori informazioni, vedere istruzione using.
Argomento Exception
L' Catch exception argomento Block è un'istanza della Exception classe o una classe che deriva dalla
Exception classe. L' Exception istanza della classe corrisponde all'errore che si è verificato nel Try blocco.
Le proprietà dell' Exception oggetto consentono di identificare la ragione e la posizione di un'eccezione. Ad
esempio, la StackTrace proprietà elenca i metodi chiamati che hanno generato l'eccezione, consentendo di
individuare la posizione in cui si è verificato l'errore nel codice. MessageRestituisce un messaggio che descrive
l'eccezione. HelpLinkRestituisce un collegamento a un file della Guida associato. InnerExceptionRestituisce l'
Exception oggetto che ha causato l'eccezione corrente oppure restituisce Nothing se non è presente alcun
oggetto originale Exception .
Console.Write(sr.ReadToEnd)
sr.Close()
End If
End Sub
Verificare che il codice in Catch blocchi possa segnalare correttamente le eccezioni agli utenti, sia tramite la
registrazione thread-safe che i messaggi appropriati. In caso contrario, le eccezioni potrebbero rimanere
sconosciute.
Metodi asincroni
Se si contrassegna un metodo con il modificatore Async , è possibile usare l'operatore await nel metodo.
Un'istruzione con l' Await operatore sospende l'esecuzione del metodo fino al completamento dell'attività
attesa. L'attività rappresenta il lavoro attualmente in fase di esecuzione. Quando l'attività associata all' Await
operatore termina, l'esecuzione riprende nello stesso metodo. Per altre informazioni, vedere flusso di controllo
in programmi asincroni.
Un'attività restituita da un metodo asincrono può terminare con uno stato di errore, a indicare che è stata
completata a causa di un'eccezione non gestita. Un'attività può inoltre terminare con uno stato annullato, il che
comporta la generazione OperationCanceledException di un'eccezione dall'espressione await. Per intercettare
entrambi i tipi di eccezione, inserire l' Await espressione associata all'attività in un Try blocco e intercettare
l'eccezione nel Catch blocco. Un esempio è disponibile più avanti in questo argomento.
Un'attività può essere in uno stato di errore perché più eccezioni erano responsabili dell'errore. Ad esempio,
l'attività può essere il risultato di una chiamata a Task.WhenAll. Quando si attende tale attività, l'eccezione
rilevata è solo una delle eccezioni e non è possibile prevedere quale eccezione verrà rilevata. Un esempio è
disponibile più avanti in questo argomento.
Un' Await espressione non può trovarsi all'interno di un Catch blocco o di un Finally blocco.
Iterators
Una funzione o una funzione di accesso iteratore Get esegue un'iterazione personalizzata su una raccolta. Un
iteratore usa un'istruzione yield per restituire ogni elemento della raccolta uno alla volta. Si chiama una funzione
iteratore usando un per ogni... Istruzione successiva.
Un' Yield istruzione può trovarsi all'interno di un Try blocco. Un Try blocco che contiene un' Yield
istruzione può contenere Catch blocchi e può avere un Finally blocco. Per un esempio, vedere la sezione
"blocchi try in Visual Basic" degli iteratori .
Un' Yield istruzione non può trovarsi all'interno di un Catch blocco o di un Finally blocco.
Se il For Each corpo (all'esterno della funzione iteratore) genera un'eccezione, un Catch blocco nella funzione
iteratore non viene eseguito, ma Finally viene eseguito un blocco nella funzione iteratore. Un Catch blocco
all'interno di una funzione iteratore intercetta solo le eccezioni che si verificano all'interno della funzione
iteratore.
Try
Process.Start("http://www.microsoft.com")
Catch ex As Exception
MsgBox("Can't load Web page" & vbCrLf & ex.Message)
End Try
In una situazione di attendibilità parziale, è necessario inserire l' Process.Start istruzione in un oggetto
separato Sub . La chiamata iniziale a Sub avrà esito negativo. In questo modo, è possibile Try...Catch
intercettarlo prima Sub che venga avviato l'oggetto che contiene Process.Start e l'eccezione di sicurezza
prodotta.
Esempi
Struttura di try... Rileva... Infine
Nell'esempio seguente viene illustrata la struttura dell' Try...Catch...Finally istruzione.
Public Sub TryExample()
' Declare variables.
Dim x As Integer = 5
Dim y As Integer = 0
Try
Throw New ArgumentException()
Catch e As OverflowException When i = 5
Console.WriteLine("First handler")
Catch e As ArgumentException When i = 4
Console.WriteLine("Second handler")
Catch When i = 5
Console.WriteLine("Third handler")
End Try
End Sub
' Output: Third handler
Try
Dim result As String = Await theTask
Debug.WriteLine("Result: " & result)
Catch ex As Exception
Debug.WriteLine("Exception Message: " & ex.Message)
End Try
Try
Await allTasks
Catch ex As Exception
Debug.WriteLine("Exception: " & ex.Message)
Debug.WriteLine("Task IsFaulted: " & allTasks.IsFaulted)
For Each inEx In allTasks.Exception.InnerExceptions
Debug.WriteLine("Task Inner Exception: " + inEx.Message)
Next
End Try
End Function
' Output:
' Exception: Error-First Task
' Task IsFaulted: True
' Task Inner Exception: Error-First Task
' Task Inner Exception: Error-Second Task
' Task Inner Exception: Error-Third Task
Vedere anche
Err
Exception
Istruzione Exit
Istruzione On Error
Procedure consigliate per l'uso dei frammenti di codice
Gestione delle eccezioni
Istruzione throw
Istruzione Using (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Dichiara l'inizio di un Using blocco e, facoltativamente, acquisisce le risorse di sistema controllate dal blocco.
Sintassi
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Parti
T ERM IN E DEF IN IZ IO N E
-oppure-
resourcename As resourcetype = resourceexpression
Parti Resources
T ERM IN E DEF IN IZ IO N E
Commenti
A volte il codice richiede una risorsa non gestita, ad esempio un handle di file, un wrapper COM o una
connessione SQL. Un Using blocco garantisce l'eliminazione di una o più risorse di questo tipo al termine del
codice. In modo da renderli disponibili per l'utilizzo da altro codice.
Le risorse gestite vengono eliminate dal .NET Framework Garbage Collector (GC) senza alcuna codifica
aggiuntiva da parte dell'utente. Non è necessario un Using blocco per le risorse gestite. Tuttavia, è comunque
possibile usare un Using blocco per forzare l'eliminazione di una risorsa gestita anziché attendere il Garbage
Collector.
Un Using blocco è costituito da tre parti: acquisizione, utilizzo e eliminazione.
L' acquisizione significa creare una variabile e inizializzarla per fare riferimento alla risorsa di sistema. L'
Using istruzione può acquisire una o più risorse oppure è possibile acquisire esattamente una risorsa
prima di immettere il blocco e fornirla all' Using istruzione. Se si specifica resourceexpression , è
necessario acquisire la risorsa prima di passare il controllo all' Using istruzione.
L' utilizzo indica l'accesso alle risorse e l'esecuzione di azioni con loro. Le istruzioni tra Using e
End Using rappresentano l'utilizzo delle risorse.
Comportamento
Un Using blocco si comporta come una Try costruzione... Finally in cui il Try blocco USA le risorse e il
Finally blocco ne comporta l'eliminazione. Per questo motivo, il Using blocco garantisce l'eliminazione delle
risorse, indipendentemente dal modo in cui si esce dal blocco. Questo vale anche nel caso di un'eccezione non
gestita, ad eccezione di StackOverflowException .
L'ambito di ogni variabile di risorsa acquisita dall' Using istruzione è limitato al Using blocco.
Se nell'istruzione si specifica più di una risorsa di sistema Using , l'effetto sarà identico a quello di un blocco
annidato in Using un altro.
Se resourcename è Nothing , non viene effettuata alcuna chiamata a Dispose e non viene generata alcuna
eccezione.
NOTE
Il codice all'interno del Using blocco non deve assegnare l'oggetto in resourcename a un'altra variabile. Quando si esce
dal Using blocco, la risorsa viene eliminata e l'altra variabile non può accedere alla risorsa a cui fa riferimento.
Esempio
Nell'esempio seguente viene creato un file denominato log.txt e vengono scritte due righe di testo nel file.
Nell'esempio viene inoltre letto lo stesso file e vengono visualizzate le righe di testo:
Poiché le TextWriter TextReader classi e implementano l' IDisposable interfaccia, il codice può utilizzare le Using
istruzioni per garantire che il file venga chiuso correttamente dopo le operazioni di scrittura e lettura.
line = reader.ReadLine()
Do Until line Is Nothing
Console.WriteLine(line)
line = reader.ReadLine()
Loop
End Using
End Sub
Vedi anche
IDisposable
Istruzione Try...Catch...Finally
Procedura: eliminare una risorsa di sistema
Istruzione While...End While (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Esegue una serie di istruzioni purché una determinata condizione sia True .
Sintassi
While condition
[ statements ]
[ Continue While ]
[ statements ]
[ Exit While ]
[ statements ]
End While
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Utilizzare una While...End While struttura quando si desidera ripetere un set di istruzioni per un numero
indefinito di volte, purché rimanga una condizione True . Se si desidera maggiore flessibilità con la posizione in
cui si testa la condizione o il risultato per il test, è preferibile eseguire... Istruzione Loop. Se si desidera ripetere le
istruzioni impostando il numero di volte, per... L'istruzione successiva è in genere una scelta migliore.
NOTE
La While parola chiave viene usata anche nel. .. Istruzione Loop, clausola Skip While e clausola Take While.
Se condition è True , tutto l' statements esecuzione fino a quando non End While viene rilevata l'istruzione. Il
controllo viene quindi restituito all' While istruzione e condition viene di nuovo controllata. Se condition è
ancora True , il processo viene ripetuto. Se è False , il controllo passa all'istruzione che segue l' End While
istruzione.
L' While istruzione controlla sempre la condizione prima di avviare il ciclo. Il ciclo continua finché la condizione
rimane True . Se condition è False la prima volta che si immette il ciclo, non viene eseguito neanche una
volta.
Il condition risultato è in genere dovuto a un confronto di due valori, ma può essere qualsiasi espressione che
restituisce un valore di tipo di dati booleano ( True o False ). Questa espressione può includere un valore di
un altro tipo di dati, ad esempio un tipo numerico, che è stato convertito in Boolean .
È possibile annidare i While cicli inserendo un ciclo all'interno di un altro. È anche possibile annidare diversi tipi
di strutture di controllo tra loro. Per altre informazioni, vedere strutture di controlli annidati.
Esci da
L'istruzione Exit While può fornire un altro modo per uscire da un While ciclo. Exit While trasferisce
immediatamente il controllo all'istruzione che segue l' End While istruzione.
In genere si usa Exit While dopo la valutazione di una determinata condizione, ad esempio in una
If...Then...Else struttura. Potrebbe essere necessario uscire da un ciclo se viene rilevata una condizione che
rende superfluo o Impossibile continuare l'iterazione, ad esempio un valore errato o una richiesta di
terminazione. È possibile usare Exit While quando si esegue il test di una condizione che può causare un ciclo
infinito, ovvero un ciclo che può eseguire un numero di volte molto grande o addirittura infinito. È quindi
possibile usare Exit While per eseguire l'escape del ciclo.
È possibile inserire un numero qualsiasi di Exit While istruzioni in qualsiasi punto del While ciclo.
Quando viene utilizzato all'interno While di cicli annidati, Exit While trasferisce il controllo al di fuori del ciclo
più interno e al successivo livello di nidificazione.
L' Continue While istruzione trasferisce immediatamente il controllo all'iterazione successiva del ciclo. Per
ulteriori informazioni, vedere istruzione continue.
Esempio
Nell'esempio seguente, le istruzioni del ciclo continuano a essere eseguite fino a quando la index variabile non
è maggiore di 10.
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Esempio
Nell'esempio seguente viene illustrato l'utilizzo delle Continue While istruzioni e Exit While .
Dim index As Integer = 0
While index < 100000
index += 1
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
Esempio
Nell'esempio seguente vengono lette tutte le righe in un file di testo. Il OpenText metodo apre il file e restituisce
un oggetto StreamReader che legge i caratteri. Nella While condizione, il Peek metodo di StreamReader
determina se il file contiene caratteri aggiuntivi.
sr.Close()
End If
End Sub
Vedi anche
Strutture di ciclo
Istruzione Do...Loop
Istruzione For...Next
Tipo di dati Boolean
Strutture di controllo annidate
Istruzione Exit
Istruzione Continue
Istruzione With...End With (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Esegue una serie di istruzioni che fanno riferimento più volte a un singolo oggetto o struttura in modo da poter
utilizzare una sintassi semplificata per le istruzioni quando si accede ai membri dell'oggetto o della struttura.
Quando si utilizza una struttura, è possibile leggere solo i valori dei membri o i metodi invoke e ottenere un
errore se si tenta di assegnare valori ai membri di una struttura utilizzata in un'istruzione With...End With .
Sintassi
With objectExpression
[ statements ]
End With
Parti
T ERM IN E DEF IN IZ IO N E
statements facoltativo. Una o più istruzioni tra With e End With che
possono fare riferimento ai membri di un oggetto che verrà
prodotto dalla valutazione di objectExpression .
Commenti
Utilizzando With...End With , è possibile eseguire una serie di istruzioni in un oggetto specificato senza
specificare il nome dell'oggetto più volte. All'interno di un blocco di istruzioni With , è possibile specificare un
membro dell'oggetto che inizia con un punto, come se l'oggetto dell'istruzione With lo precedesse.
Per modificare più proprietà in un singolo oggetto, ad esempio, è possibile inserire le istruzioni di assegnazione
delle proprietà all'interno del blocco With...End With , facendo riferimento all'oggetto una sola volta anziché
una volta per assegnazione di proprietà.
Se il codice accede allo stesso oggetto in più istruzioni, utilizzando l'istruzione di With si ottengono i vantaggi
seguenti:
Non è necessario valutare più volte un'espressione complessa o assegnare il risultato a una variabile
temporanea per fare riferimento ai membri più volte.
È possibile rendere il codice più leggibile eliminando le espressioni di qualificazione ripetitive.
Il tipo di dati objectExpression può essere qualsiasi tipo di classe o struttura o anche un tipo elementare di
Visual Basic come Integer . Se objectExpression restituisce qualcosa di diverso da un oggetto, è possibile
leggere solo i valori dei membri o i metodi invoke e ottenere un errore se si tenta di assegnare valori ai membri
di una struttura utilizzata in un'istruzione With...End With . Si tratta dello stesso errore che si otterrebbe se viene
richiamato un metodo che restituisce una struttura e immediatamente si accede e si assegna un valore a un
membro del risultato della funzione, come GetAPoint().x = 1 . Il problema in entrambi i casi è che la struttura
esiste solo nello stack di chiamate e in nessun caso un membro di una struttura modificata in tali situazioni può
scrivere in una posizione in modo che altro codice del programma può osservare la modifica.
objectExpression viene valutato una volta, all'ingresso nel blocco. Non è possibile riassegnare
objectExpression dall'interno del blocco With .
Dal blocco With , è possibile accedere ai metodi e alle proprietà del solo oggetto specificato senza qualifica.
Metodi e proprietà di altri oggetti possono essere utilizzati ma è necessario qualificarli con i relativi nomi di
oggetto.
È possibile inserire un'istruzione With...End With in un'altra. Le istruzioni With...End With annidate possono
creare confusione se gli oggetti a cui si fa riferimento non sono chiari dal contesto. È necessario fornire un
riferimento completo a un oggetto che si trova in un blocco With esterno quando si fa riferimento all'oggetto
dal un blocco With interno.
Non è consentita la creazione di rami in un'istruzione With dall'esterno del blocco.
A meno che il blocco non contenga un ciclo, le istruzioni vengono eseguite una sola volta. È possibile annidare
tipi diversi di strutture di controllo. Per altre informazioni, vedere strutture di controlli annidati.
NOTE
È possibile utilizzare la parola chiave With anche negli inizializzatori di oggetto. Per ulteriori informazioni ed esempi,
vedere inizializzatori di oggetto: tipi denominati e anonimi e tipi anonimi.
Se si utilizza un blocco With solo per inizializzare le proprietà o i campi di un oggetto di cui è stata appena creata
un'istanza, è possibile utilizzare un inizializzatore di oggetto.
Esempio
Nell'esempio riportato di seguito, ogni blocco With esegue una serie di istruzioni su un singolo oggetto.
With theCustomer
.Name = "Coho Vineyard"
.URL = "http://www.cohovineyard.com/"
.City = "Redmond"
End With
With theCustomer.Comments
.Add("First comment.")
.Add("Second comment.")
End With
End Sub
With theWindow
With .InfoLabel
.Content = "This is a message."
.Foreground = Brushes.DarkSeaGreen
.Background = Brushes.LightYellow
End With
Vedi anche
List<T>
Strutture di controllo annidate
Inizializzatori di oggetto: tipi denominati e tipi anonimi
Tipi anonimi
Istruzione Yield (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Sintassi
Yield expression
Parametri
T ERM IN E DEF IN IZ IO N E
Commenti
L' Yield istruzione restituisce un elemento di una raccolta alla volta. L' Yield istruzione è inclusa in una
funzione o una funzione di accesso iteratore Get che esegue iterazioni personalizzate su una raccolta.
Si utilizza una funzione iteratore utilizzando un per ogni... Istruzione successiva o query LINQ. Ogni iterazione
del For Each ciclo chiama la funzione iteratore. Quando viene Yield raggiunta un'istruzione nella funzione
iteratore, expression viene restituito e viene mantenuta la posizione corrente nel codice. L'esecuzione viene
riavviata a partire da quella posizione la volta successiva che viene chiamata la funzione iteratore.
Deve esistere una conversione implicita dal tipo di expression nell' Yield istruzione al tipo restituito
dell'iteratore.
È possibile utilizzare un' Exit Function Return istruzione o per terminare l'iterazione.
"Yield" non è una parola riservata e ha un significato speciale solo quando viene usato in una Iterator
funzione o una funzione di Get accesso.
Per ulteriori informazioni sulle funzioni e sulle funzioni di accesso iteratori Get , vedere iteratori.
Implementazione tecnica
Il codice seguente restituisce un oggetto IEnumerable (Of String) da una funzione iteratore e quindi scorre gli
elementi dell'oggetto IEnumerable (Of String) .
La chiamata a MyIteratorFunction non esegue il corpo della funzione. La chiamata restituisce invece
IEnumerable(Of String) nella variabile elements .
In un'iterazione del ciclo For Each , il metodo MoveNext viene chiamato per elements . Questa chiamata esegue
il corpo di MyIteratorFunction fino a quando non viene raggiunta l'istruzione Yield successiva. L' Yield
istruzione restituisce un'espressione che determina non solo il valore della element variabile per l'utilizzo da
parte del corpo del ciclo, ma anche la Current proprietà degli elementi, ovvero un oggetto
IEnumerable (Of String) .
In ogni iterazione successiva del ciclo For Each , l'esecuzione del corpo dell'iteratore continua da dove è stata
interrotta, fermandosi ancora quando raggiunge un'istruzione Yield . Il For Each ciclo viene completato
quando viene raggiunta la fine della funzione iteratore o un' Return Exit Function istruzione o.
Esempio
Nell'esempio seguente è presente un' Yield istruzione che si trova all'interno di un oggetto per... Ciclo
successivo . Ogni iterazione del corpo dell'istruzione for each in Main Crea una chiamata alla Power funzione
iteratore. Ogni chiamata alla funzione iteratore procede fino alla prossima esecuzione dell'istruzione Yield , che
si verifica durante l'iterazione successiva del ciclo For…Next .
Il tipo restituito del metodo iteratore è IEnumerable<T> , un tipo di interfaccia iteratore. Quando il metodo
iteratore viene chiamato, restituisce un oggetto enumerabile che contiene le potenze di un numero.
Sub Main()
For Each number In Power(2, 8)
Console.Write(number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
Console.ReadKey()
End Sub
Dim result = 1
Esempio
Nell'esempio seguente viene illustrata una funzione di accesso Get che è un iteratore. La dichiarazione di
proprietà include un Iterator modificatore.
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In theGalaxies.NextGalaxy
With theGalaxy
Console.WriteLine(.Name & " " & .MegaLightYears)
End With
Next
Console.ReadKey()
End Sub
Vedi anche
Istruzioni
Clausole (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sezioni correlate
Riferimenti al linguaggio Visual Basic
Clausola Alias (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Indica che una routine esterna ha un altro nome nella relativa DLL.
Commenti
La Alias parola chiave può essere usata in questo contesto:
Declare Statement
Nell'esempio seguente Alias viene usata la parola chiave per specificare il nome della funzione in advapi32.dll,
GetUserNameA , che getUserName viene usata al posto di in questo esempio. getUserName La funzione viene
chiamata in Sub getUser , che Visualizza il nome dell'utente corrente.
Vedi anche
Parole chiave
Clausola As (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Introduce una As clausola che identifica un tipo di dati in un'istruzione di dichiarazione o un elenco di vincoli in
un parametro di tipo generico.
Commenti
È possibile usare la parola chiave As nei contesti seguenti:
Aggregate Clause
Istruzione Class
Istruzione Const
Declare Statement
Istruzione Delegate
Istruzione Dim
Istruzione Enum
Istruzione Event
Per... Istruzioni successive
Per ogni... Istruzioni successive
Clausola from
Istruzione Function
Clausola Group Join
Istruzione Interface
Operator Statement
Property Statement
Istruzione Structure
Istruzione Sub
Prova... Rileva... Finally (istruzioni)
Vedi anche
Procedura: creare una nuova variabile
Tipi di dati
Dichiarazione di variabile
Type List
Generic Types in Visual Basic
Parole chiave
Clausola Handles (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
proceduredeclaration Handles eventlist
Parti
proceduredeclaration
Dichiarazione Sub per la routine che gestirà l'evento.
eventlist
Elenco degli eventi che devono essere gestiti da proceduredeclaration . Gli eventi devono essere generati dalla
classe base per la classe corrente o da un oggetto dichiarato usando la parola chiave WithEvents .
Commenti
Usare la parola chiave Handles alla fine di una dichiarazione di routine per fare in modo che la routine gestisca
eventi generati da una variabile oggetto dichiarata con la parola chiave WithEvents . La parola chiave Handles
può anche essere usata in una classe derivata per gestire eventi da una classe base.
La parola chiave Handles e l'istruzione AddHandler consentono entrambe di specificare che quelle particolari
routine gestiscono particolari eventi, ma esistono alcune differenze. Usare la parola chiave Handles quando si
definisce una routine, per specificare che questa gestisce un particolare evento. L'istruzione AddHandler
connette le routine agli eventi in fase di esecuzione. Per ulteriori informazioni, vedere l' istruzione AddHandler.
Per gli eventi personalizzati, l'applicazione richiama la funzione di accesso AddHandler dell'evento quando
aggiunge la routine come gestore eventi. Per ulteriori informazioni sugli eventi personalizzati, vedere istruzione
Event.
Esempio
Public Class ContainerClass
' Module or class level declaration.
WithEvents Obj As New Class1
L'esempio seguente illustra come una classe derivata può usare l'istruzione Handles per gestire un evento da
una classe base.
Esempio
Nell'esempio seguente sono contenuti due gestori di eventi Button per un progetto di applicazione WPF .
Esempio
L'esempio che segue equivale a quello precedente. L'oggetto eventlist nella clausola Handles contiene gli
eventi per entrambi i pulsanti.
Private Sub Button_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles
Button1.Click, Button2.Click
MessageBox.Show(sender.Name & " clicked")
End Sub
Vedi anche
WithEvents
Istruzione AddHandler
Istruzione RemoveHandler
Istruzione Event
Istruzione RaiseEvent
Eventi
Clausola Implements (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Indica che un membro di classe o di struttura fornisce l'implementazione per un membro definito in
un'interfaccia.
Commenti
La Implements parola chiave non corrisponde all' istruzione Implements. Usare l' Implements istruzione per
specificare che una classe o una struttura implementa una o più interfacce, quindi per ogni membro si usa la
Implements parola chiave per specificare l'interfaccia e il membro che implementa.
Se una classe o una struttura implementa un'interfaccia, deve includere l' Implements istruzione
immediatamente dopo l'istruzione di classe o di strutturae deve implementare tutti i membri definiti
dall'interfaccia.
Reimplementazione
In una classe derivata, è possibile reimplementare un membro di interfaccia che la classe base ha già
implementato. Questa operazione è diversa rispetto all'override del membro della classe base nei seguenti
aspetti:
Non è necessario che il membro della classe base sia sottoponibile a override per essere reimplementato.
È possibile reimplementare il membro con un nome diverso.
La Implements parola chiave può essere utilizzata nei contesti seguenti:
Istruzione Event
Istruzione Function
Property Statement
Istruzione Sub
Vedi anche
Istruzione Implements
Istruzione Interface
Istruzione Class
Istruzione Structure
Clausola In (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica il gruppo che deve essere attraversato dalla variabile di ciclo in un For Each ciclo oppure specifica la
raccolta per eseguire una query in From una Join clausola, o Group Join .
Commenti
La In parola chiave può essere utilizzata nei contesti seguenti:
Istruzione For Each...Next
Clausola from
Clausola join
Clausola Group Join
Vedi anche
Parole chiave
Clausola Into (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Commenti
La Each parola chiave viene usata nei contesti seguenti:
Aggregate Clause
Clausola Group by
Clausola Group Join
Vedi anche
Parole chiave
Clausola Of (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Introduce una Of clausola che identifica un parametro di tipo in una classe, una struttura, un'interfaccia, un
delegato o una routine generica . Per informazioni sui tipi generici, vedere tipi generici in Visual Basic.
Se si completa la definizione di classe precedente, è possibile creare una varietà di dictionary classi. I tipi forniti
entryType e keyType determinano il tipo di voce che la classe include e il tipo di chiave che associa a ogni voce.
A causa del vincolo, è necessario fornire a keyType un tipo che implementa IComparable .
Nell'esempio di codice seguente viene creato un oggetto contenente le String voci e viene associata una
Integer chiave a ciascuna di esse. Integer implementa IComparable e pertanto soddisfa il vincolo in keyType
.
Vedi anche
IComparable
Type List
Generic Types in Visual Basic
In
Out
Contesti delle dichiarazioni e livelli di accesso
predefiniti (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Questo argomento descrive quali tipi di Visual Basic possono essere dichiarati all'interno di altri tipi e quali sono
i livelli di accesso predefiniti se non specificati.
Vedi anche
Friend
Privata
Pubblica
Elenco degli attributi (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Specifica gli attributi da applicare a un elemento di programmazione dichiarato. Gli attributi sono separati da
una virgola. Di seguito è riportata la sintassi per un attributo.
Sintassi
[ attributemodifier ] attributename [ ( attributearguments | attributeinitializer ) ]
Parti
Commenti
È possibile applicare uno o più attributi a quasi tutti gli elementi di programmazione (tipi, procedure, proprietà e
così via). Gli attributi vengono visualizzati nei metadati dell'assembly e consentono di annotare il codice o di
specificare come usare un particolare elemento di programmazione. È possibile applicare gli attributi definiti da
Visual Basic e .NET Framework ed è possibile definire attributi personalizzati.
Per altre informazioni su quando usare gli attributi, vedere Cenni preliminari sugli attributi. Per informazioni sui
nomi di attributo, vedere nomi di elementi dichiarati.
Regole
Posizionamento. È possibile applicare gli attributi agli elementi di programmazione più dichiarati. Per
applicare uno o più attributi, inserire un blocco di attributi all'inizio della dichiarazione dell'elemento.
Ogni voce nell'elenco di attributi specifica un attributo che si vuole applicare e il modificatore e gli
argomenti usati per la chiamata dell'attributo.
Parentesi angolari. Se si fornisce un elenco di attributi, è necessario racchiuderlo tra parentesi angolari
(" < " e " > ").
Par te della dichiarazione. L'attributo deve essere parte della dichiarazione di elemento, non di
un'istruzione separata. È possibile usare la sequenza di continuazione di riga (" _ ") per estendere
l'istruzione di dichiarazione su più righe del codice sorgente.
Modificatori. Un modificatore di attributo ( Assembly o Module ) è obbligatorio per ogni attributo
applicato a un elemento di programmazione all'inizio di un file di origine. I modificatori di attributo non
sono consentiti per gli attributi applicati a elementi che non si trovano all'inizio di un file di origine.
Argomenti. Tutti gli argomenti posizionali per un attributo devono precedere qualsiasi inizializzatore di
proprietà o variabile.
Esempio
Nell'esempio seguente l'attributo viene applicato DllImportAttribute a una definizione di scheletro di una
Function routine.
<DllImportAttribute("kernel32.dll", EntryPoint:="MoveFileW",
SetLastError:=True, CharSet:=CharSet.Unicode,
ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
Public Shared Function MoveFile(ByVal src As String,
ByVal dst As String) As Boolean
' This function copies a file from the path src to the path dst.
' Leave this function empty. The DLLImport attribute forces calls
' to MoveFile to be forwarded to MoveFileW in KERNEL32.DLL.
End Function
DllImportAttribute indica che la procedura con attributi rappresenta un punto di ingresso in una libreria di
collegamento dinamico (DLL) non gestita. L'attributo fornisce il nome della DLL come argomento posizionale e
le altre informazioni come inizializzatori di variabile.
Vedi anche
Assembly
Modulo <keyword>
Panoramica degli attributi
Procedura: Interrompere e combinare istruzioni nel codice
Elenco dei parametri (Visual Basic)
05/03/2021 • 6 minutes to read • Edit Online
Specifica i parametri che una routine prevede quando viene chiamata. Più parametri sono separati da virgole. Di
seguito è riportata la sintassi per un parametro.
Sintassi
[ <attributelist> ] [ Optional ] [{ ByVal | ByRef }] [ ParamArray ]
parametername[( )] [ As parametertype ] [ = defaultvalue ]
Parti
attributelist
facoltativo. Elenco degli attributi che si applicano a questo parametro. È necessario racchiudere l' elenco degli
attributi tra parentesi angolari (" < " e " > ").
Optional
facoltativo. Specifica che questo parametro non è obbligatorio quando viene chiamata la stored procedure.
ByVal
facoltativo. Specifica che la routine non può sostituire o riassegnare l'elemento della variabile sottostante
all'argomento corrispondente nel codice chiamante.
ByRef
facoltativo. Specifica che la stored procedure può modificare l'elemento della variabile sottostante nel codice
chiamante nello stesso modo in cui è possibile il codice chiamante.
ParamArray
facoltativo. Specifica che l'ultimo parametro nell'elenco di parametri è una matrice facoltativa di elementi del
tipo di dati specificato. Ciò consente al codice chiamante di passare un numero arbitrario di argomenti alla
procedura.
parametername
Obbligatorio. Nome della variabile locale che rappresenta il parametro.
parametertype
Obbligatorio se Option Strict è On . Tipo di dati della variabile locale che rappresenta il parametro.
defaultvalue
Obbligatorio per i Optional parametri. Qualsiasi costante o espressione costante che restituisce il tipo di dati
del parametro. Se il tipo è Object o una classe, un'interfaccia, una matrice o una struttura, il valore predefinito
può essere solo Nothing .
Commenti
I parametri sono racchiusi tra parentesi e separati da virgole. Un parametro può essere dichiarato con qualsiasi
tipo di dati. Se non si specifica parametertype , il valore predefinito è Object .
Quando il codice chiamante chiama la stored procedure, passa un argomento a ogni parametro obbligatorio.
Per ulteriori informazioni, vedere differenze tra parametri e argomenti.
L'argomento che il codice chiamante passa a ogni parametro è un puntatore a un elemento sottostante nel
codice chiamante. Se questo elemento non è variabile (costante, valore letterale, enumerazione o espressione),
non è possibile modificare il codice. Se è un elemento variabile (una variabile dichiarata, un campo, una
proprietà, un elemento di matrice o un elemento della struttura), il codice chiamante può modificarlo. Per
ulteriori informazioni, vedere differenze tra argomenti modificabili e non modificabili.
Se viene passato un elemento variabile ByRef , può essere modificato anche dalla procedura. Per ulteriori
informazioni, vedere differenze tra il passaggio di un argomento per valore e per riferimento.
Regole
Parentesi. Se si specifica un elenco di parametri, è necessario racchiuderlo tra parentesi. Se non sono
presenti parametri, è comunque possibile usare le parentesi che racchiudono un elenco vuoto. Ciò
migliora la leggibilità del codice chiarendo che l'elemento è una routine.
Parametri facoltativi. Se si usa il Optional modificatore su un parametro, anche tutti i parametri
successivi nell'elenco devono essere facoltativi e devono essere dichiarati usando il Optional
modificatore.
Ogni dichiarazione di parametro facoltativa deve fornire la defaultvalue clausola.
Per ulteriori informazioni, vedere parametri facoltativi.
Matrici di parametri. È necessario specificare ByVal per un ParamArray parametro.
Non è possibile utilizzare sia Optional che ParamArray nello stesso elenco di parametri.
Per altre informazioni, vedere matrici di parametri.
Passaggio del meccanismo. Il meccanismo predefinito per ogni argomento è ByVal , il che significa
che la procedura non può modificare l'elemento della variabile sottostante. Tuttavia, se l'elemento è un
tipo di riferimento, la procedura può modificare il contenuto o i membri dell'oggetto sottostante, anche
se non è in grado di sostituire o riassegnare l'oggetto stesso.
Nomi dei parametri. Se il tipo di dati del parametro è una matrice, seguire parametername
immediatamente le parentesi. Per ulteriori informazioni sui nomi dei parametri, vedere nomi di elementi
dichiarati.
Esempio
Nell'esempio seguente viene illustrata una Function procedura che definisce due parametri.
Vedi anche
DllImportAttribute
Istruzione Function
Istruzione Sub
Declare Statement
Istruzione Structure
Option Strict Statement
Panoramica degli attributi
Procedura: Interrompere e combinare istruzioni nel codice
Elenco dei tipi (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Specifica i parametri di tipo per un elemento di programmazione generico . Più parametri sono separati da
virgole. Di seguito è riportata la sintassi per un parametro di tipo.
Sintassi
[genericmodifier] typename [ As constraintlist ]
Parti
T ERM IN E DEF IN IZ IO N E
Commenti
Ogni elemento di programmazione generico deve assumere almeno un parametro di tipo. Un parametro di tipo
è un segnaposto per un tipo specifico (un elemento costruito) che il codice client specifica quando crea
un'istanza del tipo generico. È possibile definire una classe, una struttura, un'interfaccia, una routine o un
delegato generico.
Per ulteriori informazioni sul momento in cui definire un tipo generico, vedere tipi generici in Visual Basic. Per
ulteriori informazioni sui nomi dei parametri di tipo, vedere nomi di elementi dichiarati.
Regole
Parentesi. Se si fornisce un elenco di parametri di tipo, è necessario racchiuderlo tra parentesi ed è
necessario introdurre l'elenco con la parola chiave of. Si usa Of una sola volta, all'inizio dell'elenco.
Vincoli. Un elenco di vincoli in un parametro di tipo può includere gli elementi seguenti in qualsiasi
combinazione:
Un numero qualsiasi di interfacce. Il tipo fornito deve implementare ogni interfaccia in questo
elenco.
Al massimo una classe. Il tipo specificato deve ereditare da quella classe.
La parola chiave New . Il tipo fornito deve esporre un costruttore senza parametri a cui il tipo
generico può accedere. Questa operazione è utile se si vincola un parametro di tipo in base a una o
più interfacce. Un tipo che implementa le interfacce non espone necessariamente un costruttore e,
a seconda del livello di accesso di un costruttore, il codice all'interno del tipo generico potrebbe
non essere in grado di accedervi.
Class Parola chiave o Structure parola chiave. La Class parola chiave vincola un parametro di
tipo generico per richiedere che qualsiasi argomento di tipo passato sia un tipo riferimento, ad
esempio una stringa, una matrice o un delegato, oppure un oggetto creato da una classe. La
Structure parola chiave vincola un parametro di tipo generico per richiedere che qualsiasi
argomento di tipo passato sia un tipo valore, ad esempio una struttura, un'enumerazione o un tipo
di dati elementare. Non è possibile includere sia Class che Structure nello stesso
constraintlist .
Comportamento
Sostituzione in fase di compilazione. Quando si crea un tipo costruito da un elemento di
programmazione generico, si fornisce un tipo definito per ogni parametro di tipo. Il compilatore Visual
Basic sostituisce il tipo fornito per ogni occorrenza di typename all'interno dell'elemento generico.
Assenza di vincoli. Se non si specifica alcun vincolo per un parametro di tipo, il codice è limitato alle
operazioni e ai membri supportati dal tipo di dati Object per quel parametro di tipo.
Esempio
Nell'esempio seguente viene illustrata una definizione di scheletro di una classe di dizionario generica, inclusa
una funzione Skeleton per aggiungere una nuova voce al dizionario.
Esempio
Poiché dictionary è generico, il codice che lo usa può creare un'ampia gamma di oggetti, ognuno dei quali ha
la stessa funzionalità ma agisce su un tipo di dati diverso. Nell'esempio seguente viene illustrata una riga di
codice che crea un dictionary oggetto con le String voci e le Integer chiavi.
Esempio
Nell'esempio seguente viene illustrata la definizione di scheletro equivalente generata dall'esempio precedente.
Public Class dictionary
Public Sub Add(ByVal et As String, ByVal kt As Integer)
Dim dk As Integer
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
Vedi anche
Di
Operatore New
Livelli di accesso in Visual Basic
Object Data Type
Istruzione Function
Istruzione Structure
Istruzione Sub
Procedura: Usare una classe generica
Covarianza e controvarianza
In
Out
Tag XML consigliati per i commenti relativi alla
documentazione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Il compilatore Visual Basic può elaborare i commenti della documentazione nel codice in un file XML. È possibile
utilizzare altri strumenti per elaborare il file XML nella documentazione di.
I commenti XML sono consentiti in costrutti di codice, ad esempio tipi e membri di tipo. Per i tipi parziali, solo
una parte del tipo può presentare commenti XML, anche se non esiste alcuna restrizione per il commento dei
relativi membri.
NOTE
Non è possibile applicare i commenti alla documentazione agli spazi dei nomi. Il motivo è che uno spazio dei nomi può
estendersi su più assembly e non tutti gli assembly devono essere caricati contemporaneamente.
Il compilatore elabora qualsiasi tag che è un XML valido. I seguenti tag forniscono la funzionalità comunemente
utilizzata nella documentazione dell'utente.
<typeparam>1 <value>
NOTE
Se si desidera che le parentesi angolari vengano visualizzate nel testo di un commento della documentazione, utilizzare
< e > . Ad esempio, la stringa "<text in angle brackets>" viene visualizzata come
<text in angle brackets> .
Vedi anche
Documentazione del codice tramite XML
-doc
Procedura: Creare documentazione XML
<c> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<c>text</c>
Parametri
PA RA M ET RO DESC RIZ IO N E
Commenti
Il <c> tag fornisce un modo per indicare che il testo all'interno di una descrizione deve essere contrassegnato
come codice. Usare <code> per indicare più righe come codice.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <c> tag nella sezione Summary per indicare che Counter si tratta di codice.
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Vedi anche
Tag di commento XML
<code> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<code>content</code>
Parametri
content
Testo da contrassegnare come codice.
Commenti
Usare il <code> tag per indicare più righe come codice. Usare <c> per indicare che il testo all'interno di una
descrizione deve essere contrassegnato come codice.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <code> tag per includere il codice di esempio per l'uso del ID campo.
Vedi anche
Tag di commento XML
<example> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<example>description</example>
Parametri
description
Descrizione dell'esempio di codice.
Commenti
Il <example> tag consente di specificare un esempio di come usare un metodo o un altro membro della libreria.
Questa operazione comporta in genere l'uso del <code> tag.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <example> tag per includere un esempio per l'uso del ID campo.
Vedi anche
Tag di commento XML
<exception> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<exception cref="member">description</exception>
Parametri
member
Riferimento ad un'eccezione disponibile dall'ambiente di compilazione corrente. Il compilatore controlla che
l'eccezione specificata esista e converte member nel nome canonico dell'elemento nel file XML di output. member
deve essere racchiuso tra virgolette doppie (" ").
description
Una descrizione.
Commenti
Usare il <exception> tag per specificare le eccezioni che possono essere generate. Questo tag viene applicato a
una definizione di metodo.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <exception> tag per descrivere un'eccezione che la IntDivide funzione può generare.
Vedi anche
Tag di commento XML
<include> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Fa riferimento a un altro file che descrive i tipi e i membri nel codice sorgente.
Sintassi
<include file="filename" path="tagpath[@name='id']" />
Parametri
filename
Obbligatorio. Nome del file che contiene la documentazione. È possibile qualificare il nome del file con un
percorso. Racchiude filename tra virgolette doppie ("").
tagpath
Obbligatorio. Percorso dei tag di filename che porta al name del tag. Racchiudere il percorso tra virgolette
doppie ("").
name
Obbligatorio. Identificatore del nome nel tag che precede i commenti. Name avrà un id .
id
Obbligatorio. ID del tag che precede i commenti. Racchiudere l'ID racchiuso tra virgolette singole ('').
Commenti
Usare il <include> tag per fare riferimento ai commenti in un altro file che descrive i tipi e i membri nel codice
sorgente. eliminando la necessità di inserire i commenti relativi alla documentazione direttamente nel file del
codice sorgente.
Il <include> tag usa la raccomandazione W3C XML Path Language (XPath) versione 1,0. Per ulteriori
informazioni sulle modalità di personalizzazione dell' <include> utilizzo, vedere https://www.w3.org/TR/xpath .
Esempio
Questo esempio usa il <include> tag per importare i commenti relativi alla documentazione membri da un file
denominato commentFile.xml .
Vedi anche
Tag di commento XML
<list> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<list type="type">
<listheader>
<term>term</term>
<description>description</description>
</listheader>
<item>
<term>term</term>
<description>description</description>
</item>
</list>
Parametri
type
Tipo dell'elenco. Deve essere un "Bullet" per un elenco puntato, "Number" per un elenco numerato o "Table" per
una tabella a due colonne.
term
Utilizzato solo quando type è "Table". Termine da definire, definito nel tag Description.
description
Quando type è "Bullet" o "Number", description è un elemento nell'elenco quando type è "Table",
description è la definizione di term .
Commenti
Il <listheader> blocco definisce l'intestazione di un elenco di tabelle o definizioni. Quando si definisce una
tabella, è sufficiente specificare una voce per term nell'intestazione.
Ogni elemento nell'elenco viene specificato con un <item> blocco. Quando si crea un elenco di definizioni, è
necessario specificare sia che term description . Tuttavia, per una tabella, un elenco puntato o un elenco
numerato, è sufficiente fornire una voce per description .
Un elenco o una tabella può includere un numero di <item> blocchi sufficiente.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <list> tag per definire un elenco puntato nella sezione Osservazioni.
''' <remarks>Before calling the <c>Reset</c> method, be sure to:
''' <list type="bullet">
''' <item><description>Close all connections.</description></item>
''' <item><description>Save the object state.</description></item>
''' </list>
''' </remarks>
Public Sub Reset()
' Code goes here.
End Sub
Vedi anche
Tag di commento XML
<para> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<para>content</para>
Parametri
content
Testo del paragrafo.
Commenti
Il <para> tag è da usare all'interno di un tag, ad esempio <summary> , <remarks> o <returns> , e consente di
aggiungere la struttura al testo.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <para> tag per suddividere la sezione Osservazioni per il UpdateRecord metodo in due
paragrafi.
Vedi anche
Tag di commento XML
<param> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<param name="name">description</param>
Parametri
name
Nome di un parametro di metodo. Racchiudere il nome tra virgolette doppie (" ").
description
Descrizione del parametro.
Commenti
Il <param> tag deve essere usato nel commento per una dichiarazione di metodo per descrivere uno dei
parametri per il metodo.
Il testo del <param> tag verrà visualizzato nei percorsi seguenti:
Informazioni sul parametro di IntelliSense. Per altre informazioni, vedere Using IntelliSense (Uso di
IntelliSense).
Visualizzatore oggetti. Per ulteriori informazioni, vedere visualizzazione della struttura del codice.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <param> tag per descrivere il id parametro.
Vedi anche
Tag di commento XML
<paramref> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<paramref name="name"/>
Parametri
name
Nome del parametro a cui fare riferimento. Racchiudere il nome tra virgolette doppie (" ").
Commenti
Il <paramref> tag consente di indicare che una parola è un parametro. Il file XML può essere elaborato per
formattare questo parametro in modo distinto.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <paramref> tag per fare riferimento al id parametro.
Vedi anche
Tag di commento XML
<permission> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<permission cref="member">description</permission>
Parametri
member
Riferimento a un membro o a un campo disponibile per essere chiamato dall'ambiente di compilazione
corrente. Il compilatore verifica l'esistenza dell'elemento di codice specificato e converte member nel nome
canonico dell'elemento nel file XML di output. Racchiude member tra virgolette ("").
description
Descrizione dell'accesso al membro.
Commenti
Usare il <permission> tag per documentare l'accesso di un membro. Utilizzare la PermissionSet classe per
specificare l'accesso a un membro.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <permission> tag per descrivere che FileIOPermission è richiesto dal ReadFile metodo.
Vedi anche
Tag di commento XML
<remarks> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<remarks>description</remarks>
Parametri
description
Descrizione del membro.
Commenti
Usare il <remarks> tag per aggiungere informazioni su un tipo, integrando le informazioni specificate con
<summary> .
Queste informazioni vengono visualizzate nel Visualizzatore oggetti. Per informazioni sulla Visualizzatore
oggetti, vedere visualizzazione della struttura del codice.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <remarks> tag per spiegare cosa UpdateRecord fa il metodo.
Vedi anche
Tag di commento XML
<returns> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<returns>description</returns>
Parametri
description
Descrizione del valore restituito.
Commenti
Usare il <returns> tag nel commento per una dichiarazione di metodo per descrivere il valore restituito.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <returns> tag per spiegare il risultato DoesRecordExist restituito dalla funzione.
Vedi anche
Tag di commento XML
<see> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<see cref="member"/>
Parametri
member
Riferimento a un membro o a un campo disponibile per essere chiamato dall'ambiente di compilazione
corrente. Il compilatore verifica l'esistenza dell'elemento di codice specificato e passa member al nome
dell'elemento nel file XML di output. member deve essere racchiuso tra virgolette doppie (" ").
Commenti
Usare il <see> tag per specificare un collegamento dall'interno del testo. Usare <seealso> per indicare il testo
che potrebbe essere necessario visualizzare in una sezione "vedere anche".
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <see> tag nella UpdateRecord sezione Note per fare riferimento al DoesRecordExist
metodo.
Vedi anche
Tag di commento XML
<seealso> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<seealso cref="member"/>
Parametri
member
Riferimento a un membro o a un campo disponibile per essere chiamato dall'ambiente di compilazione
corrente. Il compilatore verifica l'esistenza dell'elemento di codice specificato e passa member al nome
dell'elemento nel file XML di output. member deve essere racchiuso tra virgolette doppie (" ").
Commenti
Usare il <seealso> tag per specificare il testo che si vuole visualizzare in una sezione vedere anche. Usare <see>
per specificare un collegamento dall'interno del testo.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <seealso> tag nella DoesRecordExist sezione Note per fare riferimento al UpdateRecord
metodo.
Vedi anche
Tag di commento XML
<summary> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<summary>description</summary>
Parametri
description
Un riepilogo dell'oggetto.
Commenti
Usare il <summary> tag per descrivere un tipo o un membro del tipo. Utilizzare <remarks> per aggiungere
informazioni aggiuntive a una descrizione del tipo.
Il testo per il <summary> tag è l'unica fonte di informazioni sul tipo in IntelliSense e viene visualizzato anche
nell'Visualizzatore oggetti. Per informazioni sulla Visualizzatore oggetti, vedere visualizzazione della struttura del
codice.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <summary> tag per descrivere il ResetCounter metodo e la Counter Proprietà.
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Vedi anche
Tag di commento XML
<typeparam> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<typeparam name="name">description</typeparam>
Parametri
name
Nome del parametro di tipo. Racchiudere il nome tra virgolette doppie (" ").
description
Descrizione del parametro di tipo.
Commenti
Usare il <typeparam> tag nel commento per una dichiarazione di un tipo generico o di un membro generico per
descrivere uno dei parametri di tipo.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <typeparam> tag per descrivere il id parametro.
Vedi anche
Tag di commento XML
<value> (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<value>property-description</value>
Parametri
property-description
Descrizione della proprietà.
Commenti
Usare il <value> tag per descrivere una proprietà. Si noti che quando si aggiunge una proprietà usando la
creazione guidata codice nell'ambiente di sviluppo di Visual Studio, verrà aggiunto un <summary> tag per la
nuova proprietà. È quindi necessario aggiungere manualmente un <value> tag per descrivere il valore
rappresentato dalla proprietà.
Compilare con -doc per elaborare i commenti relativi alla documentazione in un file.
Esempio
Questo esempio usa il <value> tag per descrivere il valore che la Counter proprietà possiede.
''' <summary>
''' Resets the value the <c>Counter</c> field.
''' </summary>
Public Sub ResetCounter()
counterValue = 0
End Sub
Private counterValue As Integer = 0
''' <summary>
''' Returns the number of times Counter was called.
''' </summary>
''' <value>Number of times Counter was called.</value>
Public ReadOnly Property Counter() As Integer
Get
counterValue += 1
Return counterValue
End Get
End Property
Vedi anche
Tag di commento XML
Proprietà Axis XML (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Negli argomenti di questa sezione viene illustrata la sintassi delle proprietà Axis XML in Visual Basic. Le
proprietà dell'asse XML consentono di accedere facilmente a XML direttamente nel codice.
XML Attribute Axis Property Viene descritto come accedere agli attributi di un XElement
oggetto.
XML Child Axis Property Viene descritto come accedere agli elementi figlio di un
XElement oggetto.
XML Descendant Axis Property Viene descritto come accedere ai discendenti di un XElement
oggetto.
Proprietà dell'indicizzatore di estensione Viene descritto come accedere a singoli elementi in una
raccolta XElement di XAttribute oggetti o.
Proprietà Value XML Viene descritto come accedere al valore del primo elemento
di una raccolta di XElement oggetti o XAttribute .
Vedi anche
XML
Proprietà axis dell'attributo XML (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Fornisce l'accesso al valore di un attributo per un XElement oggetto o al primo elemento in una raccolta di
XElement oggetti.
Sintassi
object.@attribute
' -or-
object.@<attribute>
Parti
object
Obbligatorio. Un XElement oggetto o una raccolta di XElement oggetti.
.@
Obbligatorio. Indica l'inizio di una proprietà axis dell'attributo.
<
facoltativo. Indica l'inizio del nome dell'attributo quando attribute non è un identificatore valido in Visual
Basic.
attribute
Obbligatorio. Nome dell'attributo a cui accedere, nel formato [ prefix :] name .
PA RT E DESC RIZ IO N E
>
facoltativo. Indica la fine del nome dell'attributo quando attribute non è un identificatore valido in Visual Basic.
Valore restituito
Stringa che contiene il valore di attribute . Se il nome dell'attributo non esiste, Nothing viene restituito.
Commenti
È possibile utilizzare una proprietà axis dell'attributo XML per accedere al valore di un attributo in base al nome
da un XElement oggetto o dal primo elemento di una raccolta di XElement oggetti. È possibile recuperare un
valore di attributo in base al nome o aggiungere un nuovo attributo a un elemento specificando un nuovo nome
preceduto da @ Identifier.
Quando si fa riferimento a un attributo XML usando l'identificatore @, il valore dell'attributo viene restituito
come stringa e non è necessario specificare in modo esplicito la Value Proprietà.
Le regole di denominazione per gli attributi XML sono diverse dalle regole di denominazione per gli
identificatori di Visual Basic. Per accedere a un attributo XML con un nome diverso da un identificatore di Visual
Basic valido, racchiudere il nome tra parentesi acute ( < and > ).
Esempio
Nell'esempio seguente viene illustrato come ottenere i valori degli attributi XML denominati type da una
raccolta di elementi XML denominati phone .
Console.WriteLine(phoneTypes)
<type>home</type>
<type>work</type>
</phoneTypes>
Esempio
Nell'esempio seguente viene illustrato come creare attributi per un elemento XML in modo dichiarativo, come
parte del codice XML, e in modo dinamico aggiungendo un attributo a un'istanza di un XElement oggetto. L'
type attributo viene creato in modo dichiarativo e l' owner attributo viene creato dinamicamente.
Console.WriteLine(phone2)
Esempio
Nell'esempio seguente viene utilizzata la sintassi della parentesi angolare per ottenere il valore dell'attributo
XML denominato number-type , che non è un identificatore valido in Visual Basic.
Esempio
Nell'esempio seguente viene dichiarato ns come un prefisso dello spazio dei nomi XML. USA quindi il prefisso
dello spazio dei nomi per creare un valore letterale XML e accedere al primo nodo figlio con il nome completo "
ns:name ".
Class TestClass3
End Class
Vedi anche
XElement
Proprietà Axis XML
Valori letterali XML
Creazione di XML in Visual Basic
Nomi di elementi e attributi XML dichiarati
Proprietà Child Axis XML (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Fornisce l'accesso agli elementi figlio di uno dei seguenti oggetti: XElement, XDocument, raccolta di XElement o
raccolta di XDocument.
Sintassi
object.<child>
Parti
T ERM IN E DEF IN IZ IO N E
Valore restituito
Raccolta di oggetti XElement.
Commenti
È possibile usare una proprietà axis dell'elemento figlio XML per accedere a nodi figlio in base al nome, da un
oggetto XElement o XDocument o da raccolte di oggetti XElement o XDocument. Usare la proprietà Value XML
per accedere al valore del primo nodo figlio nella raccolta restituita. Per ulteriori informazioni, vedere proprietà
del valore XML.
Il compilatore Visual Basic converte le proprietà dell'asse figlio in chiamate al Elements metodo.
Esempio
L'esempio seguente illustra come accedere ai nodi figlio denominati phone dall'oggetto contact .
Esempio
L'esempio seguente illustra come accedere ai nodi figlio denominati phone dalla raccolta restituita dalla
proprietà axis dell'elemento figlio contact dell'oggetto contacts .
Esempio
Nell'esempio seguente viene dichiarato ns come un prefisso dello spazio dei nomi XML. Il prefisso dello spazio
dei nomi viene quindi usato per creare un valore letterale XML e accedere al primo nodo figlio con il nome
completo ns:name .
Imports <xmlns:ns = "http://SomeNamespace">
Class TestClass4
End Class
Vedi anche
XElement
Proprietà Axis XML
Valori letterali XML
Creazione di XML in Visual Basic
Nomi di elementi e attributi XML dichiarati
Proprietà axis descendant XML (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Fornisce l'accesso ai discendenti dei seguenti elementi: un XElement oggetto, un XDocument oggetto, una
raccolta di XElement oggetti o una raccolta di XDocument oggetti.
Sintassi
object...<descendant>
Parti
object Obbligatorio. Un oggetto XElement, un oggetto XDocument, una raccolta di oggetti XElement o una
raccolta di oggetti XDocument.
...< Obbligatorio. Indica l'inizio di una proprietà asse discendente.
descendant Obbligatorio. Nome dei nodi discendenti a cui accedere, nel formato [ prefix:]name .
PA RT E DESC RIZ IO N E
prefix Facoltativa. Prefisso dello spazio dei nomi XML per il nodo
discendente. Deve essere uno spazio dei nomi XML globale
definito usando un' Imports istruzione.
Valore restituito
Raccolta di oggetti XElement.
Commenti
È possibile utilizzare una proprietà axis discendente XML per accedere ai nodi discendenti in base al nome di un
XElement oggetto o oppure XDocument da una raccolta di XElement XDocument oggetti o. Utilizzare la Value
proprietà XML per accedere al valore del primo nodo discendente nella raccolta restituita. Per ulteriori
informazioni, vedere proprietà del valore XML.
Il compilatore Visual Basic converte le proprietà dell'asse discendente in chiamate al Descendants metodo.
Esempio
Nell'esempio seguente viene dichiarato ns come un prefisso dello spazio dei nomi XML. USA quindi il prefisso
dello spazio dei nomi per creare un valore letterale XML e accedere al valore del primo nodo figlio con il nome
completo ns:name .
Class TestClass2
End Class
Vedi anche
XElement
Proprietà Axis XML
Valori letterali XML
Creazione di XML in Visual Basic
Nomi di elementi e attributi XML dichiarati
Proprietà dell'indicizzatore di estensione (Visual
Basic)
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
object(index)
Parti
T ERM IN E DEF IN IZ IO N E
Valore restituito
Oggetto dalla posizione specificata nella raccolta o Nothing se l'indice non è compreso nell'intervallo.
Commenti
È possibile usare la proprietà dell'indicizzatore di estensione per accedere ai singoli elementi di una raccolta.
Questa proprietà dell'indicizzatore viene in genere utilizzata nell'output delle proprietà Axis XML. Le proprietà
dell'asse XML figlio e XML discendente restituiscono raccolte di XElement oggetti o un valore di attributo.
Il compilatore Visual Basic converte le proprietà dell'indicizzatore di estensione in chiamate al
ElementAtOrDefault metodo. Diversamente da un indicizzatore di matrici, il ElementAtOrDefault metodo
restituisce Nothing se l'indice non è compreso nell'intervallo. Questo comportamento è utile quando non è
possibile determinare facilmente il numero di elementi in una raccolta.
Questa proprietà dell'indicizzatore è simile a una proprietà di estensione per le raccolte che implementano
IEnumerable<T> o IQueryable<T> : viene utilizzata solo se la raccolta non dispone di un indicizzatore o di una
proprietà predefinita.
Per accedere al valore del primo elemento in una raccolta di XElement oggetti o XAttribute , è possibile usare la
proprietà XML Value . Per ulteriori informazioni, vedere proprietà del valore XML.
Esempio
Nell'esempio seguente viene illustrato come utilizzare l'indicizzatore di estensione per accedere al secondo
nodo figlio in una raccolta di XElement oggetti. È possibile accedere alla raccolta utilizzando la proprietà Axis
figlio, che ottiene tutti gli elementi figlio denominati phone nell' contact oggetto.
Vedi anche
XElement
Proprietà Axis XML
Valori letterali XML
Creazione di XML in Visual Basic
Proprietà Value XML
Proprietà Value XML (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Consente di accedere al valore del primo elemento di una raccolta di XElement oggetti.
Sintassi
object.Value
Parti
T ERM IN E DEF IN IZ IO N E
Valore restituito
Oggetto String che contiene il valore del primo elemento della raccolta o Nothing se l'insieme è vuoto.
Commenti
La Value proprietà consente di accedere facilmente al valore del primo elemento in una raccolta di XElement
oggetti. Questa proprietà verifica innanzitutto se la raccolta contiene almeno un oggetto. Se la raccolta è vuota,
questa proprietà restituisce Nothing . In caso contrario, questa proprietà restituisce il valore della Value
proprietà del primo elemento nella raccolta.
NOTE
Quando si accede al valore di un attributo XML usando l' @ identificatore '', il valore dell'attributo viene restituito come
String e non è necessario specificare in modo esplicito la Value Proprietà.
Per accedere ad altri elementi di una raccolta, è possibile usare la proprietà dell'indicizzatore di estensione XML.
Per altre informazioni, vedere Proprietà Indexer di estensione.
Ereditarietà
La maggior parte degli utenti non dovrà implementare IEnumerable<T> e pertanto può ignorare questa
sezione.
La Value proprietà è una proprietà di estensione per i tipi che implementano IEnumerable(Of XElement) . Il
binding di questa proprietà di estensione è analogo all'associazione dei metodi di estensione: se un tipo
implementa una delle interfacce e definisce una proprietà con il nome "value", la proprietà ha la precedenza
sulla proprietà di estensione. In altre parole, Value è possibile eseguire l'override di questa proprietà definendo
una nuova proprietà in una classe che implementa IEnumerable(Of XElement) .
Esempio
Nell'esempio seguente viene illustrato come utilizzare la Value proprietà per accedere al primo nodo di una
raccolta di XElement oggetti. Nell'esempio viene utilizzata la proprietà Axis Child per ottenere la raccolta di tutti i
nodi figlio denominati phone presenti nell' contact oggetto.
Esempio
Nell'esempio seguente viene illustrato come ottenere il valore di un attributo XML da una raccolta di XAttribute
oggetti. Nell'esempio viene utilizzata la proprietà axis dell'attributo per visualizzare il valore dell' type attributo
per tutti gli phone elementi.
home
work
Vedi anche
XElement
IEnumerable<T>
Proprietà Axis XML
Valori letterali XML
Creazione di XML in Visual Basic
Metodi di estensione
Proprietà dell'indicizzatore di estensione
XML Child Axis Property
XML Attribute Axis Property
Valori letterali XML (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Negli argomenti di questa sezione viene illustrata la sintassi dei valori letterali XML in Visual Basic. La sintassi
dei valori letterali XML consente di incorporare XML direttamente nel codice.
Valore letterale di elemento XML Descrive la sintassi per i valori letterali che rappresentano
oggetti XElement.
Valore letterale di documento XML Descrive la sintassi per i valori letterali che rappresentano
oggetti XDocument.
Valore letterale CDATA XML Descrive la sintassi per i valori letterali che rappresentano
oggetti XCData.
Valore letterale di commento XML Descrive la sintassi per i valori letterali che rappresentano
oggetti XComment.
Valore letterale di istruzione di elaborazione XML Descrive la sintassi per i valori letterali che rappresentano
oggetti XProcessingInstruction.
Vedi anche
XML
Valore letterale elemento XML (Visual Basic)
05/03/2021 • 9 minutes to read • Edit Online
Sintassi
<name [ attributeList ] />
-or-
<name [ attributeList ] > [ elementContents ] </[ name ]>
Parti
<
PA RT E DESC RIZ IO N E
Espressione incorporata del form <%= nameExp %> . Il tipo di nameExp deve essere String o un
tipo convertibile in modo implicito in XName . Espressione incorporata non consentita in un tag di
chiusura di un elemento.
attributeList
PA RT E DESC RIZ IO N E
facoltativo. Rappresenta il tag di chiusura per l'elemento. Il name parametro facoltativo non è consentito
quando è il risultato di un'espressione incorporata.
Valore restituito
Oggetto XElement.
Commenti
È possibile utilizzare la sintassi dei valori letterali dell'elemento XML per creare XElement oggetti nel codice.
NOTE
Un valore letterale XML può estendersi su più righe senza usare caratteri di continuazione di riga. Questa funzionalità
consente di copiare il contenuto da un documento XML e incollarlo direttamente in un programma Visual Basic.
Le espressioni incorporate del form <%= exp %> consentono di aggiungere informazioni dinamiche a un valore
letterale elemento XML. Per ulteriori informazioni, vedere espressioni incorporate in XML.
Il compilatore Visual Basic converte il valore letterale dell'elemento XML in chiamate al XElement costruttore e,
se necessario, il XAttribute costruttore.
Esempio
Nell'esempio seguente viene illustrato come creare un elemento XML semplice con due elementi vuoti annidati.
Console.WriteLine(test1)
Nell'esempio viene visualizzato il testo seguente. Si noti che il valore letterale conserva la struttura degli
elementi vuoti.
<outer>
<inner1></inner1>
<inner2 />
</outer>
Esempio
Nell'esempio seguente viene illustrato come utilizzare le espressioni incorporate per assegnare un nome a un
elemento e creare attributi.
Console.WriteLine(book)
Esempio
Nell'esempio seguente viene dichiarato ns come un prefisso dello spazio dei nomi XML. USA quindi il prefisso
dello spazio dei nomi per creare un valore letterale XML e visualizza il formato finale dell'elemento.
Class TestClass1
Dim test =
<ns:outer>
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1/>
<%= inner2 %>
</ns:middle>
</ns:outer>
End Class
Questo codice visualizza il testo seguente:
<ns:outer xmlns:ns="http://SomeNamespace">
<ns:middle xmlns:ns="http://NewNamespace">
<ns:inner1 />
<inner2 xmlns="http://SomeNamespace" />
</ns:middle>
</ns:outer>
Si noti che il compilatore ha convertito il prefisso dello spazio dei nomi XML globale in una definizione di
prefisso per lo spazio dei nomi XML. L' <ns:middle> elemento ridefinisce il prefisso dello spazio dei nomi XML
per l' <ns:inner1> elemento. Tuttavia, l' <ns:inner2> elemento utilizza lo spazio dei nomi definito dall' Imports
istruzione.
Vedi anche
XElement
Nomi di elementi e attributi XML dichiarati
Valore letterale di commento XML
Valore letterale CDATA XML
Valori letterali XML
Creazione di XML in Visual Basic
Espressioni incorporate in XML
Istruzione Imports (spazio dei nomi XML)
Valore letterale di documento XML (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<?xml version="1.0" [encoding="encoding"] [standalone="standalone"] ?>
[ piCommentList ]
rootElement
[ piCommentList ]
Parti
T ERM IN E DEF IN IZ IO N E
Oggetto XElement.
Raccolta che contiene un XElement oggetto e
un numero qualsiasi di XProcessingInstruction
XComment oggetti e.
Valore restituito
Oggetto XDocument.
Commenti
Un valore letterale di documento XML viene identificato dalla dichiarazione XML all'inizio del valore letterale.
Sebbene ogni valore letterale del documento XML debba contenere esattamente un elemento XML radice, può
includere un numero qualsiasi di istruzioni di elaborazione XML e commenti XML.
Un valore letterale di documento XML non può essere incluso in un elemento XML.
NOTE
Un valore letterale XML può estendersi su più righe senza usare caratteri di continuazione di riga. In questo modo è
possibile copiare il contenuto da un documento XML e incollarlo direttamente in un programma Visual Basic.
Il compilatore Visual Basic converte il valore letterale del documento XML in chiamate ai XDocument
XDeclaration costruttori e.
Esempio
Nell'esempio seguente viene creato un documento XML con una dichiarazione XML, un'istruzione di
elaborazione, un commento e un elemento che contiene un altro elemento.
Vedi anche
XElement
XProcessingInstruction
XComment
XDocument
Valore letterale di istruzione di elaborazione XML
Valore letterale di commento XML
Valore letterale di elemento XML
Valori letterali XML
Creazione di XML in Visual Basic
Espressioni incorporate in XML
Valore letterale CDATA XML (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<![CDATA[content]]>
Parti
<![CDATA[
Obbligatorio. Indica l'inizio della sezione CDATA XML.
content
Obbligatorio. Contenuto di testo da visualizzare nella sezione CDATA XML.
]]>
Obbligatorio. Indica la fine della sezione.
Valore restituito
Oggetto XCData.
Commenti
Le sezioni CDATA XML contengono testo non elaborato che deve essere incluso, ma non analizzato, con il codice
XML che lo contiene. Una sezione CDATA XML può contenere testo. Sono inclusi i caratteri XML riservati. La
sezione CDATA XML termina con la sequenza "]] >". Questo implica i seguenti punti:
Non è possibile usare un'espressione incorporata in un valore letterale CDATA XML perché i delimitatori
di espressioni incorporati sono contenuti CDATA XML validi.
Le sezioni CDATA XML non possono essere annidate, perché content non possono contenere il valore "]]
>".
È possibile assegnare un valore letterale CDATA XML a una variabile o includerlo in un valore letterale elemento
XML.
NOTE
Un valore letterale XML può estendersi su più righe, ma non utilizza caratteri di continuazione di riga. In questo modo è
possibile copiare il contenuto da un documento XML e incollarlo direttamente in un programma Visual Basic.
Il compilatore Visual Basic converte il valore letterale CDATA XML in una chiamata al XCData costruttore.
Esempio
Nell'esempio seguente viene creata una sezione CDATA che contiene il testo "può contenere <XML> tag
letterali".
Dim cdata As XCData = <![CDATA[Can contain literal <XML> tags]]>
Vedi anche
XCData
Valore letterale di elemento XML
Valori letterali XML
Creazione di XML in Visual Basic
Valore letterale di commento XML (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<!-- content -->
Parti
T ERM IN E DEF IN IZ IO N E
Valore restituito
Oggetto XComment.
Commenti
I valori letterali del commento XML non contengono contenuto del documento; contengono informazioni sul
documento. La sezione del commento XML termina con la sequenza "-->". Questo implica i seguenti punti:
Non è possibile usare un'espressione incorporata in un valore letterale di commento XML perché i
delimitatori di espressioni incorporati sono contenuti di commenti XML validi.
Le sezioni di commento XML non possono essere annidate, perché content non possono contenere il
valore "-->".
È possibile assegnare un valore letterale di commento XML a una variabile oppure è possibile includerlo in un
valore letterale elemento XML.
NOTE
Un valore letterale XML può estendersi su più righe senza usare caratteri di continuazione di riga. Questa funzionalità
consente di copiare il contenuto da un documento XML e incollarlo direttamente in un programma Visual Basic.
Il compilatore Visual Basic converte il valore letterale del commento XML in una chiamata al XComment
costruttore.
Esempio
Nell'esempio seguente viene creato un commento XML che contiene il testo "questo è un commento".
Vedi anche
XComment
Valore letterale di elemento XML
Valori letterali XML
Creazione di XML in Visual Basic
Valore letterale istruzione di elaborazione XML
(Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
<?piName [ = piData ] ?>
Parti
<?
Obbligatorio. Indica l'inizio del valore letterale di istruzione di elaborazione XML.
piName
Obbligatorio. Nome che indica l'applicazione di destinazione dell'istruzione di elaborazione. Impossibile iniziare
con "XML" o "XML".
piData
facoltativo. Stringa che indica il modo in cui l'applicazione di destinazione piName deve elaborare il documento
XML.
?>
Obbligatorio. Indica la fine dell'istruzione di elaborazione.
Valore restituito
Oggetto XProcessingInstruction.
Commenti
I valori letterali di istruzione di elaborazione XML indicano in che modo le applicazioni devono elaborare un
documento XML. Quando un'applicazione carica un documento XML, l'applicazione è in grado di controllare le
istruzioni di elaborazione XML per determinare la modalità di elaborazione del documento. L'applicazione
interpreta il significato di piName e piData .
Il valore letterale del documento XML utilizza una sintassi simile a quella dell'istruzione di elaborazione XML. Per
altre informazioni, vedere valore letterale documento XML.
NOTE
L' piName elemento non può iniziare con le stringhe "XML" o "XML", perché la specifica xml 1,0 riserva tali identificatori.
È possibile assegnare un valore letterale di istruzione di elaborazione XML a una variabile o includerlo in un
valore letterale di documento XML.
NOTE
Un valore letterale XML può estendersi su più righe senza dover utilizzare caratteri di continuazione di riga. In questo
modo è possibile copiare il contenuto da un documento XML e incollarlo direttamente in un programma Visual Basic.
Il compilatore Visual Basic converte il valore letterale di istruzione di elaborazione XML in una chiamata al
XProcessingInstruction costruttore.
Esempio
Nell'esempio seguente viene creata un'istruzione di elaborazione che identifica un foglio di stile per un
documento XML.
Dim pi As XProcessingInstruction =
<?xml-stylesheet type="text/xsl" href="show_book.xsl"?>
Vedi anche
XProcessingInstruction
Valore letterale di documento XML
Valori letterali XML
Creazione di XML in Visual Basic
Messaggi di errore in Visual Basic
05/03/2021 • 3 minutes to read • Edit Online
Quando si compila o si esegue un'applicazione Visual Basic, possono verificarsi i seguenti tipi di errori:
Errori in fase di compilazione, che si verificano durante la compilazione di un'applicazione.
Errori di run-time, che si verificano quando un'applicazione è in esecuzione.
Per altre informazioni sulla risoluzione di problemi specifici, vedere Risorse aggiuntive per i programmatori
Visual Basic.
Errori di run-time
Se un'applicazione Visual Basic tenta di eseguire un'azione che il sistema non è in grado di eseguire, si verifica
un errore di run-time e Visual Basic genera un Exception oggetto. Visual Basic possibile generare errori
personalizzati di qualsiasi tipo di dati, inclusi Exception gli oggetti, utilizzando l' Throw istruzione.
Un'applicazione può identificare l'errore visualizzando il numero e il messaggio di errore di un'eccezione
rilevata. Se non viene rilevato alcun errore, l'applicazione termina.
Il codice può intercettare e analizzare errori di runtime. Se si include il codice che genera l'errore in un blocco
Try , è possibile rilevare qualsiasi errore generato all'interno di un blocco Catch corrispondente. Per
informazioni su come intercettare gli errori di runtime e gestirli nel codice, vedere Istruzione Try...Catch...Finally.
L'attributo può essere applicato una sola volta. L' AttributeUsage attributo determina se un attributo può essere
applicato più di una volta.
ID errore: BC30663
<AttributeUsage(AllowMultiple := True)>
Vedi anche
AttributeUsageAttribute
Creazione di attributi personalizzati
AttributeUsage
<attribute>Non è possibile applicare BC32500:''
perché il formato del GUID ' <number> ' non è
corretto
05/03/2021 • 2 minutes to read • Edit Online
Un COMClassAttribute blocco di attributi specifica un identificatore univoco globale (Guid) che non è conforme
al formato appropriato per un GUID. COMClassAttribute USA i GUID per identificare in modo univoco la classe,
l'interfaccia e l'evento di creazione.
Un GUID è composto da 16 byte (otto byte numerici seguiti da otto byte binari). Viene generato da utilità
Microsoft, ad esempio uuidgen.exe, ed è garantito che sia univoco nello spazio e nel tempo.
ID errore: BC32500
Vedi anche
Guid
Panoramica degli attributi
BC30014:' #ElseIf ' deve essere preceduto da un
elemento ' #If ' o ' #ElseIf ' corrispondente
05/03/2021 • 2 minutes to read • Edit Online
#ElseIf è una direttiva di compilazione condizionale. Una #ElseIf clausola deve essere preceduta da una #If
clausola OR corrispondente #ElseIf .
ID errore: BC30014
Vedi anche
#If... Direttive then... #Else
BC32025: le istruzioni ' #Region ' è #End Region '
non sono valide nei corpi di metodi/espressioni
lambda su più righe
05/03/2021 • 2 minutes to read • Edit Online
Il #Region blocco deve essere dichiarato a livello di classe, modulo o spazio dei nomi. Un'area comprimibile può
includere una o più procedure, ma non può iniziare o terminare all'interno di una routine.
ID errore: BC32025
Vedi anche
#Region (direttiva)
BC40029:' <classname> ' non è conforme a CLS
perché l'interfaccia ' <interfacename> '
implementata non è conforme a CLS
05/03/2021 • 2 minutes to read • Edit Online
Una classe o interfaccia è contrassegnata come <CLSCompliant(True)> quando deriva da o implementa un tipo
contrassegnato come <CLSCompliant(False)> o non è contrassegnata.
Affinché una classe o un'interfaccia sia conforme al linguaggio di indipendenza e Language-Independent
componenti (CLS), l'intera gerarchia di ereditarietà deve essere conforme. Ciò significa che ogni tipo da cui
eredita, direttamente o indirettamente, deve essere conforme. Analogamente, se una classe implementa una o
più interfacce, esse devono essere tutte conformi nelle relative gerarchie di ereditarietà.
Quando CLSCompliantAttribute viene applicato a un elemento di programmazione, il parametro isCompliant
dell'attributo viene impostato su True o False per indicare la conformità o la non conformità. L'impostazione
predefinita per questo parametro non è disponibile, quindi è necessario specificare un valore.
Se a un elemento non viene applicato CLSCompliantAttribute , l'elemento non sarà considerato conforme.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40029
Un'istruzione prova ad accedere a un elemento di programmazione che è stato contrassegnato con l'attributo
ObsoleteAttribute e la direttiva di considerarlo come un avviso.
È possibile contrassegnare qualsiasi elemento di programmazione come non più in uso applicando
ObsoleteAttribute a tale elemento. In questo caso, è possibile impostare la proprietà IsError dell'attributo su
True o False . Se si imposta la proprietà su True , il compilatore considera il tentativo di usare l'elemento
come un errore. Se si imposta la proprietà su False , o si lascia l'impostazione predefinita False , il compilatore
genera un avviso se si prova a usare l'elemento.
Per impostazione predefinita, si tratta di un messaggio di avviso perché la proprietà IsError di ObsoleteAttribute
è False . Per altre informazioni su come nascondere gli avvisi o considerarli come errori, vedere Configuring
Warnings in Visual Basic.
ID errore: BC40008
Vedi anche
Panoramica degli attributi
BC32022:' <eventname> ' è un evento e non può
essere chiamato direttamente
05/03/2021 • 2 minutes to read • Edit Online
' < eventname >' è un evento e non può essere chiamato direttamente. Utilizzare un' RaiseEvent istruzione per
generare un evento.
Una chiamata di routine specifica un evento per il nome della stored procedure. Un gestore eventi è una routine,
ma l'evento stesso è un dispositivo di segnalazione, che deve essere generato e gestito.
ID errore: BC32022
Vedi anche
Istruzione RaiseEvent
BC32061: <expression> non è possibile usare ''
come vincolo di tipo
05/03/2021 • 2 minutes to read • Edit Online
Un elenco di vincoli comprende un'espressione che non rappresenta un vincolo valido per un parametro di tipo.
Un elenco di vincoli impone requisiti per l'argomento di tipo passato al parametro di tipo. Si possono specificare
i requisiti seguenti in qualsiasi combinazione:
L'argomento di tipo deve implementare una o più interfacce
L'argomento di tipo deve ereditare al massimo da una classe
L'argomento di tipo deve esporre un costruttore senza parametri a cui il codice di creazione possa
accedere (includere il vincolo New )
Se non si include alcuna classe o interfaccia specifica nell'elenco di vincoli, è possibile imporre un requisito più
generale specificando una delle condizioni seguenti:
L'argomento di tipo deve essere un tipo valore (includere il vincolo Structure )
L'argomento di tipo deve essere un tipo riferimento (includere il vincolo Class )
Non è possibile specificare sia Structure che Class per lo stesso parametro di tipo e non è possibile
specificare uno dei due vincoli più volte.
ID errore: BC32061
Vedi anche
Generic Types in Visual Basic
Tipi di valore e tipi di riferimento
References to Declared Elements
BC30766:' <functionname> ' non è dichiarato
(errore del compilatore Smart Device/Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
< functionname > non è dichiarata. La funzionalità di I/O dei file è in genere disponibile nello spazio dei nomi
Microsoft.VisualBasic , ma non è supportata dalla versione di destinazione di .NET Compact Framework.
ID errore: BC30766
Vedi anche
System.IO
Accesso ai file con Visual Basic
BC42015:' <interfacename> . <membername> ' è
già implementato dalla classe base '
<baseclassname> '. Prevista nuova
implementazione di <type>
05/03/2021 • 2 minutes to read • Edit Online
Una proprietà, una routine o un evento in una classe derivata usa una Implements clausola che specifica un
membro di interfaccia già implementato nella classe di base.
Una classe derivata può reimplementare un membro di interfaccia implementato dalla sua classe base. Questo
non equivale a eseguire l'override dell'implementazione della classe base. Per altre informazioni, vedere
Implements.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42015
Vedi anche
Interfacce
BC30043:' <keyword> ' è valido solo all'interno di
un metodo di istanza
05/03/2021 • 2 minutes to read • Edit Online
Le Me MyClass MyBase parole chiave, e si riferiscono a specifiche istanze di classe. Non è possibile usarli
all'interno di una Function routine o condivisa Sub .
ID errore:* BC30043
Vedi anche
Assegnazione di variabili oggetto
Me, My, MyBase e MyClass
Nozioni fondamentali sull'ereditarietà
BC30909:' <membername> ' non può esporre il
tipo ' <typename> ' all'esterno del progetto
mediante <containertype> ' <containertypename>
'
05/03/2021 • 2 minutes to read • Edit Online
Una variabile, un parametro di routine o un valore restituito dalla funzione viene esposto all'esterno del relativo
contenitore, ma viene dichiarato come un tipo che non deve essere esposto all'esterno del contenitore.
Il codice di scheletro seguente mostra una situazione che genera questo errore.
Un tipo dichiarato,, Protected Friend Protected Friend o Private è progettato per avere accesso limitato al
di fuori del contesto di dichiarazione. Il suo utilizzo come tipo di dati di una variabile con accesso meno limitato
comporterebbe la sconfitta di questo scopo. Nel codice di scheletro precedente, exposedVar è Public ed
esporrebbe privateClass a codice che non dovrebbe avere accesso a tale codice.
ID errore: BC30909
Vedi anche
Livelli di accesso in Visual Basic
BC30685:' <membername> ' è ambiguo tra le
interfacce ereditate ' <interfacename1> ' è
<interfacename2> '
05/03/2021 • 2 minutes to read • Edit Online
L'interfaccia eredita due o più membri con lo stesso nome da più interfacce.
ID errore: BC30685
Interface Left
Sub MySub()
End Interface
Interface Right
Sub MySub()
End Interface
Interface LeftRight
Inherits Left, Right
End Interface
Module test
Sub Main()
Dim x As LeftRight
' x.MySub() 'x is ambiguous.
CType(x, Left).MySub() ' Cast to base type.
CType(x, Right).MySub() ' Call the other base type.
End Sub
End Module
Vedi anche
Interfacce
BC30971: <message> questo errore può essere
dovuto anche alla combinazione di un riferimento
file con un riferimento di progetto all'assembly '
<assemblyname> '
05/03/2021 • 2 minutes to read • Edit Online
<message> Questo errore può essere dovuto anche alla combinazione di un riferimento di file con un
riferimento di progetto all'assembly <assemblyname> . In questo caso, provare a sostituire il riferimento file
<assemblyfilename> con '' nel progetto ' <projectname1> ' con un riferimento al progetto a' <projectname2>
'.
Il codice del progetto accede a un membro di un altro progetto, ma la configurazione della soluzione non
consente al compilatore Visual Basic di risolvere il riferimento.
Per accedere a un tipo definito in un altro assembly, il compilatore Visual Basic deve avere un riferimento a tale
assembly. Deve trattarsi di un riferimento unico, non ambiguo, che non generi riferimenti circolari tra i progetti.
ID errore: BC30971
Vedi anche
Gestione dei riferimenti in un progetto
References to Declared Elements
Gestione delle proprietà di progetti e soluzioni
Risoluzione dei problemi relativi ai riferimenti interrotti
BC30269:' <methodname> ' ha più definizioni con
firme identiche
05/03/2021 • 2 minutes to read • Edit Online
Una Function Sub dichiarazione di routine o usa il nome della procedura e l'elenco di argomenti identici di
una dichiarazione precedente. Una delle possibili cause è il tentativo di eseguire l'overload della routine
originale. Le routine di overload devono contenere elenchi di argomenti diversi.
ID errore: BC30269
Vedi anche
References to Declared Elements
Considerazioni sull'overload di routine
BC30560:' <name> ' è ambiguo nello spazio dei
nomi ' <namespacename> '
05/03/2021 • 2 minutes to read • Edit Online
È stato specificato un nome che è ambiguo ed è quindi in conflitto con un altro nome. Il compilatore Visual Basic
non dispone di alcuna regola di risoluzione dei conflitti; è necessario evitare di ambiguare i nomi.
ID errore: BC30560
Vedi anche
Spazi dei nomi in Visual Basic
Istruzione Namespace
BC30561:' <name1> ' è ambiguo ed è importato
dagli spazi dei nomi o dai tipi ' <name2> '
05/03/2021 • 2 minutes to read • Edit Online
È stato specificato un nome che è ambiguo ed è quindi in conflitto con un altro nome. Il compilatore Visual Basic
non dispone di alcuna regola di risoluzione dei conflitti; è necessario evitare di ambiguare i nomi.
ID errore: BC30561
Vedi anche
Istruzione Imports (tipo e spazio dei nomi .NET)
Spazi dei nomi in Visual Basic
Istruzione Namespace
BC40035: <proceduresignature1> non è conforme a
CLS perché viene sottoposto a
<proceduresignature2> Overload che differisce da
esso solo per la matrice dei tipi di parametro di
matrice o per il rango dei tipi di parametro di
matrice
05/03/2021 • 2 minutes to read • Edit Online
Una routine o una proprietà è contrassegnata come <CLSCompliant(True)> quando esegue l'override di un'altra
routine o proprietà e l'unica differenza tra gli elenchi di parametri è il livello di nidificazione di una matrice di
matrici o il rango di una matrice.
Nelle dichiarazioni seguenti la seconda e la terza dichiarazione generano questo errore:
Overloads Sub ProcessArray(arrayParam() As Integer)
La seconda dichiarazione modifica il parametro unidimensionale originale arrayParam in una matrice di matrici.
La terza dichiarazione viene modificata arrayParam in una matrice bidimensionale (Rank 2). Mentre Visual Basic
consente agli overload di differire solo per una di queste modifiche, tale overload non è conforme all'
indipendenza dal linguaggio e ai componenti di Language-Independent (CLS).
Quando CLSCompliantAttribute viene applicato a un elemento di programmazione, il parametro isCompliant
dell'attributo viene impostato su True o False per indicare la conformità o la non conformità. L'impostazione
predefinita per questo parametro non è disponibile, quindi è necessario specificare un valore.
Se a un elemento non viene applicato CLSCompliantAttribute , l'elemento non sarà considerato conforme.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40035
Vedi anche
Overload della routine
Overload
BC30154: <type1> ' <typename> ' deve
implementare '' <membername> per l'interfaccia '
<interfacename> '
05/03/2021 • 2 minutes to read • Edit Online
' <typename> ' deve implementare '' <membername> per l'interfaccia ' <interfacename> '. La proprietà di
implementazione deve avere identificatori ' ReadOnly '/' WriteOnly ' corrispondenti.
Una classe o una struttura attestazioni per implementare un'interfaccia ma non implementa una routine, una
proprietà o un evento definito dall'interfaccia. È necessario implementare tutti i membri dell'interfaccia.
ID errore: BC30154
3. Quando si implementa una proprietà, assicurarsi che ReadOnly o WriteOnly venga usato nello stesso
modo in cui si trova nella definizione dell'interfaccia.
4. Quando si implementa una proprietà, Get dichiarare Set le routine e, a seconda delle esigenze.
Vedi anche
Istruzione Implements
Interfacce
BC30149: <type1> ' <typename> ' deve
implementare '' <methodname> per l'interfaccia '
<interfacename> '
05/03/2021 • 2 minutes to read • Edit Online
Una classe o una struttura attestazioni per implementare un'interfaccia ma non implementa una routine definita
dall'interfaccia. È necessario implementare tutti i membri dell'interfaccia.
ID errore: BC30149
Vedere anche
Istruzione Implements
Interfacce
BC30910:' <typename> ' non può ereditare da
<type> ' <basetypename> ' perché espande
l'accesso della base all' <type> esterno
dell'assembly
05/03/2021 • 2 minutes to read • Edit Online
Una classe o interfaccia eredita da una classe o interfaccia di base ma ha un livello di accesso meno restrittivo.
Ad esempio, un' Public interfaccia eredita da un' Friend interfaccia o una Protected classe eredita da una
Private classe. Questa operazione espone la classe o l'interfaccia di base per accedere oltre il livello previsto.
ID errore: BC30910
Vedi anche
Istruzione Class
Istruzione Interface
Inherits Statement
Livelli di accesso in Visual Basic
BC32008:' <typename> ' è un tipo delegato
05/03/2021 • 2 minutes to read • Edit Online
' <typename> ' è un tipo delegato. La costruzione del delegato consente solo una singola espressione
AddressOf come elenco di argomenti. Spesso è possibile usare un'espressione AddressOf anziché una
costruzione di delegati.
Una New clausola che crea un'istanza di una classe Delegate fornisce un elenco di argomenti non valido al
costruttore del delegato.
È possibile specificare una sola AddressOf espressione quando si crea una nuova istanza del delegato.
Questo errore può verificarsi se non si passano argomenti al costruttore del delegato, se si passa più di un
argomento o se si passa un solo argomento che non è un' AddressOf espressione valida.
ID errore: BC32008
Vedi anche
Operatore New
Operatore AddressOf
Delegati
Procedura: richiamare un metodo delegato
BC30108:' <typename> ' è un tipo e non può essere
usato come espressione
05/03/2021 • 2 minutes to read • Edit Online
Un nome di tipo viene visualizzato nel punto in cui è richiesta un'espressione. Un'espressione deve essere
costituita da una combinazione di variabili, costanti, valori letterali, proprietà e chiamate di routine Function .
ID errore: BC30108
Vedi anche
Operatori ed espressioni
Le virgolette non sono un token di commento
valido per i campi delimitati se EscapeQuote è
impostato su True
05/03/2021 • 2 minutes to read • Edit Online
Sono state fornite le virgolette come delimitatore per TextFieldParser , ma EscapeQuotes è impostato su True .
Vedi anche
SetDelimiters
Delimiters
TextFieldParser
Procedura: Leggere da file di testo con valori delimitati da virgole
Una chiamata a una proprietà o a un metodo non
può includere un riferimento a un oggetto privato,
né come argomento né come valore restituito
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Privata
BC40059: è stato creato un riferimento all'assembly
di interoperabilità incorporato ' <assembly1> ' a
causa di un riferimento indiretto a tale assembly
dall'assembly ' <assembly2> '
05/03/2021 • 2 minutes to read • Edit Online
È stato creato un riferimento all'assembly di interoperabilità incorporato ' <assembly1> ' a causa di un
riferimento indiretto a tale assembly dall'assembly ' <assembly2> '. Provare a modificare la proprietà 'Incorpora
tipi di interoperabilità' in un assembly.
È stato aggiunto un riferimento a un assembly (assembly1) con la proprietà Embed Interop Types impostata su
True . Si dà così istruzione al compilatore di incorporare le informazioni sui tipi di interoperabilità da tale
assembly. Il compilatore non può tuttavia incorporare le informazioni sui tipi di interoperabilità da tale assembly
perché anche un altro assembly a cui si fa riferimento (assembly2) fa riferimento a tale assembly (assembly1) e
ha la proprietà Embed Interop Types impostata su False .
NOTE
L'impostazione della proprietà Embed Interop Types per un riferimento a un assembly su True equivale a fare
riferimento all'assembly usando l'opzione del compilatore della riga di comando -link .
ID errore: BC40059
Vedi anche
-collegamento (Visual Basic)
Interoperabilità con codice non gestito
Non è stato specificato un form di avvio
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
WindowsFormsApplicationBase
OnCreateMainForm
MainForm
Cenni preliminari sul modello di applicazione Visual Basic
BC42025: accesso del membro condiviso, del
membro costante, del membro di enumerazione o
del tipo annidato tramite un'istanza. l'espressione di
qualificazione non verrà valutata
05/03/2021 • 3 minutes to read • Edit Online
Una variabile di istanza di una classe o struttura viene utilizzata per accedere a una Shared variabile, una
proprietà, una routine o un evento definito in tale classe o struttura. Questo avviso può verificarsi anche se viene
usata una variabile di istanza per accedere a un membro implicitamente condiviso di una classe o di una
struttura, ad esempio una costante o un'enumerazione, oppure una classe o una struttura annidata.
Lo scopo della condivisione di un membro consiste nel creare una sola copia di tale membro e renderla
disponibile per ogni istanza della classe o della struttura in cui è dichiarata. È coerente con questo scopo per
accedere a un Shared membro tramite il nome della relativa classe o struttura, anziché tramite una variabile che
include una singola istanza della classe o della struttura.
L'accesso a un Shared membro tramite una variabile di istanza può rendere il codice più difficile da
comprendere nascondendo il fatto che il membro è Shared . Inoltre, se tale accesso è parte di un'espressione
che esegue altre azioni, ad esempio una Function routine che restituisce un'istanza del membro condiviso,
Visual Basic ignora l'espressione e qualsiasi altra azione che altrimenti verrebbe eseguita.
Per ulteriori informazioni e un esempio, vedere Shared.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42025
Esempio
L'esempio seguente genera l'BC42025:
Module Program
Public Sub Main()
Dim tc As New TestClass()
tc.SayHello() ' BC42025.
End Sub
End Module
Module Program
Public Sub Main()
TestClass.SayHello()
End Sub
End Module
NOTE
Ricevere un avviso per gli effetti dell'ambito quando due elementi di programmazione hanno lo stesso nome. Nell'esempio
precedente, se si dichiara un'istanza usando Dim testClass As TestClass = Nothing , il compilatore considera una
chiamata a testClass.SayHello() come accesso del metodo tramite il nome della classe e non viene generato alcun
avviso.
Vedi anche
Condivisa
Ambito in Visual Basic
BC30577: l'operando ' AddressOf ' deve essere il
nome di un metodo (senza parentesi)
05/03/2021 • 2 minutes to read • Edit Online
L'operatore AddressOf crea un'istanza di delegato di routine che fa riferimento a una routine specifica. La
sintassi è la seguente:
AddressOf procedurename
Sono state inserite parentesi intorno all'argomento seguente AddressOf , in cui non è necessario alcun valore.
ID errore: BC30577
Esempio
L'esempio seguente genera l'BC30577:
Sub Main()
' Any of the following two lines generates bc30577.
'Dim t As New Threading.Thread(AddressOf(CountZeroToTen))
'Dim t As New Threading.Thread(AddressOf CountZeroToTen())
t.Start()
End Sub
Sub Main()
Dim t As New Threading.Thread(AddressOf CountZeroToTen)
t.Start()
End Sub
Vedi anche
Operatore AddressOf
Delegati
Errore imprevisto. Impossibile acquisire una risorsa
del sistema operativo necessaria per l'avvio di
istanze singole
05/03/2021 • 2 minutes to read • Edit Online
L'applicazione non è riuscita ad acquisire una risorsa del sistema operativo necessaria. Alcune possibili cause di
questo problema sono:
L'applicazione non dispone di autorizzazioni per la creazione di oggetti del sistema operativo denominati.
Common Language Runtime non dispone di autorizzazioni per la creazione di file mappati alla memoria.
L'applicazione deve accedere a un oggetto del sistema operativo, ma un altro processo lo sta usando.
Vedi anche
Application Page, Project Designer (Visual Basic)
Nozioni di base sul debugger
Opzioni per commenti e suggerimenti in Visual Studio
BC36556: il nome di membro di tipo anonimo può
essere dedotto solo da un nome semplice o
completo senza argomenti
05/03/2021 • 2 minutes to read • Edit Online
Esempio
L'esempio seguente genera l'BC36556:
Per altre informazioni sulle origini da cui i tipi anonimi possono e non possono dedurre i nomi e i tipi dei
membri, vedere procedura: dedurre i nomi e i tipi di proprietà nelle dichiarazioni di tipo anonimo.
Vedi anche
Tipi anonimi
Procedura: dedurre tipi e nomi di proprietà nelle dichiarazioni di tipo anonimo
Argomento non facoltativo (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Il numero e i tipi di argomenti devono corrispondere a quelli previsti. È presente un numero errato di argomenti
oppure un argomento omesso non è facoltativo. Un argomento può essere omesso solo da una chiamata a una
stored procedure definita dall'utente, se è stata dichiarata Optional nella definizione della procedura.
Vedi anche
Tipi di errore
BC30638: i limiti della matrice non possono apparire
negli identificatori di tipo
05/03/2021 • 2 minutes to read • Edit Online
Le dimensioni della matrice non possono essere dichiarate come parte di un identificatore del tipo di dati.
ID errore: BC30638
Esempio
L'esempio seguente genera l'BC30638:
Definire una matrice e inizializzarla con il numero desiderato di elementi, come illustrato nell'esempio
seguente:
Vedi anche
Matrici
BC32039: la matrice dichiarata come variabile di
controllo del ciclo for non può essere dichiarata con
una dimensione iniziale
05/03/2021 • 2 minutes to read • Edit Online
Un For Each ciclo utilizza una matrice come variabile di iterazione ma Inizializza la matrice.
ID errore: BC32039
Esempio
L'esempio seguente genera l'BC32039:
Next
Next
Next
Vedi anche
Istruzione For...Next
Matrici
raccolte
BC30306: espressione di indice di matrice mancante
05/03/2021 • 2 minutes to read • Edit Online
L'inizializzazione di una matrice lascia uno o più pedici che definiscono i limiti della matrice. Ad esempio,
l'istruzione potrebbe contenere l'espressione myArray (5,5,,10) , che lascia il terzo indice.
ID errore: BC30306
Vedi anche
Matrici
BC31043: le matrici dichiarate come membri di
struttura non possono essere dichiarate con una
dimensione iniziale
05/03/2021 • 2 minutes to read • Edit Online
Una matrice in una struttura viene dichiarata con una dimensione iniziale. Non è possibile inizializzare alcun
elemento della struttura e la dichiarazione di una dimensione della matrice è una forma di inizializzazione.
ID errore: BC31043
Esempio
L'esempio seguente genera l'BC31043:
Structure DemoStruct
Public demoArray(9) As Integer
End Structure
Structure DemoStruct
Public demoArray() As Integer
End Structure
Sub UseStruct()
Dim struct As DemoStruct
ReDim struct.demoArray(9)
Struct.demoArray(2) = 777
End Sub
Vedi anche
Matrici
Procedura: Dichiarare una struttura
BC30828:' As Any ' non è supportato nelle istruzioni
' Declare '
05/03/2021 • 2 minutes to read • Edit Online
Il Any tipo di dati è stato usato con le Declare istruzioni in Visual Basic 6,0 e versioni precedenti per consentire
l'uso di argomenti che potrebbero contenere qualsiasi tipo di dati. Visual Basic supporta tuttavia l'overload,
quindi rende Any obsoleto il tipo di dati.
ID errore: BC30828
2. Utilizzare l' MarshalAsAttribute attributo per specificare As Any quando Void* si prevede che la routine
venga chiamata.
Vedi anche
MarshalAsAttribute
Procedura dettagliata: Chiamata delle API di Windows
Declare Statement
Creazione di prototipi nel codice gestito
Errore di automazione
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
Opzioni per commenti e suggerimenti in Visual Studio
BC42033: valore di checksum errato, cifre non
esadecimali o numero dispari di cifre esadecimali
05/03/2021 • 2 minutes to read • Edit Online
Un valore di checksum include cifre esadecimali non valide o un numero di cifre dispari.
Quando ASP.NET genera un file di origine Visual Basic, con estensione vb, calcola un checksum e lo colloca in un
file di origine nascosto identificato da #externalchecksum . Anche un utente può generare un file con estensione
vb per lo stesso scopo, ma questo processo è più adatto per essere usato internamente.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42033
Vedi anche
Panoramica di ASP.NET
Opzioni per commenti e suggerimenti in Visual Studio
Convenzione di chiamata DLL non valida
05/03/2021 • 2 minutes to read • Edit Online
Gli argomenti passati a una libreria di collegamento dinamico (DLL) devono corrispondere esattamente a quelli
previsti dalla routine. Le convenzioni di chiamata gestiscono il numero, il tipo e l'ordine degli argomenti. È
possibile che il programma chiami una routine in una DLL a cui viene passato il tipo o il numero di argomenti
errato.
Vedi anche
Tipi di errore
Istruzione Call
Declare Statement
Modalità file non valida
05/03/2021 • 2 minutes to read • Edit Online
Le istruzioni utilizzate per manipolare il contenuto del file devono essere appropriate per la modalità in cui il file
è stato aperto. Le cause possibili sono:
Un' FilePutObject FileGetObject istruzione o specifica un file sequenziale.
Un' Print istruzione specifica un file aperto per una modalità di accesso diversa da Output o Append .
Un' Input istruzione specifica un file aperto per una modalità di accesso diversa da Input
Assicurarsi Print di specificare un file aperto per la Output Append modalità di accesso o. In caso
contrario, utilizzare un'istruzione diversa per inserire i dati nel file o riaprire il file in una modalità
appropriata.
Assicurarsi Input di specificare un file aperto per Input . In caso contrario, utilizzare un'istruzione
diversa per inserire i dati nel file o riaprire il file in una modalità appropriata.
Se si sta scrivendo in un file di sola lettura, modificare lo stato di lettura/scrittura del file o non tentare di
scrivervi.
Usare la funzionalità disponibile nell'oggetto My.Computer.FileSystem .
Vedi anche
FileSystem
Risoluzione dei problemi: Lettura e scrittura nei file di testo
Numero o nome file errato
05/03/2021 • 2 minutes to read • Edit Online
Si è verificato un errore durante il tentativo di accedere al file specificato. Tra le possibili cause di questo errore
sono:
Un'istruzione fa riferimento a un file con un nome o un numero di file non specificato nell' FileOpen
istruzione o che è stato specificato in un' FileOpen istruzione ma che è stato successivamente chiuso.
Un'istruzione fa riferimento a un file con un numero non compreso nell'intervallo di numeri di file.
Un'istruzione fa riferimento a un nome o a un numero di file non valido.
2. Se il codice genera numeri di file algoritmicamente, verificare che i numeri siano validi.
3. Controllare i nomi dei file per assicurarsi che siano conformi alle convenzioni del sistema operativo.
Vedi anche
FileOpen
Convenzioni di denominazione di Visual Basic
Lunghezza del record non valida
05/03/2021 • 2 minutes to read • Edit Online
La variabile in un' FilePut FilePutObject istruzione o è o include una stringa a lunghezza variabile.
La variabile in un oggetto FilePut o FilePutObject è o include un Variant tipo.
Vedere anche
FileGet
FileGetObject
FilePut
FilePutObject
BC42358: poiché la chiamata non è attesa,
l'esecuzione del metodo corrente continua prima
del completamento della chiamata
05/03/2021 • 8 minutes to read • Edit Online
Non è possibile attendere la chiamata, pertanto l'esecuzione del metodo corrente continuerà prima del
completamento della chiamata. Si consiglia di applicare l' Await operatore al risultato della chiamata.
Il metodo corrente chiama un metodo asincrono che restituisce Task o Task<TResult> e non applica l'operatore
await al risultato. Con la chiamata al metodo asincrono viene avviata un'attività asincrona. Tuttavia, poiché non
viene applicato alcun operatore Await , l'esecuzione del programma continua senza attendere il
completamento dell'attività. Nella maggior parte dei casi questo comportamento non è quello previsto. Di solito
altri aspetti del metodo chiamante dipendono dai risultati della chiamata o, come minimo, si prevede che il
metodo chiamato venga completato prima della restituzione da parte del metodo contenente la chiamata.
Un problema ugualmente importante riguarda cosa accade con le eccezioni generate nel metodo asincrono
richiamato. Un'eccezione generata in un metodo che restituisce Task o Task<TResult> viene archiviata
nell'attività restituita. Se non si attende l'attività o si controllano in modo esplicito le eccezioni, l'eccezione viene
persa. Se si attende l'attività, la relativa eccezione viene generata di nuovo.
Come procedura consigliata, attendere sempre la chiamata.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42358
' Variable delay is used to slow down the called method so that you
' can distinguish between awaiting and not awaiting in the program's output.
' You can adjust the value to produce the output that this topic shows
' after the code.
Dim delay = 5000
' Call #3
' To contrast with an awaited call, replace the unawaited call
' (Call #1 or Call #2) with the following awaited call. The best
' practice is to await the call.
'Await CalledMethodAsync(delay)
ResultsTextBox.Text &= vbCrLf & " Entering called method, starting and awaiting Task.Delay."
' Slow the process down a little so you can distinguish between awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await Task.Delay(howLong)
ResultsTextBox.Text &= vbCrLf & " Task.Delay is finished--returning from called method."
End Function
Nell'esempio, se si sceglie Call #1 o Call #2, il metodo asincrono senza attesa ( CalledMethodAsync ) termina dopo
che il relativo chiamante ( CallingMethodAsync ) e il chiamante del chiamante ( StartButton_Click ) sono
completati. Nell'ultima riga nell'output seguente viene mostrato quando viene completato il metodo chiamato.
L'entrata e l'uscita dal gestore eventi tramite cui viene chiamato CallingMethodAsync nell'esempio completo
sono contrassegnate nell'output.
Esempio
Nell'applicazione Windows Presentation Foundation (WPF) seguente sono inclusi i metodi dell'esempio
precedente. I passaggi seguenti configurano l'applicazione:
1. Creare un'applicazione WPF e denominarla AsyncWarning .
2. Nell'Editor di codice di Visual Studio scegliere la scheda MainWindow.xaml .
Se la scheda non è visibile, aprire il menu di scelta rapida per MainWindow. XAML in Esplora soluzioni ,
quindi scegliere Visualizza codice .
3. Sostituire il codice nella visualizzazione XAML di MainWindow. XAML con il codice seguente:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="StartButton" Content="Start" HorizontalAlignment="Left" Margin="214,28,0,0"
VerticalAlignment="Top" Width="75" HorizontalContentAlignment="Center" FontWeight="Bold"
FontFamily="Aharoni" Click="StartButton_Click" />
<TextBox x:Name="ResultsTextBox" Margin="0,80,0,0" TextWrapping="Wrap" FontFamily="Lucida
Console"/>
</Grid>
</Window>
Una finestra semplice con un pulsante e una casella di testo viene visualizzata nella visualizzazione
Progettazione di MainWindow.xaml.
Per altre informazioni sulla finestra di progettazione XAML, vedere Creating a UI by using XAML Designer.
Per informazioni su come compilare una semplice interfaccia utente, vedere le sezioni "Per creare
un'applicazione WPF" e "Per progettare una finestra WPF MainWindow semplice" nella Procedura
dettagliata: Accesso al Web tramite Async e Await.
4. Sostituire il codice in MainWindow.xaml.vb con quello riportato di seguito.
Class MainWindow
' Variable delay is used to slow down the called method so that you
' can distinguish between awaiting and not awaiting in the program's output.
' You can adjust the value to produce the output that this topic shows
' after the code.
Dim delay = 5000
' Call #3
' To contrast with an awaited call, replace the unawaited call
' (Call #1 or Call #2) with the following awaited call. The best
' practice is to await the call.
'Await CalledMethodAsync(delay)
ResultsTextBox.Text &= vbCrLf & " Entering called method, starting and awaiting
Task.Delay."
' Slow the process down a little so you can distinguish between awaiting
' and not awaiting. Adjust the value for howLong if necessary.
Await Task.Delay(howLong)
ResultsTextBox.Text &= vbCrLf & " Task.Delay is finished--returning from called method."
End Function
End Class
' Output
' Output
Vedi anche
Operatore await
Programmazione asincrona con Async e Await
BC36548: non è possibile convertire il tipo anonimo
in un albero delle espressioni perché una proprietà
del tipo viene usata per inizializzare un'altra
proprietà
05/03/2021 • 2 minutes to read • Edit Online
Il compilatore non accetta la conversione di un tipo anonimo in un albero delle espressioni quando una
proprietà del tipo anonimo viene utilizzata per inizializzare un'altra proprietà del tipo anonimo. Nel codice
seguente, ad esempio, Prop1 viene dichiarato nell'elenco di inizializzazione e quindi utilizzato come valore
iniziale per Prop2 .
ID errore: BC36548
Esempio
Module M2
Sub Main()
' The following line causes the error.
ExpressionExample(Function() New With {.Prop1 = 2, .Prop2 = .Prop1})
End Sub
End Module
Sub Main()
Dim temp = 2
ExpressionExample(Function() New With {.Prop1 = temp, .Prop2 = temp})
End Sub
Vedi anche
Tipi anonimi (Visual Basic)
Alberi delle espressioni (Visual Basic)
Procedura: usare alberi delle espressioni per la compilazione di query dinamiche (Visual Basic)
Impossibile creare il componente ActiveX
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
Opzioni per commenti e suggerimenti in Visual Studio
BC30310: non è possibile fare riferimento a'
<name> ' perché è un membro del campo <name>
di tipo valore '' della classe ' <classname> ' che ha '
System. MarshalByRefObject ' come classe base
05/03/2021 • 2 minutes to read • Edit Online
La System.MarshalByRefObject classe consente alle applicazioni che supportano l'accesso remoto agli oggetti
attraverso i limiti del dominio applicazione. I tipi devono ereditare dalla MarshalByRejectObject classe quando il
tipo viene usato tra i limiti del dominio applicazione. Lo stato dell'oggetto non deve essere copiato perché i
membri dell'oggetto non sono utilizzabili all'esterno del dominio dell'applicazione in cui sono stati creati.
ID errore: BC30310
Vedi anche
MarshalByRefObject
Istruzione Dim
BC30369: non è possibile fare riferimento a un
membro di istanza di una classe all'interno di un
metodo condiviso o di un inizializzatore di membro
condiviso senza un'istanza esplicita della classe
05/03/2021 • 2 minutes to read • Edit Online
Si è tentato di fare riferimento a un membro non condiviso di una classe all'interno di una procedura condivisa.
Nell'esempio seguente viene illustrata una situazione di questo tipo:
Class Sample
Public x as Integer
Public Shared Sub SetX()
x = 10
End Sub
End Class
Vedi anche
Condivisa
Impossibile creare il file temporaneo necessario
05/03/2021 • 2 minutes to read • Edit Online
L'unità è piena che contiene la directory specificata dalla variabile di ambiente TEMP oppure la variabile di
ambiente TEMP specifica un'unità o una directory di sola lettura non valida.
Vedi anche
Tipi di errore
BC2012: non è possibile aprire ' <filename> ' per la
scrittura
05/03/2021 • 2 minutes to read • Edit Online
Il file specificato non può essere aperto per la scrittura, probabilmente perché è già stato aperto.
ID errore: BC2012
Vedi anche
WriteAllText
WriteAllBytes
Scrittura in file
BC31098: Impossibile trovare la classe ' <classname>
'
05/03/2021 • 2 minutes to read • Edit Online
Impossibile trovare la classe ' <classname> '. Questa condizione è in genere il risultato di un
"Microsoft.VisualBasic.dll" non corrispondente.
Non è stato possibile trovare un membro definito.
ID errore: BC31098
Vedi anche
Opzioni per commenti e suggerimenti in Visual Studio
La classe non supporta l'automazione o l'interfaccia
prevista
05/03/2021 • 2 minutes to read • Edit Online
La classe specificata nella funzione GetObject o CreateObject non ha esposto un'interfaccia di programmabilità
oppure è stato modificato un progetto da .dll a .exe o viceversa.
Vedi anche
Tipi di errore
Opzioni per commenti e suggerimenti in Visual Studio
BC30481: l'istruzione ' Class ' deve terminare con un
oggetto ' End Class ' corrispondente
05/03/2021 • 2 minutes to read • Edit Online
Class viene usato per avviare un Class blocco, quindi può essere visualizzato solo all'inizio del blocco, con
un'istruzione corrispondente che End Class termina il blocco. È presente un'istruzione ridondante Class
oppure il blocco non è stato terminato Class con End Class .
ID errore: BC30481
Vedi anche
<keyword>Istruzione End
Istruzione Class
Formato degli Appunti non valido
05/03/2021 • 2 minutes to read • Edit Online
Il formato degli Appunti specificato non è compatibile con il metodo in esecuzione. Tra le possibili cause di
questo errore sono:
Utilizzo del GetText metodo o degli Appunti SetText con un formato degli Appunti diverso da
vbCFText o vbCFLink .
Utilizzo del GetData metodo o degli Appunti SetData con un formato degli Appunti diverso da
vbCFBitmap , vbCFDIB o vbCFMetafile .
Utilizzo dei GetData SetData metodi o di un oggetto DataObject con un formato degli Appunti
nell'intervallo riservato da Microsoft Windows per i formati registrati (&HC000-&HFFFF), quando il
formato degli Appunti non è stato registrato con Microsoft Windows.
Vedi anche
Appunti: aggiunta di altri formati
BC30439: espressione costante non rappresentabile
nel tipo ' <typename> '
05/03/2021 • 2 minutes to read • Edit Online
Si sta tentando di valutare una costante che non rientrerà nel tipo di destinazione, in genere perché sta
causando un overflow dell'intervallo.
ID errore: BC30439
Vedi anche
Cenni preliminari sulle costanti
Costanti ed enumerazioni
BC30424: le costanti devono essere di tipo
intrinseco o enumerato, non di tipo classe, struttura,
parametro di tipo o matrice
05/03/2021 • 2 minutes to read • Edit Online
Si è provato a dichiarare una costante come una classe, una struttura o un tipo di matrice oppure come un
parametro di tipo definito da un tipo generico che lo contiene.
Le costanti devono essere di tipo intrinseco ( Boolean , Byte , Date , Decimal , Double , Integer , Long ,
Object , SByte , Short , Single , String , UInteger , ULong o UShort ) o di un Enum tipo basato su uno dei
tipi integrali.
ID errore: BC30424
Vedi anche
Costanti ed enumerazioni
Tipi di dati
Tipi di dati
BC30298: il costruttore ' <name> ' non può
chiamare se stesso
05/03/2021 • 2 minutes to read • Edit Online
Una Sub New routine in una classe o in una struttura chiama se stessa.
Lo scopo di un costruttore è di inizializzare un'istanza di una classe o una struttura quando viene creata per la
prima volta. Una classe o una struttura può avere più costruttori, purché tutti abbiano elenchi di parametri
diversi. Un costruttore è autorizzato a chiamare un altro costruttore per eseguirne la funzionalità oltre a se
stesso. Tuttavia, non è significativo per un costruttore chiamare se stesso e in realtà comporterebbe una
ricorsione infinita se consentito.
ID errore: BC30298
Vedi anche
Durata degli oggetti: come creare e distruggere oggetti
BC32053: la copia del valore del parametro ' ByRef
'' <parametername> ' di nuovo nell'argomento
corrispondente è più stretta dal tipo ' <typename1>
' al tipo ' <typename2> '
05/03/2021 • 3 minutes to read • Edit Online
Una routine viene chiamata con un argomento che viene ampliato al tipo di parametro corrispondente e la
conversione dal parametro all'argomento è più restrittiva.
Quando si definisce una classe o una struttura, è possibile definire uno o più operatori di conversione per
convertire il tipo della classe o della struttura in altri tipi. È anche possibile definire operatori di conversione
inversi per riconvertire gli altri tipi nel tipo della classe o della struttura originale. Quando si usa il tipo di classe
o struttura in una chiamata di procedura, Visual Basic possibile usare questi operatori di conversione per
convertire il tipo di un argomento nel tipo del parametro corrispondente.
Se si passa l'argomento ByRef, Visual Basic talvolta copia il valore dell'argomento in una variabile locale nella
routine invece di passare un riferimento. In tal caso, quando la procedura viene restituita, Visual Basic necessario
copiare nuovamente il valore della variabile locale nell'argomento nel codice chiamante.
Se un valore dell'argomento ByRef viene copiato nella routine e l'argomento e il parametro sono dello stesso
tipo, non è necessaria alcuna conversione. Tuttavia, se i tipi sono diversi, Visual Basic necessario eseguire la
conversione in entrambe le direzioni. Se uno dei tipi è il tipo della classe o della struttura, Visual Basic necessario
convertirlo in e da un altro tipo. Se una di queste conversioni viene ampliata, la conversione inversa potrebbe
essere più restrittiva.
ID errore: BC32053
Vedi anche
Procedure
Parametri e argomenti delle routine
Passaggio di argomenti per valore e per riferimento
Routine di operatore
Operator Statement
Procedura: definire un operatore
Procedura: Definire un operatore di conversione
Conversioni di tipi in Visual Basic
Widening and Narrowing Conversions
BC31122: il modificatore ' Custom ' non è valido
negli eventi dichiarati senza tipi delegati espliciti
05/03/2021 • 2 minutes to read • Edit Online
A differenza di un evento non personalizzato, una Custom Event dichiarazione richiede una As clausola che
segue il nome dell'evento che specifica in modo esplicito il tipo di delegato per l'evento.
Gli eventi non personalizzati possono essere definiti con una As clausola e un tipo di delegato esplicito o con
un elenco di parametri immediatamente successivo al nome dell'evento.
ID errore: BC31122
2. Sostituire l'elenco di parametri dell'evento personalizzato con una As clausola che specifica il tipo di
delegato.
Continuando con l'esempio, la Custom Event dichiarazione verrebbe riscritta nel modo seguente.
Esempio
In questo esempio viene dichiarato un oggetto Custom Event e viene specificata la As clausola obbligatoria con
un tipo delegato.
Vedi anche
Istruzione Event
Istruzione Delegate
Eventi
BC36647 e BC36644: non è possibile dedurre da
questi argomenti i tipi di dati dei parametri di tipo
19/03/2021 • 2 minutes to read • Edit Online
Non è possibile dedurre da questi argomenti i tipi di dati dei parametri di tipo. Per correggere l'errore, provare a
specificare i tipi di dati in modo esplicito.
Questo errore si verifica quando la risoluzione dell'overload non riesce. Viene visualizzato come messaggio
subordinato che indica perché un determinato candidato di overload è stato eliminato. Il messaggio di errore
spiega che il compilatore non può usare l'inferenza del tipo per trovare i tipi di dati per i parametri di tipo.
NOTE
Quando non è possibile specificare gli argomenti (ad esempio per gli operatori di query nelle espressioni di query), il
messaggio di errore visualizzato non contiene la seconda frase.
Module Module1
Sub Main()
End Sub
End Module
Interface InterfaceExample(Of T)
End Interface
Vedi anche
Conversione di tipo relaxed del delegato
Generic Procedures in Visual Basic
Conversioni di tipi in Visual Basic
BC30188: prevista dichiarazione
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Procedure
Istruzione Dim
BC40007: la proprietà predefinità <propertyname1>
' è in conflitto con la proprietà predefinità
<propertyname2> ' in ' <classname> ', quindi deve
essere dichiarata ' Shadows '
05/03/2021 • 2 minutes to read • Edit Online
Una proprietà viene dichiarata con lo stesso nome di una proprietà definita nella classe base. In questa
situazione, la proprietà in questa classe deve nascondere la proprietà della classe base.
Si tratta di un messaggio di avviso. Per impostazione predefinita viene usato Shadows . Per altre informazioni su
come nascondere gli avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40007
Vedi anche
Ombreggiature
Shadowing in Visual Basic
BC30686: l'accesso alla proprietà predefinita è
ambiguo tra i membri di interfaccia ereditati '
<defaultpropertyname> ' dell'interfaccia '
<interfacename1> ' è <defaultpropertyname> '
dell'interfaccia ' <interfacename2> '
05/03/2021 • 2 minutes to read • Edit Online
Un'interfaccia eredita da due interfacce, ognuna delle quali dichiara una proprietà predefinita con lo stesso
nome. Il compilatore non può risolvere un accesso a questa proprietà predefinita senza qualifica. Questa
condizione è illustrata nell'esempio seguente.
Quando si specifica testObj(1) , il compilatore tenta di risolverlo nella proprietà predefinita. Tuttavia, esistono
due possibili proprietà predefinite a causa delle interfacce ereditate, quindi il compilatore segnala l'errore.
ID errore: BC30686
-oppure-
Implementare l'interfaccia di ereditarietà in una classe. È quindi possibile implementare ognuna delle
proprietà ereditate con nomi diversi. Tuttavia, solo uno di essi può essere la proprietà predefinita della
classe di implementazione. Questa condizione è illustrata nell'esempio seguente.
Public Class useIface3
Implements Iface3
Default Public Property prop1(ByVal arg As Integer) As Integer Implements Iface1.prop
' Insert code to define Get and Set procedures for prop1.
End Property
Public Property prop2(ByVal arg As Integer) As Integer Implements Iface2.prop
' Insert code to define Get and Set procedures for prop2.
End Property
End Class
Vedi anche
Interfacce
BC30220: la classe delegata ' <classname> ' non ha
un metodo Invoke, quindi un'espressione di questo
tipo non può essere la destinazione di una chiamata
al metodo
05/03/2021 • 2 minutes to read • Edit Online
Una chiamata a Invoke tramite un delegato non è riuscita perché Invoke non è implementato nella classe
delegata.
ID errore: BC30220
Vedi anche
Delegati
Istruzione Delegate
Operatore AddressOf
Istruzione Dim
BC30029: le classi derivate non possono generare
eventi di classe base
05/03/2021 • 2 minutes to read • Edit Online
Un evento può essere generato solo dallo spazio di dichiarazione in cui è dichiarato. Pertanto, una classe non
può generare eventi da qualsiasi altra classe, anche uno da cui è derivato.
ID errore: BC30029
Vedi anche
Istruzione Event
Istruzione RaiseEvent
Errore di I/O del dispositivo
05/03/2021 • 2 minutes to read • Edit Online
Si è verificato un errore di input o di output durante il programma in uso di un dispositivo, ad esempio una
stampante o un'unità disco.
Vedi anche
Tipi di errore
La funzione 'Dir' deve essere anzitutto chiamata con
un argomento 'PathName'
05/03/2021 • 2 minutes to read • Edit Online
Una chiamata iniziale alla Dir funzione non include l' PathName argomento. La prima chiamata a Dir deve
includere un oggetto PathName , ma le chiamate successive a Dir non devono includere parametri per
recuperare l'elemento successivo.
Vedere anche
Dir
BC30205: è prevista la fine dell'istruzione
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Procedura: Interrompere e combinare istruzioni nel codice
Istruzioni
BC30140: errore durante la creazione del manifesto
dell'assembly: <error message>
05/03/2021 • 2 minutes to read • Edit Online
Il compilatore Visual Basic chiama assembly linker (Al.exe, noto anche come ALink) per generare un assembly
con un manifesto. Il linker ha segnalato un errore nella fase di pre-emissione della creazione dell'assembly.
Questo può accadere se si verificano errori con il file di chiave o il contenitore di chiavi specificato. Per la firma
completa di un assembly, è necessario fornire un file di chiave valido contenente informazioni sulle chiavi
pubblica e privata. Per ritardare la firma di un assembly, è necessario selezionare la casella di controllo Solo
firma ritardata e fornire un file di chiave valido contenente informazioni sulla chiave pubblica. Quando la
firma di un assembly viene ritardata, la chiave privata non è necessaria. Per altre informazioni, vedere Procedura:
Firmare un assembly con un nome sicuro.
ID errore: BC30140
Vedi anche
Procedura: firmare un assembly con un nome sicuro
Pagina Firma, Progettazione progetti
Al.exe
Opzioni per commenti e suggerimenti in Visual Studio
BC30136: errore durante la creazione delle risorse
Win32: <error message>
05/03/2021 • 2 minutes to read • Edit Online
Il compilatore Visual Basic chiama assembly linker (Al.exe, noto anche come ALink) per generare un assembly
con un manifesto. Il linker ha rilevato un errore nella creazione di una risorsa in memoria. Potrebbe trattarsi di
un problema di ambiente o di memoria insufficiente nel computer.
ID errore: BC30136
Vedi anche
Al.exe
Opzioni per commenti e suggerimenti in Visual Studio
Errore di caricamento della DLL (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Una libreria di collegamento dinamico (DLL) è una libreria specificata nella Lib clausola di un' Declare
istruzione. Le possibili cause di questo errore includono:
Il file non è un file eseguibile DLL.
Il file non è una DLL di Microsoft Windows.
La DLL fa riferimento a un'altra DLL non presente.
La DLL o la DLL a cui si fa riferimento non si trova in una directory specificata nel percorso.
Vedi anche
Declare Statement
BC30137: errore durante il salvataggio del file di
risorse Win32 temporaneo ' <filename> ': <error
message>
05/03/2021 • 2 minutes to read • Edit Online
Il compilatore Visual Basic chiama assembly linker (Al.exe, noto anche come ALink) per generare un assembly
con un manifesto. Il linker ha segnalato un errore durante il tentativo di ottenere un nome di file in cui scrivere
una risorsa in memoria.
ID errore: BC30137
Vedi anche
Al.exe
Opzioni per commenti e suggerimenti in Visual Studio
BC36810: si sono verificati errori durante la
compilazione degli XML Schema nel progetto
05/03/2021 • 2 minutes to read • Edit Online
Si sono verificati errori durante la compilazione degli XML Schema nel progetto. Per questo motivo, IntelliSense
XML non è disponibile.
Si è verificato un errore in uno schema XSD (XML Schema Definition) incluso nel progetto. Questo errore si
verifica quando si aggiunge un file di schema XSD (XSD) in conflitto con il set di schemi XSD esistente per il
progetto.
ID errore: BC36810
Vedi anche
Finestra Elenco errori
XML
BC30722: timeout della valutazione dell'espressione
o dell'istruzione
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Debug in Visual Studio
BC31423: l'evento ' <eventname1> ' non può
implementare <eventname2> l'evento ''
nell'interfaccia ' <interface> ' perché i tipi delegati '
<delegate1> ' è <delegate2> ' non corrispondono
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic non è in grado di implementare un evento perché il tipo delegato dell'evento non corrisponde al
tipo delegato dell'evento nell'interfaccia. Questo errore può insorgere quando si definiscono più eventi in
un'interfaccia e si prova a implementarli assieme con lo stesso evento. Un evento può implementare due o più
eventi solo se tutti gli eventi implementati vengono dichiarati usando la sintassi As e se tutti specificano lo
stesso tipo delegato.
ID errore: BC31423
Vedi anche
Istruzione Event
Istruzione Delegate
Eventi
BC31084: non è possibile dichiarare gli eventi con
un tipo delegato che ha un tipo restituito
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Eventi
BC30594: gli eventi delle variabili WithEvents
condivise non possono essere gestiti da metodi non
condivisi
05/03/2021 • 2 minutes to read • Edit Online
Una variabile dichiarata con il Shared modificatore è una variabile condivisa. Una variabile condivisa identifica
esattamente un percorso di archiviazione. Una variabile dichiarata con il WithEvents modificatore dichiara che il
tipo a cui appartiene la variabile gestisce il set di eventi generato dalla variabile. Quando un valore viene
assegnato alla variabile, la proprietà creata dalla WithEvents dichiarazione sgancia qualsiasi gestore eventi
esistente e associa il nuovo gestore eventi tramite il Add metodo.
ID errore: BC30594
Vedi anche
Condivisa
WithEvents
BC30491: l'espressione non produce un valore
05/03/2021 • 2 minutes to read • Edit Online
Si è tentato di usare un'espressione che non produce un valore in un contesto che produce valori, ad esempio
chiamando un oggetto Sub in un contesto in cui Function è previsto un oggetto.
ID errore: BC30491
Vedi anche
Tipi di errore
BC31393: l'espressione ha il tipo ' <typename> ' che
è un tipo con restrizioni e non può essere usato per
accedere ai membri ereditati da' Object ' o '
ValueType '
05/03/2021 • 2 minutes to read • Edit Online
Un'espressione restituisce un tipo che non può essere boxed dal Common Language Runtime (CLR) ma accede
a un membro che richiede la conversione boxing.
Il termine boxing indica il processo di elaborazione necessario per la conversione di un tipo in Object o
ValueType. Il Common Language Runtime non può eseguire il box di determinati tipi di struttura, ad esempio,
ArgIterator RuntimeArgumentHandle e TypedReference .
Questa espressione tenta di usare il tipo con restrizioni per chiamare un metodo ereditato da Object o
ValueType , ad esempio GetHashCode o ToString . Per accedere a questo metodo, Visual Basic ha tentato di
eseguire una conversione boxing implicita che genera questo errore.
ID errore: BC31393
Vedi anche
Conversioni implicite ed esplicite
BC30068: Expression è un valore e pertanto non
può essere la destinazione di un'assegnazione
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione tenta di assegnare un valore a un'espressione. È possibile assegnare un valore solo a una variabile
scrivibile, a una proprietà o a un elemento di matrice in fase di esecuzione. Nell'esempio seguente viene
illustrato come può verificarsi l'errore.
Esempi simili possono essere applicati alle proprietà e agli elementi di matrice.
Accesso indiretto. L'accesso indiretto tramite un tipo di valore può anche generare questo errore. Si consideri
l'esempio di codice seguente, che tenta di impostare il valore di Point accedendo indirettamente tramite
Location .
L'ultima istruzione dell'esempio precedente ha esito negativo perché crea solo un'allocazione temporanea per la
Point struttura restituita dalla Location Proprietà. Una struttura è un tipo di valore e la struttura temporanea non
viene mantenuta dopo l'esecuzione dell'istruzione. Il problema viene risolto dichiarando e utilizzando una
variabile per Location , che consente di creare un'allocazione più permanente per la Point struttura. Nell'esempio
seguente viene illustrato il codice in grado di sostituire l'ultima istruzione dell'esempio precedente.
ID errore: BC30068
L'espressione di tipo <type> non è Queryable. Verificare che non manchi un riferimento all'assembly e/o
l'importazione dello spazio dei nomi per il provider LINQ.
I tipi queryable sono definiti negli System.Linq System.Data.Linq System.Xml.Linq spazi dei nomi, e. Per eseguire
query LINQ è necessario importare uno o più di questi spazi dei nomi.
Lo System.Linq spazio dei nomi consente di eseguire query su oggetti quali raccolte e matrici utilizzando LINQ.
Lo System.Data.Linq spazio dei nomi consente di eseguire query sui set di dati ADO.NET e SQL Server database
usando LINQ.
Lo System.Xml.Linq spazio dei nomi consente di eseguire query su XML utilizzando LINQ e di utilizzare le
funzionalità XML in Visual Basic.
ID errore: BC36593
Vedi anche
System.Linq
System.Data.Linq
System.Xml.Linq
Introduzione a LINQ in Visual Basic
LINQ
XML
Riferimenti e istruzione Imports
Istruzione Imports (tipo e spazio dei nomi .NET)
Riferimenti (pagina), Creazione progetti (Visual Basic)
BC42026: l'espressione chiama in modo ricorsivo la
proprietà'' che lo contiene <propertyname>
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione nella Set procedura di una definizione di proprietà archivia un valore nel nome della proprietà.
L'approccio consigliato per contenere il valore di una proprietà consiste nel definire una Private variabile nel
contenitore della proprietà e usarla in entrambe le Get routine e Set . La Set stored procedure deve quindi
archiviare il valore in ingresso in questa Private variabile.
La Get procedura si comporta come una Function routine, quindi può assegnare un valore al nome della
proprietà e restituire il controllo mediante l' End Get istruzione. Tuttavia, l'approccio consigliato consiste
nell'includere la Private variabile come valore in un' istruzione Return.
La Set procedura si comporta come una Sub routine che non restituisce un valore. Pertanto, il nome della
procedura o della proprietà non ha un significato speciale all'interno di una Set routine e non è possibile
archiviarvi un valore.
Nell'esempio seguente viene illustrato l'approccio che può causare questo errore, seguito dall'approccio
consigliato.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42026
Vedi anche
Routine Property
Property Statement
Istruzione set
Espressione troppo complessa
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Operatori ed espressioni
BC36550: è possibile applicare l'attributo ' Extension
' solo alle dichiarazioni ' Module ',' Sub ' o '
Function '
05/03/2021 • 2 minutes to read • Edit Online
L'unico modo per estendere un tipo di dati in Visual Basic consiste nel definire un metodo di estensione
all'interno di un modulo standard. Il metodo di estensione può essere una Sub routine o una Function routine.
Tutti i metodi di estensione devono essere contrassegnati con l'attributo extension, <Extension()> , dallo
System.Runtime.CompilerServices spazio dei nomi. Facoltativamente, un modulo che contiene un metodo di
estensione può essere contrassegnato nello stesso modo. Nessun altro uso dell'attributo di estensione è valido.
ID errore: BC36550
Esempio
Nell'esempio seguente viene definito un Print metodo per il String tipo di dati.
Imports StringUtility
Imports System.Runtime.CompilerServices
Namespace StringUtility
<Extension()>
Module StringExtensions
<Extension()>
Public Sub Print (ByVal str As String)
Console.WriteLine(str)
End Sub
End Module
End Namespace
Vedi anche
Panoramica degli attributi
Metodi di estensione
Istruzione Module
File già aperto
05/03/2021 • 2 minutes to read • Edit Online
In alcuni casi è necessario chiudere un file prima che sia possibile eseguire un'altra FileOpen operazione o
un'altra. Di seguito sono riportate le cause possibili dell'errore:
FileOpen È stata eseguita un'operazione sequenziale in modalità output per un file già aperto
Un'istruzione fa riferimento a un file aperto.
Vedere anche
FileOpen
Il file è troppo grande per essere letto in una
matrice byte
05/03/2021 • 2 minutes to read • Edit Online
La dimensione del file che si sta tentando di leggere in una matrice di byte supera i 4 GB. Il
My.Computer.FileSystem.ReadAllBytes metodo non è in grado di leggere un file che supera questa dimensione.
Vedi anche
ReadAllBytes
StreamReader
Accesso ai file con Visual Basic
Procedura: Leggere il testo da file con un oggetto StreamReader
Nome di file o nome di classe non trovato durante
un'operazione di automazione (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Impossibile trovare il nome specificato per il nome file o la classe in una chiamata alla GetObject funzione.
Vedi anche
Tipi di errore
Impossibile trovare il file (errore di run-time Visual
Basic)
05/03/2021 • 2 minutes to read • Edit Online
Il file non è stato trovato dove specificato. L'errore ha le seguenti cause possibili:
Un'istruzione fa riferimento a un file che non esiste.
È stato effettuato un tentativo di chiamare una routine in una libreria a collegamento dinamico (DLL), ma
la libreria specificata nella Lib clausola dell' Declare istruzione non è stata trovata.
Si è tentato di aprire un progetto o di caricare un file di testo inesistente.
Vedi anche
Declare Statement
BC33107: il primo operando in un'espressione ' If '
binaria deve essere nullable o un tipo riferimento
05/03/2021 • 2 minutes to read • Edit Online
Un' If espressione può assumere due o tre argomenti. Quando si inviano solo due argomenti, il primo
argomento deve essere un tipo di riferimento o un tipo di valore Nullable. Se il primo argomento restituisce
qualcosa di diverso da Nothing , viene restituito il relativo valore. Se il primo argomento restituisce Nothing , il
secondo argomento viene valutato e restituito.
Il codice seguente, ad esempio, contiene due If espressioni, una con tre argomenti e una con due argomenti.
Le espressioni calcolano e restituiscono lo stesso valore.
Dim choice1 = 4
Dim choice2 = 5
Dim booleanVar = True
ID errore: BC33107
Vedi anche
Operatore If
Istruzione If...Then...Else
Tipi di valore Nullable
BC30148: la prima istruzione di questo ' Sub New '
deve essere una chiamata a' MyBase. New ' o a'
MyClass. New ' (nessun costruttore accessibile senza
parametri)
05/03/2021 • 2 minutes to read • Edit Online
La prima istruzione di questo ' Sub New ' deve essere una chiamata a' MyBase. New ' o a' MyClass. New '
perché la classe base ' <basename> ' di ' <derivedname> ' non ha un'Sub New ' accessibile che può essere
chiamato senza argomenti.
In una classe derivata ogni costruttore deve chiamare un costruttore della classe base ( MyBase.New ). Se la
classe base dispone di un costruttore senza parametri accessibile alle classi derivate, MyBase.New può essere
chiamato automaticamente. In caso contrario, è necessario chiamare un costruttore della classe base con
parametri e questa operazione non può essere eseguita automaticamente. In questo caso, la prima istruzione di
ogni costruttore della classe derivata deve chiamare un costruttore con parametri sulla classe di base o
chiamare un altro costruttore nella classe derivata che effettua una chiamata al costruttore della classe base.
ID errore: BC30148
Vedi anche
Nozioni fondamentali sull'ereditarietà
BC30920: la prima istruzione di questo ' Sub New '
deve essere una chiamata esplicita a' MyBase. New '
o a' MyClass. New ' perché' <constructorname> '
nella classe base ' <baseclassname> ' di '
<derivedclassname> ' è contrassegnato come
obsoleto:' <errormessage> '
05/03/2021 • 2 minutes to read • Edit Online
Un costruttore di classe non chiama esplicitamente un costruttore della classe base e il costruttore della classe
base implicito è contrassegnato con l'attributo ObsoleteAttribute e la direttiva di considerarlo come un errore.
Quando un costruttore della classe derivata non chiama un costruttore della classe base, Visual Basic tenta di
generare una chiamata implicita a un costruttore della classe base senza parametri. Se nella classe base non è
presente alcun costruttore accessibile che può essere chiamato senza argomenti, Visual Basic non può generare
una chiamata implicita. In questo caso, il costruttore obbligatorio è contrassegnato con l' ObsoleteAttribute
attributo, quindi Visual Basic non può chiamarlo.
È possibile contrassegnare qualsiasi elemento di programmazione come non più in uso applicando
ObsoleteAttribute a tale elemento. In questo caso, è possibile impostare la proprietà IsError dell'attributo su
True o False . Se si imposta la proprietà su True , il compilatore considera il tentativo di usare l'elemento
come un errore. Se si imposta la proprietà su False , o si lascia l'impostazione predefinita False , il compilatore
genera un avviso se si prova a usare l'elemento.
ID errore: BC30920
Vedi anche
Panoramica degli attributi
BC32096:' for each ' sul tipo ' <typename> ' è
ambiguo perché il tipo implementa più creazioni di
istanza di ' System. Collections. Generic.
IEnumerable (Of T)'
05/03/2021 • 2 minutes to read • Edit Online
Un' For Each istruzione specifica una variabile iteratore con più di un GetEnumerator metodo.
La variabile iteratore deve essere di un tipo che implementa System.Collections.IEnumerable l'
System.Collections.Generic.IEnumerable<T> interfaccia o in uno degli Collections spazi dei nomi del .NET
Framework. È possibile che una classe implementi più di un'interfaccia generica costruita, usando un argomento
di tipo diverso per ogni costruzione. Se una classe che esegue questa operazione viene usata per la variabile
iteratore, tale variabile ha più di un GetEnumerator metodo. In tal caso, Visual Basic non è in grado di scegliere il
metodo da chiamare.
ID errore: BC32096
Vedi anche
Istruzione For Each...Next
Interfacce
BC31535: il riferimento all'assembly Friend
<reference> non è valido
05/03/2021 • 2 minutes to read • Edit Online
Il riferimento all'assembly Friend <reference> non è valido. Gli assembly firmati con nome sicuro devono
specificare una chiave pubblica nelle relative dichiarazioni InternalsVisibleTo.
Il nome dell'assembly passato al InternalsVisibleToAttribute costruttore dell'attributo identifica un assembly con
nome sicuro, ma non include un PublicKey attributo.
ID errore: BC31535
Vedi anche
AssemblyName
Assembly Friend
BC42105: la funzione ' <procedurename> ' non
restituisce un valore in tutti i percorsi del codice
05/03/2021 • 2 minutes to read • Edit Online
La funzione ' <procedurename> ' non restituisce un valore in tutti i percorsi del codice. Manca un'istruzione '
Return '?
Una Function routine ha almeno un possibile percorso nel codice che non restituisce un valore.
È possibile restituire un valore da una Function routine in uno dei modi seguenti:
Includere il valore in un' istruzione return.
Assegnare il valore al Function nome della stored procedure, quindi eseguire un' Exit Function
istruzione.
Assegnare il valore al Function nome della stored procedure, quindi eseguire l' End Function istruzione.
Se il controllo passa a Exit Function o End Function e non è stato assegnato alcun valore al nome della stored
procedure, la stored procedure restituisce il valore predefinito del tipo di dati restituito. Per ulteriori
informazioni, vedere "Behavior" nell' istruzione Function.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42105
Vedi anche
Routine Function
Istruzione Function
Compilazione (pagina), Creazione progetti (Visual Basic)
BC30957: la valutazione della funzione è disabilitata
perché si è verificato il timeout di una valutazione di
funzione precedente
05/03/2021 • 2 minutes to read • Edit Online
Valutazione della funzione disabilitata a causa del timeout di una valutazione di funzione precedente. Per
riabilitare la valutazione della funzione, eseguire di nuovo l'istruzione o riavviare il debug.
Nel debugger di Visual Studio un'espressione specifica una chiamata di routine, ma si è verificato il timeout di
un'altra valutazione.
Le possibili cause di una chiamata di routine a timeout includono un ciclo infinito o infinito. Per ulteriori
informazioni, vedere per... Istruzione successiva.
Un caso speciale di un ciclo infinito è la ricorsione. Per ulteriori informazioni, vedere procedure ricorsive.
ID errore: BC30957
Vedi anche
Debug in Visual Studio
Spostarsi nel codice con il Debugger
BC32124: i parametri generici usati come tipi di
parametro facoltativi devono essere vincolati alla
classe
05/03/2021 • 2 minutes to read • Edit Online
Una routine viene dichiarata con un parametro facoltativo che utilizza un parametro di tipo che non è vincolato
come tipo di riferimento.
È sempre necessario specificare un valore predefinito per ogni parametro facoltativo. Se il parametro è di un
tipo di riferimento, il valore facoltativo deve essere Nothing , che è un valore valido per qualsiasi tipo di
riferimento. Tuttavia, se il parametro è di un tipo di valore, tale tipo deve essere un tipo di dati Elementary
predefinito da Visual Basic. Questo perché un tipo di valore composito, ad esempio una struttura definita
dall'utente, non ha un valore predefinito valido.
Quando si usa un parametro di tipo per un parametro facoltativo, è necessario garantire che sia di un tipo di
riferimento per evitare la possibilità di un tipo di valore senza valore predefinito valido. Ciò significa che è
necessario vincolare il parametro di tipo con la Class parola chiave o con il nome di una classe specifica.
ID errore: BC32124
Vedi anche
Generic Types in Visual Basic
Type List
Istruzione Class
Parametri facoltativi
Strutture
Nothing
BC31103: la funzione di accesso ' Get ' della
proprietà' <propertyname> ' non è accessibile
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione tenta di recuperare il valore di una proprietà quando non ha accesso alla routine della proprietà
Get .
Se l' istruzione Get è contrassegnata con un livello di accesso più restrittivo rispetto alla relativa istruzione
Property, un tentativo di leggere il valore della proprietà potrebbe non riuscire nei casi seguenti:
L' Get istruzione è contrassegnata come privata e il codice chiamante è all'esterno della classe o della
struttura in cui è definita la proprietà.
L' Get istruzione è contrassegnata come protetta e il codice chiamante non si trova nella classe o nella
struttura in cui è definita la proprietà, né in una classe derivata.
L' Get istruzione è contrassegnata come Friend e il codice chiamante non si trova nello stesso assembly
in cui è definita la proprietà.
ID errore: BC31103
Vedi anche
Routine Property
Procedura: dichiarare una proprietà con livelli di accesso misti
BC30506: la clausola Handles richiede una variabile
WithEvents definita nel tipo che lo contiene o in
uno dei relativi tipi di base
05/03/2021 • 2 minutes to read • Edit Online
Non è stata fornita una WithEvents variabile nella Handles clausola. La Handles parola chiave alla fine di una
dichiarazione di routine fa in modo che gestisca gli eventi generati da una variabile oggetto dichiarata con la
WithEvents parola chiave.
ID errore: BC30506
Esempio
Nell'esempio seguente Visual Basic genera un errore del compilatore BC30506 perché la parola chiave
WithEvents non viene utilizzata nella definizione dell' System.Timers.Timer istanza.
Imports System.Timers
Module Module1
Private _timer1 As New Timer() With {.Interval = 1000, .Enabled = True}
Sub Main()
Console.WriteLine("Press any key to start the timer...")
Console.ReadKey()
_timer1.Start()
Console.ReadKey()
End Sub
L'esempio seguente viene compilato correttamente perché la _timer1 variabile è definita con la WithEvents
parola chiave:
Imports System.Timers
Module Module1
Private WithEvents _timer1 As New Timer() With {.Interval = 1000}
Sub Main()
Console.WriteLine("Press any key to start the timer...")
Console.ReadKey()
_timer1.Start()
Console.ReadKey()
End Sub
End Module
Vedi anche
Selettori
BC30203: previsto identificatore
05/03/2021 • 2 minutes to read • Edit Online
Un elemento di programmazione che non è un nome di elemento dichiarato riconoscibile si verifica dove il
contesto richiede un nome di elemento. Una delle possibili cause è che un attributo è stato specificato in un
punto diverso dall'inizio dell'istruzione.
ID errore: BC30203
Vedi anche
Declared Element Names
Panoramica degli attributi
BC30033: identificatore troppo lungo
05/03/2021 • 2 minutes to read • Edit Online
Il nome, o identificatore, di ogni elemento di programmazione è limitato a 1023 caratteri. Inoltre, un nome
completo non può superare i 1023 caratteri. Ciò significa che l'intera stringa dell'identificatore (
<namespace>.<...>.<namespace>.<class>.<element> ) non può contenere più di 1023 caratteri, inclusi i caratteri
dell'operatore di accesso ai membri ( . ).
ID errore: BC30033
Vedi anche
Declared Element Names
BC30996: previsto inizializzatore
05/03/2021 • 2 minutes to read • Edit Online
Si è provato a dichiarare un'istanza di una classe usando un inizializzatore di oggetto in cui l'elenco di
inizializzazione è vuoto, come illustrato nell'esempio seguente.
' Not valid.
È necessario inizializzare almeno un campo o una proprietà nell'elenco di inizializzatori, come illustrato
nell'esempio seguente.
Dim aStudent As New Student With {.year = "Senior"}
ID errore: BC30996
Vedi anche
Inizializzatori di oggetto: tipi denominati e tipi anonimi
Procedura: dichiarare un oggetto utilizzando un inizializzatore di oggetto
Input oltre la fine del file
05/03/2021 • 2 minutes to read • Edit Online
Un' Input istruzione sta leggendo da un file vuoto o da un file in cui vengono utilizzati tutti i dati oppure è stata
utilizzata la EOF funzione con un file aperto per l'accesso binario.
Vedere anche
Input
EOF
Seek
Loc
Si è verificato un errore interno nella <location>
05/03/2021 • 2 minutes to read • Edit Online
Si è verificato un errore interno. La riga in cui si è verificata è contenuta nel messaggio di errore.
Vedi anche
Nozioni di base sul debugger
BC41999: conversione implicita da' <typename1> '
a' <typename2> ' durante la copia del valore del
parametro ' ByRef '' <parametername> '
nell'argomento corrispondente.
05/03/2021 • 2 minutes to read • Edit Online
Una routine viene chiamata con un argomento ByRef di un tipo diverso rispetto a quello del parametro
corrispondente.
Se si passa un argomento ByRef , Visual Basic talvolta copia il valore dell'argomento in una variabile locale
nella procedura anziché passare un riferimento. In tal caso, quando la procedura viene restituita, Visual Basic
necessario copiare nuovamente il valore della variabile locale nell'argomento nel codice chiamante.
Se un valore dell'argomento ByRef viene copiato nella routine e l'argomento e il parametro sono dello stesso
tipo, non è necessaria alcuna conversione. Tuttavia, se i tipi sono diversi, Visual Basic necessario eseguire la
conversione in entrambe le direzioni. Poiché non è possibile usare CType o una delle altre parole chiave di
conversione in un argomento o parametro di routine, tale conversione è sempre implicita.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC41999
Vedi anche
Procedure
Parametri e argomenti delle routine
Passaggio di argomenti per valore e per riferimento
Conversioni implicite ed esplicite
BC30020:' is ' richiede operandi con tipi di
riferimento, ma questo operando ha il tipo di valore
' <typename> '
05/03/2021 • 2 minutes to read • Edit Online
L' Is operatore di confronto determina se due variabili oggetto fanno riferimento alla stessa istanza. Questo
confronto non è definito per i tipi di valore.
ID errore: BC30020
Vedi anche
Operatore Is
Operatore Like
Operatori di confronto
BC32128: l'operando ' non ' del tipo ' typename '
può essere confrontato solo con ' Nothing ' perché'
typename ' è un tipo Nullable
05/03/2021 • 2 minutes to read • Edit Online
Una variabile dichiarata come tipo di valore Nullable è stata confrontata con un'espressione diversa da quella
Nothing usata dall' IsNot operatore.
ID errore: BC32128
End If
End If
Vedi anche
Tipi di valore Nullable
Operatore IsNot
BC30801: le etichette che sono numeri devono
essere seguite dai due punti
05/03/2021 • 2 minutes to read • Edit Online
I numeri di riga seguono le stesse regole di altri tipi di etichette e devono contenere i due punti.
ID errore: BC30801
400: X += 1
Vedi anche
Istruzione GoTo
BC42326: l'espressione lambda non verrà rimossa
da questo gestore eventi
05/03/2021 • 2 minutes to read • Edit Online
L'espressione lambda non verrà rimossa da questo gestore eventi. Assegnare l'espressione lambda a una
variabile e usare la variabile per aggiungere e rimuovere l'evento.
Quando le espressioni lambda vengono usate con i gestori eventi, è possibile che non venga visualizzato il
comportamento previsto. Il compilatore genera un nuovo metodo per ogni definizione di espressione lambda,
anche se sono identici. Viene pertanto visualizzato il codice seguente False .
Module Module1
Sub Main()
Dim fun1 As ChangeInteger = Function(p As Integer) p + 1
Dim fun2 As ChangeInteger = Function(p As Integer) p + 1
Console.WriteLine(fun1 = fun2)
End Sub
End Module
Quando le espressioni lambda vengono usate con i gestori eventi, è possibile che si verifichino risultati
imprevisti. Nell'esempio seguente l'espressione lambda aggiunta da AddHandler non viene rimossa dall'
RemoveHandler istruzione.
Module Module1
Sub Main()
End Sub
End Module
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42326
Sub Main()
' Use the variable again when you want to remove the listener.
RemoveHandler ProcessInteger, PrintHandler
End Sub
End Module
Vedi anche
Espressioni lambda
Conversione di tipo relaxed del delegato
Eventi
BC36635: le espressioni lambda non sono valide
nella prima espressione di un'istruzione ' Select Case
'
05/03/2021 • 2 minutes to read • Edit Online
Non è possibile usare un'espressione lambda per l'espressione di test in un' Select Case istruzione. Le
definizioni delle espressioni lambda restituiscono funzioni e l'espressione di test di un' Select Case istruzione
deve essere un tipo di dati elementare.
Il codice seguente causa questo errore:
ID errore: BC36635
Vedi anche
Espressioni lambda
Istruzione If...Then...Else
Istruzione Select...Case
BC42017: risoluzione con associazione tardiva;
potrebbero verificarsi errori di runtime
05/03/2021 • 2 minutes to read • Edit Online
Un oggetto viene assegnato a una variabile dichiarata come tipo di dati Object.
Quando si dichiara una variabile come Object , il compilatore deve eseguire un' associazione tardiva, causando
operazioni aggiuntive in fase di esecuzione. Espone inoltre l'applicazione a possibili errori di runtime. Se ad
esempio si assegna un oggetto Form alla Object variabile e quindi si tenta di accedere alla
XmlDocument.NameTable proprietà, il runtime genera un'eccezione MemberAccessException perché la Form
classe non espone una NameTable Proprietà.
Se si dichiara che la variabile è di un tipo specifico, il compilatore può eseguire un' associazione anticipata in
fase di compilazione. Ciò comporta un miglioramento delle prestazioni, l'accesso controllato ai membri del tipo
specifico e una migliore leggibilità del codice.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42017
Vedi anche
Associazione anticipata e tardiva
Dichiarazione di variabili oggetto
BC30933: non è possibile applicare la risoluzione
dell'overload con associazione tardiva a'
<procedurename> ' perché l'istanza di accesso è un
tipo di interfaccia
05/03/2021 • 3 minutes to read • Edit Online
Il compilatore sta provando a risolvere un riferimento a una proprietà o una routine di overload, ma il
riferimento non riesce perché un argomento è di tipo Object e l'oggetto di riferimento ha il tipo di dati di
un'interfaccia. L' Object argomento impone al compilatore di risolvere il riferimento come ad associazione
tardiva.
In queste circostanze, il compilatore risolve l'overload tramite la classe di implementazione invece che tramite
l'interfaccia sottostante. Se la classe Rinomina una delle versioni di overload, il compilatore non considera tale
versione come un overload perché il nome è diverso. Ciò comporta a sua volta che il compilatore ignori la
versione rinominata quando potrebbe essere stata la scelta corretta per risolvere il riferimento.
ID errore: BC30933
Esempio
Nell'esempio seguente viene illustrata una chiamata a una routine di overload Sub che causa questo errore in
fase di compilazione.
Module m1
Interface i1
Sub s1(ByVal p1 As Integer)
Sub s1(ByVal p1 As Double)
End Interface
Class c1
Implements i1
Public Overloads Sub s1(ByVal p1 As Integer) Implements i1.s1
End Sub
Public Overloads Sub s2(ByVal p1 As Double) Implements i1.s1
End Sub
End Class
Sub Main()
Dim refer As i1 = New c1
Dim o1 As Object = 3.1415
' The following reference is INVALID and causes a compiler error.
refer.s1(o1)
End Sub
End Module
Nell'esempio precedente, se il compilatore consentiva la chiamata a s1 come scritto, la risoluzione verrebbe
eseguita tramite la classe c1 anziché l'interfaccia i1 . Ciò significa che il compilatore non prende in
considerazione s2 perché il nome è diverso in c1 , anche se è la scelta corretta in base a quanto definito da
i1 .
È possibile correggere l'errore modificando la chiamata a una delle righe di codice seguenti:
refer.s1(CType(o1, Integer))
refer.s1(CType(o1, Double))
Ognuna delle righe precedenti di codice esegue esplicitamente il cast della Object variabile o1 a uno dei tipi di
parametro definiti per gli overload.
Vedi anche
Overload della routine
Risoluzione dell'overload
CType Function
BC30157: il carattere ' .' o '!' principale può trovarsi
solo all'interno di un'istruzione ' with '
05/03/2021 • 2 minutes to read • Edit Online
Un punto (.) o punto esclamativo (!) che non si trova all'interno di un With blocco si verifica senza
un'espressione a sinistra. L'accesso ai membri ( . ) e l'accesso ai membri del dizionario ( ! ) richiedono
un'espressione che specifica l'elemento che contiene il membro. Deve essere visualizzato immediatamente a
sinistra della funzione di accesso o come destinazione di un With blocco contenente l'accesso ai membri.
ID errore: BC30157
Vedi anche
Caratteri speciali nel codice
Istruzione With...End With
BC30494: la riga è troppo lungo
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
BC30830: le istruzioni ' line ' non sono più
supportate
05/03/2021 • 2 minutes to read • Edit Online
Le istruzioni line non sono più supportate. La funzionalità di I/O di file è disponibile come
Microsoft.VisualBasic.FileSystem.LineInput e la funzionalità grafica è disponibile come
System.Drawing.Graphics.DrawLine .
ID errore: BC30830
Vedi anche
System.IO
System.Drawing
Accesso ai file con Visual Basic
BC36563: il metodo non dispone di una firma
compatibile con il delegato
05/03/2021 • 2 minutes to read • Edit Online
Esiste un'incompatibilità tra le firme del metodo e il delegato che si sta tentando di usare. L'istruzione Delegate
definisce i tipi di parametro e i tipi restituiti di una classe delegata. Per creare un'istanza di questo tipo di
delegato è possibile utilizzare qualsiasi routine con parametri corrispondenti di tipi compatibili e tipi restituiti.
ID errore: BC36563
Vedi anche
Operatore AddressOf
Istruzione Delegate
Risoluzione dell'overload
Generic Types in Visual Basic
BC32126: non è possibile usare i metodi di ' System.
Nullable (Of T)' come operandi dell'operatore '
AddressOf '
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione usa l' AddressOf operatore con un operando che rappresenta una routine della Nullable<T>
struttura.
ID errore: BC32126
Module Module1
Sub Main()
Dim nullInstance As New Nullable(Of Integer)(1)
Console.WriteLine(del.Invoke())
End Sub
Module le istruzioni devono essere visualizzate nella parte superiore del file di origine immediatamente dopo
Option Imports le istruzioni and, gli attributi globali e le dichiarazioni dello spazio dei nomi, ma prima di tutte
le altre dichiarazioni.
ID errore: BC30617
Vedi anche
Istruzione Module
BC40031: il nome <membername> non è conforme
a CLS
05/03/2021 • 2 minutes to read • Edit Online
Un assembly è contrassegnato come <CLSCompliant(True)> ma espone un membro con un nome che inizia con
un carattere di sottolineatura ( _ ).
Un elemento di programmazione può contenere uno o più caratteri di sottolineatura, ma non deve iniziare con
un carattere di sottolineatura, ma deve essere conforme a CLS ( Language Independence and Language-
Independent Components ). Vedere Declared Element Names.
Quando CLSCompliantAttribute viene applicato a un elemento di programmazione, il parametro isCompliant
dell'attributo viene impostato su True o False per indicare la conformità o la non conformità. L'impostazione
predefinita per questo parametro non è disponibile, quindi è necessario specificare un valore.
Se a un elemento non viene applicato CLSCompliantAttribute , l'elemento non sarà considerato conforme.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40031
Vedi anche
Declared Element Names
Convenzioni di denominazione di Visual Basic
BC30451: il nome ' <name> ' non è dichiarato
05/03/2021 • 3 minutes to read • Edit Online
Imports Microsoft.VisualBasic.CompilerServices
Per risolvere questo errore, aggiungere l' <VBRuntime>Default</VBRuntime> elemento alla sezione Projects
<PropertyGroup> , come mostrato nel file di progetto Visual Basic seguente.
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<Reference Include="Microsoft.VisualBasic" />
</ItemGroup>
<PropertyGroup>
<VBRuntime>Default</VBRuntime>
<OutputType>Exe</OutputType>
<RootNamespace>vbruntime</RootNamespace>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
</Project>
Vedi anche
Riepilogo delle dichiarazioni e delle costanti
Convenzioni di denominazione di Visual Basic
Declared Element Names
References to Declared Elements
BC40039: <namespacename> il nome nello spazio
dei nomi radice <fullnamespacename> non è
conforme a CLS
05/03/2021 • 2 minutes to read • Edit Online
Un assembly è contrassegnato come <CLSCompliant(True)> , ma un elemento del nome dello spazio dei nomi
radice inizia con un carattere di sottolineatura ( _ ).
Un elemento di programmazione può contenere uno o più caratteri di sottolineatura, ma non deve iniziare con
un carattere di sottolineatura, ma deve essere conforme a CLS ( Language Independence and Language-
Independent Components ). Vedere Declared Element Names.
Quando CLSCompliantAttribute viene applicato a un elemento di programmazione, il parametro isCompliant
dell'attributo viene impostato su True o False per indicare la conformità o la non conformità. L'impostazione
predefinita per questo parametro non è disponibile, quindi è necessario specificare un valore.
Se a un elemento non viene applicato CLSCompliantAttribute , l'elemento non sarà considerato conforme.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40039
Vedi anche
Istruzione Namespace
Spazi dei nomi in Visual Basic
-rootnamespace
Application Page, Project Designer (Visual Basic)
Declared Element Names
Convenzioni di denominazione di Visual Basic
BC40056: lo spazio dei nomi o il tipo specificato
nelle importazioni ' <qualifiedelementname> ' non
contiene alcun membro pubblico o non è stato
trovato
05/03/2021 • 2 minutes to read • Edit Online
Lo spazio dei nomi o il tipo specificato nelle importazioni ' <qualifiedelementname> ' non contiene alcun
membro pubblico o non è stato trovato. Verificare che lo spazio dei nomi o il tipo sia definito e contenga almeno
un membro pubblico. Verificare che il nome dell'alias non contenga altri alias.
Un' Imports istruzione specifica un elemento contenitore che non può essere trovato o non definisce Public
membri.
Un elemento contenitore può essere uno spazio dei nomi, una classe, una struttura, un modulo, un'interfaccia o
un'enumerazione. L'elemento contenitore contiene membri, ad esempio variabili, procedure o altri elementi
contenenti.
Lo scopo dell'importazione è consentire al codice di accedere ai membri dello spazio dei nomi o ai tipi senza
doverli qualificare. Il progetto potrebbe anche dover aggiungere un riferimento allo spazio dei nomi o al tipo.
Per ulteriori informazioni, vedere "importazione di elementi contenitore" in riferimenti a elementi dichiarati.
Se il compilatore non riesce a trovare l'elemento contenitore specificato, non può risolvere i riferimenti che lo
usano. Se trova l'elemento, ma l'elemento non espone Public membri, nessun riferimento può avere esito
positivo. In entrambi i casi non è significativo importare l'elemento.
Tenere presente che se si importa un elemento contenitore e si assegna un alias di importazione, non è possibile
usare tale alias di importazione per importare un altro elemento. Il codice seguente genera un errore del
compilatore.
ID errore: BC40056
Vedi anche
Istruzione Imports (tipo e spazio dei nomi .NET)
Istruzione Namespace
Pubblica
Spazi dei nomi in Visual Basic
References to Declared Elements
BC40057: lo spazio dei nomi o il tipo specificato
nelle importazioni a livello di progetto '
<qualifiedelementname> ' non contiene alcun
membro pubblico o non è stato trovato
05/03/2021 • 2 minutes to read • Edit Online
Lo spazio dei nomi o il tipo specificato nelle importazioni a livello di progetto ' <qualifiedelementname> ' non
contiene alcun membro pubblico o non è stato trovato. Verificare che lo spazio dei nomi o il tipo sia definito e
contenga almeno un membro pubblico. Verificare che il nome dell'alias non contenga altri alias.
Una proprietà import di un progetto specifica un elemento contenitore che non può essere trovato o non
definisce Public membri.
Un elemento contenitore può essere uno spazio dei nomi, una classe, una struttura, un modulo, un'interfaccia o
un'enumerazione. L'elemento contenitore contiene membri, ad esempio variabili, procedure o altri elementi
contenenti.
Lo scopo dell'importazione è consentire al codice di accedere ai membri dello spazio dei nomi o ai tipi senza
doverli qualificare. Il progetto potrebbe anche dover aggiungere un riferimento allo spazio dei nomi o al tipo.
Per ulteriori informazioni, vedere "importazione di elementi contenitore" in riferimenti a elementi dichiarati.
Se il compilatore non riesce a trovare l'elemento contenitore specificato, non può risolvere i riferimenti che lo
usano. Se trova l'elemento, ma l'elemento non espone Public membri, nessun riferimento può avere esito
positivo. In entrambi i casi non è significativo importare l'elemento.
Per specificare gli elementi da importare, è possibile utilizzare Progettazione progetti . Utilizzare la sezione
spazi dei nomi impor tati della pagina riferimenti . È possibile ottenere la creazione di progetti facendo
doppio clic sull'icona del progetto in Esplora soluzioni .
ID errore: BC40057
Vedi anche
Riferimenti (pagina), Creazione progetti (Visual Basic)
Gestione delle proprietà di progetti e soluzioni
Pubblica
Spazi dei nomi in Visual Basic
References to Declared Elements
Necessario indice della matrice di proprietà
05/03/2021 • 2 minutes to read • Edit Online
Questo valore della proprietà è costituito da una matrice, non da un unico valore. Non è stato specificato alcun
indice per la matrice di proprietà a cui si sta tentando di accedere.
Vedi anche
Tipi di errore
Opzioni per commenti e suggerimenti in Visual Studio
BC36532: la funzione annidata non ha una firma
compatibile con il delegato ' <delegatename> '
05/03/2021 • 2 minutes to read • Edit Online
Un'espressione lambda è stata assegnata a un delegato con una firma incompatibile. Nel codice seguente, ad
esempio, il delegato Del ha due parametri Integer.
L'errore viene generato se un'espressione lambda con un argomento viene dichiarata come tipo Del :
ID errore: BC36532
Vedi anche
Conversione di tipo relaxed del delegato
Espressioni lambda
BC30737: non è stato trovato alcun metodo ' Main '
accessibile con una firma appropriata in ' <name> '
05/03/2021 • 2 minutes to read • Edit Online
Per le applicazioni da riga di comando deve essere Sub Main definito. Main deve essere dichiarato come
Public Shared se fosse definito in una classe o come se fosse Public definito in un modulo.
ID errore: BC30737
Vedi anche
Struttura di un programma Visual Basic
Procedure
BC40033: non conforme <membername> a CLS
non consentito in un'interfaccia conforme a CLS
05/03/2021 • 2 minutes to read • Edit Online
Una proprietà, una routine o un evento in un'interfaccia è contrassegnato come <CLSCompliant(True)> quando
l'interfaccia stessa è contrassegnata come <CLSCompliant(False)> o non è contrassegnata.
Affinché un'interfaccia sia conforme al linguaggio di indipendenza e Language-Independent componenti (CLS),
tutti i relativi membri devono essere conformi.
Quando CLSCompliantAttribute viene applicato a un elemento di programmazione, il parametro isCompliant
dell'attributo viene impostato su True o False per indicare la conformità o la non conformità. L'impostazione
predefinita per questo parametro non è disponibile, quindi è necessario specificare un valore.
Se a un elemento non viene applicato CLSCompliantAttribute , l'elemento non sarà considerato conforme.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40033
Vedi anche
Istruzione Interface
BC36629: l'inferenza del tipo nullable non è
supportata in questo contesto
05/03/2021 • 2 minutes to read • Edit Online
Dim a? As Integer
Dim b As Integer?
Tuttavia, non è possibile usare la dichiarazione nullable in combinazione con l'inferenza del tipo. Nell'esempio
seguente viene generato questo errore.
ID errore: BC36629
Vedi anche
Tipi di valore Nullable
Inferenza del tipo di variabile locale
BC30106: il numero di indici supera il numero di
dimensioni della matrice indicizzata
05/03/2021 • 2 minutes to read • Edit Online
Il numero di indici usati per accedere a un elemento di matrice deve essere esattamente uguale all'ordine di
priorità della matrice, vale a dire al numero di dimensioni dichiarate per la matrice.
ID errore: BC30106
Vedere anche
Matrici
L'oggetto o la classe non supporta il set di eventi
05/03/2021 • 2 minutes to read • Edit Online
Si è provato a usare una WithEvents variabile con un componente che non può funzionare come origine evento
per il set di eventi specificato. Si desidera, ad esempio, affondare gli eventi di un oggetto, quindi creare un altro
oggetto che Implements il primo oggetto. Sebbene si possa pensare che è possibile affondare gli eventi
dall'oggetto implementato, questo non è sempre il caso. Implements implementa solo un'interfaccia per metodi
e proprietà. WithEvents non è supportato per private UserControls , perché le informazioni sul tipo necessarie
per generare l'oggetto ObjectEvent non sono disponibili in fase di esecuzione.
Vedi anche
WithEvents
Istruzione Implements
Oggetto necessario (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
I riferimenti a proprietà e metodi richiedono spesso un qualificatore di oggetto esplicito. Questo è un caso di
questo tipo.
Vedi anche
Tipi di errore
Variabile oggetto o variabile del blocco With non
impostata
05/03/2021 • 4 minutes to read • Edit Online
Viene fatto riferimento a una variabile oggetto non valida. L'errore può essere determinato da numerose cause:
Una variabile è stata dichiarata senza specificare un tipo. Se una variabile viene dichiarata senza
specificare un tipo, il valore predefinito è Type Object .
Ad esempio, una variabile dichiarata con Dim x sarebbe di tipo Object; una variabile dichiarata con
Dim x As String sarebbe di tipo String .
TIP
L' Option Strict istruzione impedisce la tipizzazione implicita che restituisce un Object tipo. Se si omette il
tipo, si verificherà un errore in fase di compilazione. Vedere istruzione Option Strict.
NOTE
Nelle versioni precedenti di Visual Basic o VBA, questo errore è stato attivato anche assegnando un valore a una variabile
senza usare la Set parola chiave ( x = "name" anziché Set x = "name" ). La Set parola chiave non è più valida in
Visual Basic .NET.
Option Strict On
Quando si esegue il progetto, nel Elenco errori viene visualizzato un errore del compilatore per
qualsiasi variabile specificata senza un tipo.
2. Se non si vuole abilitare Option Strict , cercare nel codice qualsiasi variabile specificata senza un tipo (
Dim x anziché Dim x As String ) e aggiungere il tipo desiderato alla dichiarazione.
3. Assicurarsi che non si faccia riferimento a una variabile oggetto che è stata impostata su Nothing .
Cercare il codice per la parola chiave Nothing e modificare il codice in modo che l'oggetto non sia
impostato su fino a quando non viene Nothing fatto riferimento a esso.
4. Verificare che le variabili di matrice siano dimensionate prima di accedervi. È possibile assegnare una
dimensione alla prima creazione della matrice ( Dim x(5) As String anziché Dim x() As String ) oppure
utilizzare la ReDim parola chiave per impostare le dimensioni della matrice prima di accedervi per la
prima volta.
5. Verificare che il With blocco venga inizializzato eseguendo il With punto di ingresso dell'istruzione.
Vedi anche
Dichiarazione di variabili oggetto
Istruzione ReDim
Istruzione With...End With
BC33000: la dichiarazione dell'operatore deve
essere una delle seguenti: +,-, *, , /, ^, & , like, mod,
and, or, XOR, not, <<, >>...
05/03/2021 • 2 minutes to read • Edit Online
È possibile dichiarare solo un operatore idoneo per l'overload. Nella tabella seguente sono elencati gli operatori
che è possibile dichiarare.
T IP O O P ERATO RI
Si noti che l'operatore = nell'elenco binario è l'operatore di confronto, non l'operatore di assegnazione.
ID errore: BC33000
Vedi anche
Operator Statement
Routine di operatore
Procedura: definire un operatore
Procedura: Definire un operatore di conversione
Istruzione Function
BC30202: previsto ' optional '
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Parametri facoltativi
BC30812: i parametri facoltativi devono specificare
un valore predefinito
05/03/2021 • 2 minutes to read • Edit Online
I parametri facoltativi devono fornire valori predefiniti che possono essere usati se non viene fornito alcun
parametro da una routine chiamante.
ID errore: BC30812
Esempio
L'esempio seguente genera l'BC30812:
Vedi anche
Facoltativo
Ordinale non valido
05/03/2021 • 2 minutes to read • Edit Online
La chiamata a una libreria a collegamento dinamico (DLL) indica di usare un numero anziché un nome di
routine, usando la #num sintassi. Questo errore presenta le possibili cause seguenti:
Tentativo di conversione dell' #num espressione in un ordinale non riuscito.
Il #num parametro specificato non specifica alcuna funzione nella dll.
Una libreria dei tipi ha una dichiarazione non valida che comporta l'uso interno di un numero ordinale
non valido.
Vedi anche
Declare Statement
BC2004: memoria insufficiente
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
Spazio dello stack insufficiente (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Lo stack è un'area di lavoro di memoria che aumenta e compatta dinamicamente con le esigenze del
programma in esecuzione. Sono stati superati i limiti.
Vedi anche
Finestra Memoria
Spazio di stringa insufficiente (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Con Visual Basic, è possibile usare stringhe di grandi dimensioni. Tuttavia, i requisiti di altri programmi e il modo
in cui si lavora con le stringhe possono comunque causare questo errore.
Vedi anche
Tipi di errore
Riepilogo della modifica delle stringhe
BC30036: overflow (errore Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Un valore letterale rappresenta un valore che non rientra nei limiti del tipo di dati a cui viene assegnato.
ID errore: BC30036
Vedi anche
Tipi di dati
Overflow (errore di run-time Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Un overflow viene restituito quando si tenta un'assegnazione che supera i limiti della destinazione
dell'assegnazione.
Vedi anche
Int32.MaxValue
Double.MaxValue
Tipi di dati
Tipi di errore
Impossibile trovare il percorso
05/03/2021 • 2 minutes to read • Edit Online
Durante un'operazione di accesso ai file o di accesso al disco, il sistema operativo non è stato in grado di trovare
il percorso specificato. Il percorso di un file include la specifica dell'unità più le directory e le sottodirectory che
devono essere attraversate per individuare il file. Il percorso può essere relativo o assoluto.
Vedi anche
Tipi di errore
Errore di accesso al percorso/file
05/03/2021 • 2 minutes to read • Edit Online
Durante un'operazione di accesso ai file o di accesso al disco, il sistema operativo non è in grado di effettuare
una connessione tra il percorso e il nome del file.
Vedi anche
Tipi di errore
Autorizzazione negata (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
È stato effettuato un tentativo di scrittura in un disco protetto da scrittura o di accesso a un file bloccato.
Vedi anche
Tipi di errore
Chiamata di routine o argomento non valido (Visual
Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
BC42107: la proprietà' <propertyname> ' non
restituisce un valore in tutti i percorsi del codice
05/03/2021 • 2 minutes to read • Edit Online
La proprietà' <propertyname> ' non restituisce un valore per tutti i percorsi del codice. In fase di esecuzione,
quando viene usato il risultato, potrebbe verificarsi un'eccezione dovuta a un riferimento Null.
Una routine di proprietà Get ha almeno un possibile percorso nel codice che non restituisce un valore.
È possibile restituire un valore da una routine di proprietà Get in uno dei modi seguenti:
Assegnare il valore al nome della proprietà, quindi eseguire un' Exit Property istruzione.
Assegnare il valore al nome della proprietà, quindi eseguire l' End Get istruzione.
Includere il valore in un' istruzione return.
Se il controllo passa a Exit Property o End Get e non è stato assegnato alcun valore al nome della proprietà, la
Get stored procedure restituisce il valore predefinito del tipo di dati della proprietà. Per ulteriori informazioni,
vedere "Behavior" nell' istruzione Function.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42107
Vedi anche
Routine Property
Property Statement
Istruzione Get
Indice della matrice di proprietà non valido
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Matrici
La routine Property Let non è stata definita e la
routine Property Get non ha restituito un oggetto
05/03/2021 • 2 minutes to read • Edit Online
Alcune proprietà, metodi e operazioni possono essere applicati solo agli Collection oggetti. È stata specificata
un'operazione o una proprietà che è esclusiva per le raccolte, ma l'oggetto non è una raccolta.
2. Esaminare il Add metodo usato per aggiungere l'oggetto alla raccolta per assicurarsi che la sintassi sia
corretta e che gli identificatori siano stati digitati correttamente.
Vedere anche
Collection
Proprietà non trovata
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
Proprietà o metodo non trovato
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
BC36633: la variabile <variable> di intervallo
nasconde una variabile in un blocco di inclusione,
una variabile di intervallo definita in precedenza o
una variabile dichiarata in modo implicito in
un'espressione di query
05/03/2021 • 2 minutes to read • Edit Online
Un nome di variabile di intervallo specificato in una Select From clausola,, Aggregate o Let Duplica il nome
di una variabile di intervallo già specificata in precedenza nella query o il nome di una variabile dichiarata in
modo implicito dalla query, ad esempio un nome di campo o il nome di una funzione di aggregazione.
ID errore: BC36633
Vedi anche
Introduzione a LINQ in Visual Basic
Clausola from
Clausola Let
Aggregate Clause
Clausola SELECT
BC36599: il nome della variabile di intervallo può
essere dedotto solo da un nome semplice o
completo senza argomenti
05/03/2021 • 2 minutes to read • Edit Online
Un elemento di programmazione che accetta uno o più argomenti è incluso in una query LINQ. Il compilatore
non è in grado di dedurre una variabile di intervallo da tale elemento di programmazione.
ID errore: BC36599
Vedi anche
Introduzione a LINQ in Visual Basic
Clausola SELECT
BC30969: è necessario un riferimento all'assembly '
<assemblyidentity> ' contenente <typename> il
tipo '', ma non è stato possibile trovare un
riferimento appropriato a causa dell'ambiguità tra i
progetti ' <projectname1> ' è <projectname2> '
05/03/2021 • 2 minutes to read • Edit Online
In un'espressione viene usato un tipo, ad esempio una classe, una struttura, un'interfaccia, un'enumerazione o
un delegato, definito all'esterno del progetto. Tuttavia, sono presenti riferimenti di progetto a più assembly che
definiscono quel tipo.
I progetti citati generano assembly con lo stesso nome. Pertanto, il compilatore non può determinare l'assembly
da usare per il tipo a cui si accede.
Per accedere a un tipo definito in un altro assembly, il compilatore Visual Basic deve avere un riferimento a tale
assembly. Deve trattarsi di un riferimento unico, non ambiguo, che non generi riferimenti circolari tra i progetti.
ID errore: BC30969
Vedi anche
Gestione dei riferimenti in un progetto
References to Declared Elements
Gestione delle proprietà di progetti e soluzioni
Risoluzione dei problemi relativi ai riferimenti interrotti
BC30007: è necessario un riferimento all'assembly '
<assemblyname> ' contenente la classe base '
<classname> '
05/03/2021 • 2 minutes to read • Edit Online
È necessario il riferimento all'assembly ' <assemblyname> ' contenente la classe base ' <classname> '.
Aggiungerne uno al progetto.
La classe è definita in una libreria a collegamento dinamico (DLL) o in un assembly a cui non si fa direttamente
riferimento nel progetto. Il compilatore Visual Basic richiede un riferimento per evitare ambiguità nel caso in cui
la classe sia definita in più di una DLL o di un assembly.
ID errore: BC30007
Vedi anche
Gestione dei riferimenti in un progetto
Risoluzione dei problemi relativi ai riferimenti interrotti
BC35000: l'operazione richiesta non è disponibile
perché la funzione '' della libreria di runtime
<function> non è definita.
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic sta tentando di effettuare una chiamata interna a una funzione nel runtime di Visual Basic
(Microsoft.VisualBasic.dll) non trovato.
ID errore: BC35000
Questo errore si verifica nei progetti di tipo SDK (progetti con un file con * estensione vbproj che inizia con la
riga <Project Sdk="Microsoft.NET.Sdk"> ). Per impostazione predefinita, solo un subset dell'assembly
Microsoft.VisualBasic.dll viene incorporato nell'assembly dell'applicazione e <function> non è incluso nel
subset.
<VBRuntime>Default</VBRuntime>
Vedi anche
-vbruntime ( opzione del compilatore)
Resume senza errore
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione è stata rilevata al di Resume fuori del codice di gestione degli errori oppure il codice ha saltato un
gestore errori anche se non si è verificato alcun errore.
Vedi anche
Istruzione Resume
Istruzione On Error
BC40027: il tipo restituito della funzione '
<procedurename> ' non è conforme a CLS
05/03/2021 • 3 minutes to read • Edit Online
Se si interagisce con gli oggetti COM o di automazione, tenere presente che alcuni tipi hanno larghezze di
dati diverse rispetto all'.NET Framework. Ad esempio, int è spesso a 16 bit in altri ambienti. Se si sta
restituendo un intero a 16 bit a tale componente, dichiararlo come Short anziché Integer nel codice
Visual Basic gestito.
BC31102: la funzione di accesso ' set ' della
proprietà' <propertyname> ' non è accessibile
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione tenta di archiviare il valore di una proprietà quando non ha accesso alla routine della proprietà
Set .
Se l' istruzione set è contrassegnata con un livello di accesso più restrittivo rispetto alla relativa istruzione
Property, un tentativo di impostare il valore della proprietà potrebbe non riuscire nei casi seguenti:
L' Set istruzione è contrassegnata come privata e il codice chiamante è all'esterno della classe o della
struttura in cui è definita la proprietà.
L' Set istruzione è contrassegnata come protetta e il codice chiamante non si trova nella classe o nella
struttura in cui è definita la proprietà, né in una classe derivata.
L' Set istruzione è contrassegnata come Friend e il codice chiamante non si trova nello stesso assembly
in cui è definita la proprietà.
ID errore: BC31102
Vedi anche
Routine Property
Procedura: dichiarare una proprietà con livelli di accesso misti
Impossibile eliminare alcune sottochiavi
05/03/2021 • 2 minutes to read • Edit Online
È stato effettuato un tentativo di eliminare una chiave del registro di sistema, ma l'operazione non è riuscita
perché alcune sottochiavi non possono essere eliminate. Questo è in genere dovuto alla mancanza di
autorizzazioni.
Vedere anche
Microsoft.VisualBasic.MyServices.RegistryProxy
DeleteSubKey
RegistryPermission
BC32005: l'istruzione non può terminare un blocco
all'esterno di un'istruzione ' If ' della riga
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione a riga singola If contiene diverse istruzioni separate da due punti (:), una delle quali è un' End
istruzione per un blocco di controllo all'esterno della riga singola If . Per le istruzioni a riga singola If non
viene utilizzata l' End If istruzione.
ID errore: BC32005
Vedi anche
Istruzione If...Then...Else
BC30001: istruzione non valida in uno spazio dei
nomi
05/03/2021 • 2 minutes to read • Edit Online
L'istruzione non può comparire al livello di uno spazio dei nomi. Le uniche dichiarazioni consentite a livello di
spazio dei nomi sono le dichiarazioni di moduli, interfacce, classi, delegati, enumerazioni e strutture.
ID errore: BC30001
Vedi anche
Ambito in Visual Basic
Spazi dei nomi in Visual Basic
BC30024: istruzione non valida all'interno di un
metodo/espressione lambda su più righe
05/03/2021 • 2 minutes to read • Edit Online
L'istruzione non è valida all'interno di una Sub Function Get routine Property,, o Set . È possibile inserire
alcune istruzioni a livello di modulo o di classe. Altri, ad esempio Option Strict , devono essere a livello di
spazio dei nomi e precedere tutte le altre dichiarazioni.
ID errore: BC30024
Vedi anche
Istruzione Sub
Istruzione Function
Istruzione Get
Istruzione set
BC30648: le costanti stringa devono terminare con
virgolette doppie
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Stringhe
BC30941: la struttura ' <structurename> ' deve
contenere almeno una variabile membro di istanza
o almeno una dichiarazione di evento di istanza
non contrassegnata come ' Custom '
05/03/2021 • 2 minutes to read • Edit Online
Una definizione di struttura non include variabili non condivise o eventi non personalizzati non condivisi.
Ogni struttura deve avere una variabile o un evento che si applica a ogni istanza specifica (non condivisa) invece
che a tutte le istanze collettivamente (condivise). Le costanti, le proprietà e le routine non condivisi non
soddisfano questo requisito. Inoltre, se non sono presenti variabili non condivise e un solo evento non
condiviso, l'evento non può essere un Custom evento.
ID errore: BC30941
Vedi anche
Strutture
Procedura: Dichiarare una struttura
Istruzione Structure
"" />
Vedi anche
Istruzione Sub
Routine Main in Visual Basic
Sub o Function non definita (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Per Sub poter Function essere chiamato, è necessario definire un oggetto o. Alcune cause possibili di questo
errore sono:
Ortografia del nome della procedura.
Tentativo di chiamare una routine da un altro progetto senza aggiungere esplicitamente un riferimento a
tale progetto nella finestra di dialogo riferimenti .
Specifica di una routine che non è visibile alla procedura chiamante.
Dichiarazione di una routine della libreria di collegamento dinamico (DLL) di Windows o di una routine di
risorsa di codice Macintosh che non si trova nella libreria o nella risorsa di codice specificata.
Vedi anche
Tipi di errore
Gestione dei riferimenti in un progetto
Istruzione Sub
Istruzione Function
Indice non incluso nell'intervallo (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Un indice di matrice non è valido perché non rientra nell'intervallo consentito. Il valore di indice più basso per
una dimensione è sempre 0 e il valore di indice più alto viene restituito dal GetUpperBound metodo per tale
dimensione.
Vedi anche
Array.GetUpperBound
Matrici
Impossibile completare l'operazione di lettura con
TextFieldParser. È stata superata la dimensione
massima del buffer
05/03/2021 • 2 minutes to read • Edit Online
Non è possibile completare l'operazione perché è stata superata la dimensione massima del buffer (10 milioni
byte).
Vedi anche
OpenTextFieldParser
TextFieldParser
Procedura: Leggere da file di testo con più formati
Analisi dei file di testo con l'oggetto TextFieldParser
BC42110: il tipo per la variabile ' <variablename> '
non verrà dedotto perché è associato a un campo
in un ambito di inclusione
05/03/2021 • 3 minutes to read • Edit Online
Il tipo per la variabile ' <variablename> ' non verrà dedotto perché è associato a un campo in un ambito di
inclusione. Modificare il nome di ' <variablename> ' o usare il nome completo (ad esempio,' me. VariableName '
o ' MyBase. VariableName ').
Una variabile di controllo loop nel codice ha lo stesso nome di un campo della classe o di un altro ambito di
inclusione. Poiché la variabile di controllo viene utilizzata senza una As clausola, viene associata al campo
nell'ambito di inclusione e il compilatore non crea una nuova variabile o ne deduce il tipo.
Nell'esempio seguente, Index la variabile di controllo nell' For istruzione è associata al Index campo nella
Customer classe. Il compilatore non crea una nuova variabile per la variabile di controllo Index o ne deduce il
tipo.
Class Customer
Sub Main()
End Sub
End Class
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42110
For I = 1 To 10
Chiarire che la variabile di controllo del ciclo viene associata al campo della classe anteponendo Me. il
nome della variabile.
For Me.Index = 1 To 10
Anziché basarsi sull'inferenza del tipo locale, usare una As clausola per specificare un tipo per la
variabile di controllo del ciclo.
Esempio
Il codice seguente illustra l'esempio precedente con la prima correzione sul posto.
Class Customer
Sub Main()
For I = 1 To 10
' ...
Next
End Sub
End Class
Vedi anche
Option Infer (istruzione)
Istruzione For Each...Next
Istruzione For...Next
Procedura: fare riferimento all'istanza corrente di un oggetto
Inferenza del tipo di variabile locale
Me, My, MyBase e MyClass
La matrice è fissa o temporaneamente bloccata
(Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Matrici
Questa chiave è già associata a un elemento della
raccolta
05/03/2021 • 2 minutes to read • Edit Online
La chiave specificata per un membro della raccolta identifica già un altro membro della raccolta. Una chiave è
una stringa specificata nel Add metodo che identifica in modo univoco un membro specifico di una raccolta.
Vedi anche
Tipi di errore
Troppi file.
05/03/2021 • 2 minutes to read • Edit Online
Sono stati creati più file nella directory radice rispetto a quelli consentiti dal sistema operativo oppure sono stati
aperti più file rispetto al numero specificato nell'impostazione file = nel file di CONFIG.SYS.
Vedi anche
Tipi di errore
BC30251: il tipo ' <typename> ' non ha costruttori
05/03/2021 • 2 minutes to read • Edit Online
Un tipo non supporta una chiamata a Sub New() . Causa possibile: compilatore o un file binario danneggiato.
ID errore: BC30251
Vedi anche
Oggetti e classi
Opzioni per commenti e suggerimenti in Visual Studio
BC40041: il tipo <typename> non è conforme a
CLS
05/03/2021 • 2 minutes to read • Edit Online
Una variabile, una proprietà o una funzione restituita è dichiarata con un tipo di dati che non è conforme a CLS.
Affinché un'applicazione sia compatibile con l'indipendenza del linguaggio e i componenti di Language-
Independent (CLS), è necessario utilizzare solo tipi conformi a CLS.
I tipi di dati Visual Basic seguenti non sono conformi a CLS:
Tipo di dati SByte
Tipo di dati UInteger
Tipo di dati ULong
Tipo di dati UShort
ID errore: BC40041
L'istruzione ha fatto riferimento a un tipo che non è stato definito. È possibile definire un tipo in un'istruzione di
dichiarazione, ad esempio Enum ,, Structure Class o Interface .
ID errore: BC30002
Vedi anche
Spazi dei nomi in Visual Basic
Istruzione Enum
Istruzione Structure
Istruzione Class
Istruzione Interface
Gestione dei riferimenti in un progetto
BC36564: non è stato possibile dedurre gli
argomenti di tipo dal delegato
05/03/2021 • 2 minutes to read • Edit Online
Un'istruzione di assegnazione usa AddressOf per assegnare l'indirizzo di un oggetto generico a un delegato, ma
non fornisce alcun argomento di tipo alla routine generica.
Di norma, quando si richiama un tipo generico, si fornisce un argomento di tipo per ogni parametro di tipo
definito dal tipo generico. Se non si specifica alcun argomento di tipo, il compilatore prova a dedurre i tipi da
passare ai parametri di tipo. Se il contesto non fornisce informazioni sufficienti per consentire al compilatore di
dedurre i tipi, genera un errore.
ID errore: BC36564
Vedi anche
Generic Types in Visual Basic
Operatore AddressOf
Generic Procedures in Visual Basic
Type List
Metodi di estensione
Tipo non corrispondente (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Tipi di errore
BC30982: non <variablename> è possibile dedurre
il tipo di '' perché i limiti del ciclo e la variabile Step
non si ampliano allo stesso tipo
05/03/2021 • 2 minutes to read • Edit Online
È stato scritto un For...Next ciclo in cui il compilatore non può dedurre un tipo di dati per la variabile di
controllo del ciclo perché sono soddisfatte le condizioni seguenti:
Il tipo di dati della variabile di controllo del ciclo non è specificato con una clausola As .
I limiti del ciclo e la clausola step contengono almeno due tipi di dati.
Non esistono conversioni standard tra i tipi di dati.
Pertanto, il compilatore non può dedurre il tipo di dati della variabile di controllo di un ciclo.
Nell'esempio seguente, la variabile Step è un carattere e i limiti del ciclo sono entrambi numeri interi. Poiché non
esiste una conversione standard tra i caratteri e i numeri interi, questo errore viene segnalato.
ID errore: BC30982
Dim stepVar = 1
-oppure-
Utilizzare le funzioni di conversione esplicita per convertire i limiti del ciclo e la variabile Step nei tipi
appropriati. Nell'esempio precedente, applicare la Val funzione a stepVar .
Vedi anche
Val
Istruzione For...Next
Conversioni implicite ed esplicite
Inferenza del tipo di variabile locale
Option Infer (istruzione)
CString
Widening and Narrowing Conversions
" non è conforme a CLS" />
Il tipo di dati specificato per questo membro non fa parte dell' indipendenza del linguaggio e dei componenti di
Language-Independent (CLS). Non si tratta di un errore all'interno del componente, perché il .NET Framework e
Visual Basic supportano questo tipo di dati. Tuttavia, un altro componente scritto in codice strettamente
conforme a CLS potrebbe non supportare questo tipo di dati. Un componente di questo tipo potrebbe non
essere in grado di interagire correttamente con il componente.
I tipi di dati Visual Basic seguenti non sono conformi a CLS:
Tipo di dati SByte
Tipo di dati UInteger
Tipo di dati ULong
Tipo di dati UShort
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40025
Vedi anche
Reflection
BC40042: il tipo di valore facoltativo per il
parametro facoltativo <parametername> non è
conforme a CLS
05/03/2021 • 3 minutes to read • Edit Online
Una procedura è contrassegnata come <CLSCompliant(True)> , ma viene dichiarato un parametro facoltativo con
valore predefinito di un tipo non conforme.
Affinché una procedura risulti compatibile con l'indipendenza del linguaggio e i componenti indipendenti dal
linguaggio (CLS), deve usare solo tipi conformi a CLS. Questo scenario si applica ai tipi dei parametri, al tipo
restituito e ai tipi di tutte le variabili locali. Si applica anche ai valori predefiniti dei parametri facoltativi.
I tipi di dati Visual Basic seguenti non sono conformi a CLS:
Tipo di dati SByte
Tipo di dati UInteger
Tipo di dati ULong
Tipo di dati UShort
Quando l'attributo CLSCompliantAttribute viene applicato a un elemento di programmazione, il parametro
isCompliant dell'attributo viene impostato su True o False per indicare la conformità o la non conformità.
L'impostazione predefinita per questo parametro non è disponibile, quindi è necessario specificare un valore.
Se a un elemento non viene applicato CLSCompliantAttribute , l'elemento non sarà considerato conforme.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per informazioni su come nascondere gli avvisi
o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40042
Se si interagisce con gli oggetti COM o di automazione, tenere presente che alcuni tipi hanno larghezze di
dati diverse rispetto all'.NET Framework. Ad esempio, int è spesso a 16 bit in altri ambienti. Se si accetta
un valore integer a 16 bit da tale componente, dichiararlo come Short anziché Integer nel codice
Visual Basic gestito.
BC32098: non è possibile usare i parametri di tipo
come qualificatori
05/03/2021 • 2 minutes to read • Edit Online
Un elemento di programmazione è qualificato con una stringa di qualificazione che include un parametro di
tipo.
Un parametro di tipo rappresenta un requisito per un tipo che deve essere specificato quando viene costruito il
tipo generico. Non rappresenta un tipo definito specifico. Una stringa di qualificazione deve includere solo
elementi definiti in fase di compilazione.
Il codice seguente può generare questo errore:
ID errore: BC32098
Vedi anche
References to Declared Elements
Generic Types in Visual Basic
Type List
BC31026: Impossibile creare un assembly con nome
sicuro dal file di chiave ' <filename> ': <error>
05/03/2021 • 2 minutes to read • Edit Online
Non è stato possibile creare un assembly con nome sicuro dal file di chiave specificato.
ID errore: BC31026
Vedi anche
Sn.exe (strumento nome sicuro)
BC30143: Impossibile incorporare il file di risorse '
<filename> ': <error message>
05/03/2021 • 2 minutes to read • Edit Online
Il compilatore Visual Basic chiama assembly linker (Al.exe, noto anche come ALink) per generare un assembly
con un manifesto. Il linker ha segnalato un errore durante l'incorporamento di un file di risorse COM+ nativo
nell'assembly.
ID errore: BC30143
Vedi anche
Al.exe
Opzioni per commenti e suggerimenti in Visual Studio
BC30145: Impossibile creare l'assembly: <error
message>
19/03/2021 • 2 minutes to read • Edit Online
Il compilatore Visual Basic chiama assembly linker (Al.exe, noto anche come ALink) per generare un assembly
con un manifesto e il linker segnala un errore nella fase di emissione della creazione dell'assembly.
ID errore: BC30145
tlbimp <path to COM reference file> /out:<output assembly name> /keyfile:<path to .snk file>
TIP
Se un percorso o un file contiene spazi, utilizzare le virgolette doppie.
Vedi anche
Al.exe
Sn.exe (strumento nome sicuro)
Procedura: creare una coppia di chiavi di Public-Private
Opzioni per commenti e suggerimenti in Visual Studio
BC30655: Impossibile trovare il file richiesto '
<filename> '
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Opzioni per commenti e suggerimenti in Visual Studio
Impossibile ottenere i nomi delle porte seriali a
causa di un errore di sistema interno
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
SerialPortNames
Nozioni di base sul debugger
Opzioni per commenti e suggerimenti in Visual Studio
BC30144: Impossibile eseguire il collegamento al file
di risorse ' <filename> ': <error message>
05/03/2021 • 2 minutes to read • Edit Online
Il compilatore Visual Basic chiama assembly linker (Al.exe, noto anche come ALink) per generare un assembly
con un manifesto. Il linker ha segnalato un errore durante il collegamento di un file di risorse COM+ nativo
dall'assembly.
ID errore: BC30144
Vedi anche
Al.exe
Opzioni per commenti e suggerimenti in Visual Studio
BC30712: non è possibile caricare le informazioni
per la classe ' <classname> '
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Debug in Visual Studio
BC31020: Impossibile scrivere l'output in memoria
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Opzioni per commenti e suggerimenti in Visual Studio
BC30698: Impossibile scrivere il file temporaneo
perché il percorso temporaneo non è disponibile
05/03/2021 • 2 minutes to read • Edit Online
Visual Basic non è stato in grado di determinare il percorso in cui sono archiviati i file temporanei.
ID errore: BC30698
Vedi anche
Opzioni per commenti e suggerimenti in Visual Studio
BC31019: Impossibile scrivere nel file di output '
<filename> ': <error>
05/03/2021 • 2 minutes to read • Edit Online
Vedi anche
Opzioni per commenti e suggerimenti in Visual Studio
BC40032: il tipo sottostante <typename> di enum
non è conforme a CLS
05/03/2021 • 3 minutes to read • Edit Online
Il tipo di dati specificato per questa enumerazione non fa parte dell' indipendenza del linguaggio e dei
componenti di Language-Independent (CLS). Non si tratta di un errore all'interno del componente, perché il
.NET Framework e Visual Basic supportano questo tipo di dati. Tuttavia, un altro componente scritto in codice
strettamente conforme a CLS potrebbe non supportare questo tipo di dati. Un componente di questo tipo
potrebbe non essere in grado di interagire correttamente con il componente.
I tipi di dati Visual Basic seguenti non sono conformi a CLS:
Tipo di dati SByte
Tipo di dati UInteger
Tipo di dati ULong
Tipo di dati UShort
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC40032
Vedi anche
Reflection (Visual Basic)
Reflection
BC42324: l'uso della variabile di iterazione in
un'espressione lambda può produrre risultati
imprevisti
05/03/2021 • 2 minutes to read • Edit Online
L'uso della variabile di iterazione in un'espressione lambda può produrre risultati imprevisti. Al contrario, creare
una variabile locale all'interno del ciclo e assegnarle il valore della variabile di iterazione.
Questo avviso viene visualizzato quando si usa una variabile di iterazione del ciclo in un'espressione lambda
dichiarata all'interno del ciclo. Nell'esempio seguente, ad esempio, viene visualizzato l'avviso.
For i As Integer = 1 To 10
' The warning is given for the use of i.
Dim exampleFunc As Func(Of Integer) = Function() i
Next
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
array1(i) = Function() i
Next
End Sub
End Module
Il For ciclo crea una matrice di espressioni lambda, ciascuna delle quali restituisce il valore della variabile di
iterazione del ciclo i . Quando le espressioni lambda vengono valutate nel For Each ciclo, è possibile che
vengano visualizzati 0, 1, 2, 3 e 4, ovvero i valori successivi del i For ciclo. Viene invece visualizzato il valore
finale di i cinque volte:
5
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42324
Per correggere l'errore
Assegnare il valore della variabile di iterazione a una variabile locale e usare la variabile locale
nell'espressione lambda.
Module Module1
Sub Main()
Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}
For i As Integer = 0 To 4
Dim j = i
array1(i) = Function() j
Next
End Sub
End Module
Vedi anche
Espressioni lambda
BC30955: il valore di tipo ' <typename1> ' non può
essere convertito in ' <typename2> '
05/03/2021 • 3 minutes to read • Edit Online
Non è possibile convertire il valore di tipo ' <typename1> ' in ' <typename2> '. Il tipo non corrisponde
potrebbe essere dovuto alla combinazione di un riferimento file con un riferimento di progetto all'assembly '
<assemblyname> '. Provare a sostituire il riferimento file <filepath> con '' nel progetto ' <projectname1> ' con
un riferimento di progetto a' <projectname2> '.
In una situazione in cui un progetto rende un riferimento al progetto e un file di riferimento, il compilatore non
può garantire che un tipo possa essere convertito in un altro.
Lo pseudo-codice seguente illustra una situazione in cui è possibile generare questo errore.
' ================ Visual Basic project P1 ================
commonObject = P2.getCommonClass()
End Function
End Class
Vedi anche
Conversioni di tipi in Visual Basic
Gestione dei riferimenti in un progetto
BC30961: il valore di tipo ' <typename1> ' non può
essere convertito in ' <typename2> ' (riferimenti a
più file)
05/03/2021 • 2 minutes to read • Edit Online
Non è possibile convertire il valore di tipo ' <typename1> ' in ' <typename2> '. Il tipo non corrispondente
potrebbe essere dovuto alla combinazione di un riferimento file a' <filepath1> ' nel progetto ' <projectname1>
' con un riferimento file a' <filepath2> ' nel progetto ' <projectname2> '. Se gli assembly sono identici, provare
a definire lo stesso percorso per entrambi i riferimenti.
In una situazione in cui un progetto crea più di un riferimento di file a un assembly, il compilatore non può
garantire che un tipo possa essere convertito in un altro.
Ogni riferimento a file specifica un percorso e un nome di file per il file di output di un progetto (in genere un
file DLL). Il compilatore non può garantire che i file di output provengano dalla stessa origine o che
rappresentino la stessa versione dello stesso assembly. Pertanto, non è in grado di garantire che i tipi nei diversi
riferimenti siano dello stesso tipo o anche che uno possa essere convertito nell'altro.
È possibile utilizzare un singolo riferimento a file se si è certi che gli assembly a cui si fa riferimento hanno la
stessa identità di assembly. L' identità dell'assembly include il nome dell'assembly, la versione, la chiave
pubblica, se presente, e le impostazioni cultura. Queste informazioni identificano l'assembly in modo univoco.
ID errore: BC30961
Vedi anche
Conversioni di tipi in Visual Basic
Gestione dei riferimenti in un progetto
BC31194: non è possibile convertire il valore di tipo '
tipo1' in ' tipo2'
05/03/2021 • 2 minutes to read • Edit Online
Non è possibile convertire il valore di tipo ' tipo1' in ' tipo2'. È possibile usare la proprietà' value ' per ottenere il
valore stringa del primo elemento di ' <parentElement> '.
Si è provato a eseguire implicitamente il cast di un valore letterale XML a un tipo specifico. Non è possibile
eseguire implicitamente il cast del valore letterale XML al tipo specificato.
ID errore: BC31194
Vedi anche
Convert
CString
Valori letterali XML
XML
BC30616: la variabile ' <variablename> ' nasconde
una variabile in un blocco di inclusione
05/03/2021 • 2 minutes to read • Edit Online
Dim a, b, x As Integer
If a = b Then
Dim y As Integer = 20 ' Uniquely named block variable.
End If
Una cause comune di questo errore è l'uso di Catch e As Exception all'interno di un gestore eventi. In tal
caso, denominare la Catch variabile Block ex anziché e .
Un'altra fonte comune di questo errore è un tentativo di accedere a una variabile locale dichiarata
all'interno di un Try blocco in un Catch blocco separato. Per risolvere il problema, dichiarare la
variabile all'esterno della Try...Catch...Finally struttura.
Vedi anche
Istruzione Try...Catch...Finally
Dichiarazione di variabile
BC42104: la variabile ' <variablename> ' viene usata
prima dell'assegnazione di un valore
05/03/2021 • 2 minutes to read • Edit Online
La variabile ' <variablename> ' viene usata prima dell'assegnazione di un valore. È possibile che in fase di
esecuzione venga restituita un'eccezione dovuta a un riferimento Null.
Un'applicazione ha almeno un possibile percorso attraverso il codice che legge una variabile prima che venga
assegnato un qualsiasi valore.
Se a una variabile non è mai stato assegnato alcun valore, questa manterrà il valore predefinito per il tipo di dati.
Per un tipo di dati di riferimento, il valore predefinito è Nothing. La lettura di una variabile di riferimento con un
valore Nothing può causare un'eccezione NullReferenceException in alcune circostanze.
Per impostazione predefinita, si tratta di un messaggio di avviso. Per altre informazioni su come nascondere gli
avvisi o considerarli come errori, vedere Configuring Warnings in Visual Basic.
ID errore: BC42104
Vedi anche
Istruzione Dim
Dichiarazione di variabile
Risoluzione dei problemi relativi alle variabili
La variabile utilizza un tipo di automazione non
supportato in Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
Si è tentato di utilizzare una variabile definita in una libreria dei tipi o in una libreria di oggetti con tipo di dati
non supportato da Visual Basic.
Vedi anche
Tipi di dati
BC31168: le proprietà Axis XML non supportano
l'associazione tardiva
05/03/2021 • 2 minutes to read • Edit Online
Per un oggetto non tipizzato è stato fatto riferimento a una proprietà Axis XML.
ID errore: BC31168
Vedi anche
Proprietà Axis XML
XML
BC42319: l'eccezione del commento XML deve
avere un attributo ' cref '
05/03/2021 • 2 minutes to read • Edit Online
Il <exception> tag fornisce un modo per documentare le eccezioni che possono essere generate da un metodo.
L' cref attributo required designa il nome di un membro, che viene controllato dal generatore di
documentazione. Se il membro esiste, viene convertito nel nome canonico dell'elemento nel file di
documentazione.
ID errore: BC42319
<exception cref="member">description</exception>
Vedi anche
<exception>
Procedura: Creare documentazione XML
Tag di commento XML
BC31180: i riferimenti alle entità XML non sono
supportati
05/03/2021 • 2 minutes to read • Edit Online
Un riferimento all'entità, ad esempio, © che non è definito nella specifica xml 1,0 è incluso come valore per un
valore letterale XML. & " < > ' Nei valori letterali XML sono supportati solo i riferimenti a entità,,, e XML.
ID errore: BC31180
Vedi anche
Valori letterali XML e specifica XML 1.0
Valori letterali XML
XML
BC31200: i valori letterali XML e le proprietà XML
non sono supportati nel codice incorporato in
ASP.NET
05/03/2021 • 2 minutes to read • Edit Online
I valori letterali XML e le proprietà XML non sono supportati nel codice incorporato all'interno di ASP.NET. Per
utilizzare le funzionalità XML, spostare il codice nel code-behind.
Un valore letterale XML o una proprietà Axis XML viene definito all'interno del codice incorporato ( <%= => ) in
un file ASP.NET.
ID errore: BC31200
Vedi anche
Valori letterali XML
Proprietà Axis XML
XML
BC31183: URI dello spazio dei nomi XML
http://www.w3.org/XML/1998/namespace ; può essere
associato solo a' xmlns '
05/03/2021 • 2 minutes to read • Edit Online
L'URI http://www.w3.org/XML/1998/namespace viene usato in una dichiarazione dello spazio dei nomi XML. Questo
URI è uno spazio dei nomi riservato e non può essere incluso in una dichiarazione dello spazio dei nomi XML.
ID errore: BC31183
Vedi anche
Istruzione Imports (spazio dei nomi XML)
Valori letterali XML
XML
Riferimenti (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
In questa sezione vengono forniti collegamenti a informazioni di riferimento su vari aspetti della
programmazione Visual Basic.
Sezioni correlate
Elementi generali dell'interfaccia utente (Visual Studio)
Contiene argomenti relativi alle finestre di dialogo e alle finestre usate in Visual Studio.
Strumenti XML in Visual Studio
Fornisce collegamenti ad argomenti sui vari strumenti XML disponibili in Visual Studio.
Automation and Extensibility Reference (Riferimenti su automazione ed estendibilità)
Fornisce collegamenti ad argomenti relativi a automazione ed estensibilità in Visual Studio, sia per i componenti
condivisi che per quelli specifici del linguaggio.
Visual Basic compilatore da riga di comando
05/03/2021 • 2 minutes to read • Edit Online
Il Visual Basic compilatore della riga di comando fornisce un'alternativa alla compilazione dei programmi
dall'interno di Visual Studio Integrated Development Environment (IDE). Questa sezione contiene le descrizioni
per le opzioni del compilatore Visual Basic.
Ogni opzione del compilatore è disponibile in due forme: -opzione e (opzione) . La documentazione mostra
solo la forma -opzione.
Un progetto Visual Basic è costituito da uno o più file di origine separati. Durante il processo noto come
compilazione, questi file vengono raggruppati in un unico pacchetto, ovvero un singolo file eseguibile che può
essere eseguito come applicazione.
Visual Basic fornisce un compilatore da riga di comando come alternativa alla compilazione di programmi
dall'interno di Visual Studio Integrated Development Environment (IDE). Il compilatore da riga di comando è
progettato per le situazioni in cui non è necessario il set completo di funzionalità nell'IDE, ad esempio quando si
usa o si scrive per computer con memoria di sistema limitata o spazio di archiviazione.
Per compilare i file di origine dall'IDE di Visual Studio, scegliere il comando Compila dal menu Compila .
TIP
Quando si compilano i file di progetto usando l'IDE di Visual Studio, è possibile visualizzare informazioni sul comando vbc
associato e sulle relative opzioni nella finestra output. Per visualizzare queste informazioni, aprire la finestra di dialogo
Opzioni, progetti e soluzioni, compila ed Esegui, quindi impostare il livello di dettaglio dell'output di compilazione
del progetto MSBuild su normale o su un livello di dettaglio superiore. Per altre informazioni, vedere procedura:
visualizzare, salvare e configurare i file di log di compilazione.
È possibile compilare file di progetto (con estensione vbproj) da un prompt dei comandi utilizzando MSBuild.
Per altre informazioni, vedere Guida di riferimento alla riga di comando e procedura dettagliata: uso di MSBuild.
Sezioni correlate
Compilatore Command-Line Visual Basic
Fornisce elenchi di opzioni del compilatore, organizzate in ordine alfabetico o per scopo.
Compilazione condizionale
Viene descritto come compilare sezioni di codice specifiche.
Compilazione e pulizia di progetti e soluzioni in Visual Studio
Viene descritto come organizzare gli elementi che verranno inclusi in compilazioni diverse, scegliere le proprietà
del progetto e assicurarsi che i progetti vengano compilati in base all'ordine corretto.
Procedura: richiamare il compilatore da riga di
comando (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
È possibile richiamare il compilatore da riga di comando digitando il nome del relativo file eseguibile nella riga
di comando, noto anche come prompt di MS-DOS. Se si esegue la compilazione dal prompt dei comandi di
Windows predefinito, è necessario digitare il percorso completo del file eseguibile. Per eseguire l'override di
questo comportamento predefinito, è possibile usare la Prompt dei comandi per gli sviluppatori per Visual
Studio o modificare la variabile di ambiente PATH. Entrambi consentono di compilare da qualsiasi directory
semplicemente digitando il nome del compilatore.
NOTE
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero
essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi
elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Vedi anche
Compilatore della riga di comando di Visual Basic
Compilazione condizionale
Righe di comando di compilazione di esempio
(Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
In alternativa alla compilazione di Visual Basic programmi da Visual Studio, è possibile eseguire la compilazione
dalla riga di comando per produrre file eseguibili (exe) o file dll (Dynamic-Link Library).
Il Visual Basic compilatore della riga di comando supporta un set completo di opzioni che controllano i file di
input e di output, gli assembly e le opzioni di debug e preprocessore. Ogni opzione è disponibile in due forme
intercambiabili: -option e /option . Questa documentazione Mostra solo il -option modulo.
La tabella seguente elenca alcune righe di comando di esempio che è possibile modificare per uso personale.
A USO
Compilare tutti i file Visual Basic nella directory corrente, con vbc -define:DEBUG=1 -optimize -out:File2.exe *.vb
le ottimizzazioni su e il DEBUG simbolo definito, producendo
File2.exe
Compila tutti i file di Visual Basic nella directory corrente, vbc -target:library -out:File2.dll -nowarn -nologo
producendo una versione di debug di File2.dll senza -debug *.vb
visualizzare il logo o gli avvisi
Compila tutti i file di Visual Basic nella directory corrente per vbc -target:library -out:Something.dll *.vb
Something.dll
TIP
Quando si compila un progetto usando l'IDE di Visual Studio, è possibile visualizzare informazioni sul comando vbc
associato con le relative opzioni del compilatore nella finestra output. Per visualizzare queste informazioni, aprire la finestra
di dialogo Opzioni, progetti e soluzioni, compila ed Esegui, quindi impostare il livello di dettaglio dell'output di
compilazione del progetto MSBuild su normale o su un livello di dettaglio superiore.
Vedi anche
Compilatore della riga di comando di Visual Basic
Compilazione condizionale
Opzioni del compilatore Visual Basic elencate in
ordine alfabetico
05/03/2021 • 7 minutes to read • Edit Online
Il Visual Basic compilatore della riga di comando viene fornito come alternativa alla compilazione di programmi
da Visual Studio Integrated Development Environment (IDE). Di seguito è riportato un elenco delle opzioni del
compilatore da riga di comando Visual Basic ordinate alfabeticamente.
Ogni opzione del compilatore è disponibile in due forme: -opzione e (opzione) . La documentazione mostra
solo la forma -opzione.
O P Z IO N E SC O P O
-codepage Specifica la tabella codici da usare per tutti i file del codice
sorgente nella compilazione.
Vedi anche
Opzioni del compilatore Visual Basic elencate per categoria
Gestire le proprietà di progetti e soluzioni
@ (specificare il file di risposta) (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Specifica un file che contiene le opzioni del compilatore e i file del codice sorgente da compilare.
Sintassi
@response_file
Argomenti
response_file
Obbligatorio. File che elenca le opzioni del compilatore o i file del codice sorgente da compilare. Racchiudere il
nome file tra virgolette ("") se contiene uno spazio.
Commenti
Il compilatore elabora le opzioni del compilatore e i file del codice sorgente specificati in un file di risposta come
se fossero stati specificati nella riga di comando.
Per specificare più di un file di risposta in una compilazione, specificare più opzioni del file di risposta, ad
esempio la seguente.
@file1.rsp @file2.rsp
In un file di risposta, più opzioni del compilatore e file del codice sorgente possono essere visualizzati in una
sola riga. Una singola specifica dell'opzione del compilatore deve essere visualizzata su una riga (non può
estendersi su più righe). I file di risposta possono avere commenti che iniziano con il # simbolo.
È possibile combinare le opzioni specificate nella riga di comando con le opzioni specificate in uno o più file di
risposta. Il compilatore elabora le opzioni del comando mentre le rileva. Pertanto, gli argomenti della riga di
comando possono eseguire l'override delle opzioni elencate in precedenza nei file di risposta. Viceversa, le
opzioni in un file di risposta sostituiscono le opzioni elencate in precedenza nella riga di comando o in altri file di
risposta.
Visual Basic fornisce il file Vbc. rsp, che si trova nella stessa directory del file di Vbc.exe. Il file Vbc. RSP è incluso
per impostazione predefinita, a meno che non -noconfig venga utilizzata l'opzione. Per ulteriori informazioni,
vedere -noconfig.
NOTE
L' @ opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Le righe seguenti sono riportate in un file di risposta di esempio.
# build the first output file
-target:exe
-out:MyExe.exe
source1.vb
source2.vb
Esempio
Nell'esempio seguente viene illustrato come utilizzare l' @ opzione con il file di risposta denominato File1.rsp
.
vbc @file1.rsp
Vedi anche
Compilatore della riga di comando di Visual Basic
-noconfig
Esempi di righe di comando di compilazione
-addmodule
05/03/2021 • 2 minutes to read • Edit Online
Fa sì che il compilatore renda disponibili per il progetto in compilazione tutte le informazioni sui tipi presenti nei
file specificati.
Sintassi
-addmodule:fileList
Argomenti
fileList
Obbligatorio. Elenco delimitato da virgole di file che contengono metadati ma che non contengono manifesti di
assembly. I nomi di file contenenti spazi devono essere racchiusi tra virgolette ("").
Commenti
I file elencati dal fileList parametro devono essere creati con l' -target:module opzione o con un altro
compilatore equivalente a -target:module .
Tutti i moduli aggiunti con -addmodule devono trovarsi nella stessa directory del file di output in fase di
esecuzione. In altre termini, è possibile specificare un modulo in qualsiasi directory in fase di compilazione, ma il
modulo deve trovarsi nella directory dell'applicazione in fase di esecuzione. In caso contrario, viene ricevuto un
TypeLoadException errore.
Se si specifica (in modo implicito o esplicito) qualsiasi opzione didestinazione (Visual Basic) diversa da
-target:module con -addmodule , i file passati a -addmodule diventano parte dell'assembly del progetto. Per
eseguire un file di output con uno o più file aggiunti con, è necessario un assembly -addmodule .
Use -Reference (Visual Basic) per importare metadati da un file che contiene un assembly.
NOTE
L' -addmodule opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il codice seguente crea un modulo.
' t1.vb
' Compile with vbc /target:module t1.vb.
' Outputs t1.netmodule.
Namespace NetmoduleTest
Module Module1
Sub Main()
Dim x As TestClass
x = New TestClass
x.i = 802
System.Console.WriteLine(x.i)
End Sub
End Module
End Namespace
Vedi anche
Compilatore della riga di comando di Visual Basic
-target (Visual Basic)
-Reference (Visual Basic)
Esempi di righe di comando di compilazione
-baseaddress
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-baseaddress:address
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L'indirizzo di base predefinito per una DLL viene impostato dal .NET Framework.
Tenere presente che la parola di ordine inferiore in questo indirizzo viene arrotondata. Se ad esempio si specifica
0x11110001, viene arrotondato a 0x11110000.
Per completare il processo di firma di una DLL, utilizzare l' –R opzione dello strumento per la denominazione
sicura (Sn.exe).
Questa opzione viene ignorata se la destinazione non è una DLL.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda Compila .
3. fare clic su Avanzate .
4. modificare il valore nella casella indirizzo di base dll: . Nota: Indirizzo di base dll: box è di sola lettura, a meno che la
destinazione non sia una dll.
Vedi anche
Compilatore della riga di comando di Visual Basic
-target (Visual Basic)
Esempi di righe di comando di compilazione
Sn.exe (strumento nome sicuro)
-bugreport
05/03/2021 • 4 minutes to read • Edit Online
Consente di creare un file che è possibile utilizzare per il file di un report sui bug.
Sintassi
-bugreport:file
Argomenti
T ERM IN E DEF IN IZ IO N E
file Obbligatorio. Nome del file che conterrà il report sui bug.
Racchiudere il nome file tra virgolette ("") se il nome contiene
uno spazio.
Commenti
Vengono aggiunte le informazioni seguenti a file :
Copia di tutti i file del codice sorgente nella compilazione.
Elenco delle opzioni del compilatore utilizzate nella compilazione.
Informazioni sulla versione del compilatore, della Common Language Runtime e del sistema operativo.
L'eventuale output del compilatore.
Una descrizione del problema, per cui viene richiesto.
Una descrizione del modo in cui si ritiene che il problema venga risolto, per cui viene richiesto.
Poiché una copia di tutti i file di codice sorgente è inclusa in file , potrebbe essere necessario riprodurre
l'errore del codice (sospetto) nel programma più breve possibile.
IMPORTANT
L' -bugreport opzione produce un file che contiene informazioni potenzialmente riservate. Sono inclusi l'ora corrente, la
versione del compilatore, la versione .NET Framework, la versione del sistema operativo, il nome utente, gli argomenti
della riga di comando con cui è stato eseguito il compilatore, tutto il codice sorgente e il formato binario di qualsiasi
assembly a cui si fa riferimento. Per accedere a questa opzione, è possibile specificare le opzioni della riga di comando nel
file Web.config per una compilazione lato server di un'applicazione ASP.NET. Per evitare questo problema, modificare il file
di Machine.config per non consentire agli utenti di eseguire la compilazione nel server.
NOTE
L' -bugreport opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Nell'esempio seguente viene compilato T2. vb e vengono inserite tutte le informazioni di segnalazione dei bug
nel file Problem.txt.
Vedi anche
Compilatore della riga di comando di Visual Basic
-debug (Visual Basic)
-errorreport
Esempi di righe di comando di compilazione
Elemento trustLevel per securityPolicy (schema delle impostazioni ASP.NET)
-tabella codici (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Specifica la tabella codici da usare per tutti i file del codice sorgente nella compilazione.
Sintassi
-codepage:id
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Per compilare il codice sorgente salvato con una codifica specifica, è possibile usare -codepage per specificare la
tabella codici da usare. L' -codepage opzione si applica a tutti i file del codice sorgente nella compilazione. Per
ulteriori informazioni, vedere codifica dei caratteri nella .NET Framework.
L' -codepage opzione non è necessaria se i file del codice sorgente sono stati salvati usando la tabella codici
ANSI corrente, Unicode o UTF-8 con una firma. Per impostazione predefinita, Visual Studio Salva tutti i file del
codice sorgente con la tabella codici ANSI corrente, a meno che l'utente non specifichi un'altra codifica nella
finestra di dialogo codifica . Visual Studio usa la finestra di dialogo codifica per aprire i file di codice sorgente
salvati con una tabella codici diversa.
NOTE
L' -codepage opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Vedi anche
Compilatore della riga di comando di Visual Basic
-debug (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-debug[+ | -]
oppure
-debug:[full | pdbonly]
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Usare questa opzione per creare build di debug. Se non si specifica -debug , o, non sarà possibile -debug+
-debug:full eseguire il debug del file di output del programma.
Per impostazione predefinita, le informazioni di debug non vengono emesse ( -debug- ). Per creare
informazioni di debug, specificare -debug o -debug+ .
Per informazioni su come configurare le prestazioni di debug di un'applicazione, vedere Semplificazione del
debug di un'immagine.
1. con un progetto selezionato in Esplora soluzioni, scegliere proprietà dal menu progetto .
2. fare clic sulla scheda Compila .
3. fare clic su Opzioni di compilazione avanzate .
4. modificare il valore nella casella genera informazioni di debug .
Esempio
Nell'esempio seguente vengono inserite le informazioni di debug nel file di output App.exe .
Vedi anche
Compilatore della riga di comando di Visual Basic
-bugreport
Esempi di righe di comando di compilazione
-define (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-define:["]symbol[=value][,symbol[=value]]["]
oppure
-d:["]symbol[=value][,symbol[=value]]["]
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L' -define opzione ha un effetto simile all'uso di una #Const direttiva per il preprocessore nel file di origine, ad
eccezione del fatto che le costanti definite con -define sono pubbliche e si applicano a tutti i file nel progetto.
È possibile usare i simboli creati mediante questa opzione con la direttiva #If ... Then ... #Else per eseguire la
compilazione condizionale dei file di origine.
-d è la versione abbreviata di -define .
È possibile definire più simboli con -define , separando le definizioni dei simboli con una virgola.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda Compila .
3. fare clic su Avanzate .
4. modificare il valore nella casella costanti personalizzate .
Esempio
Nel codice seguente sono definite e usate due costanti di compilazione condizionale.
' Vbc /define:DEBUGMODE=True,TRAPERRORS=False test.vb
Sub mysub()
#If debugmode Then
' Insert debug statements here.
MsgBox("debug mode")
#Else
' Insert default statements here.
#End If
End Sub
Vedi anche
Compilatore della riga di comando di Visual Basic
#If... Direttive then... #Else
#Const (direttiva)
Esempi di righe di comando di compilazione
-delaysign
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-delaysign[+ | -]
Argomenti
+ | -
facoltativo. Utilizzare -delaysign- se si desidera che l'assembly abbia firma completa. Usare -delaysign+ se si
vuole inserire la chiave pubblica nell'assembly e lo spazio riservato per l'hash firmato. Il valore predefinito è
-delaysign- .
Commenti
L' -delaysign opzione non ha alcun effetto a meno che non venga usata con - filecontainer o-filecontainer.
Quando si richiede un assembly con firma completa, il compilatore genera un hash per il file contenente il
manifesto (i metadati dell'assembly) e firma tale hash con la chiave privata. La firma digitale risultante viene
archiviata nel file contenente il manifesto. Quando un assembly ha una firma ritardata, il compilatore non
calcola e archivia la firma, ma riserva spazio nel file in modo che la firma possa essere aggiunta in un secondo
momento.
Usando, ad esempio -delaysign+ , uno sviluppatore di un'organizzazione può distribuire le versioni di test
senza segno di un assembly che i tester possono registrare con il global assembly cache e usare. Al termine
dell'operazione sull'assembly, la persona responsabile della chiave privata dell'organizzazione può firmare
completamente l'assembly. Questo compartimentazione protegge la chiave privata dell'organizzazione dalla
divulgazione, consentendo a tutti gli sviluppatori di lavorare sugli assembly.
Per ulteriori informazioni sulla firma di un assembly , vedere Creazione e utilizzo di assembly Strong-Named .
Per impostare -delaysign in Visual Studio Integrated Development Environment
1. Selezionare un progetto in Esplora soluzioni . Scegliere Proprietà dal menu Progetto .
2. Fare clic sulla scheda Firma .
3. Impostare il valore nella casella solo firma ritardata .
Vedi anche
Compilatore della riga di comando di Visual Basic
-keyfile
-keycontainer
Esempi di righe di comando di compilazione
-deterministic
05/03/2021 • 3 minutes to read • Edit Online
Fa sì che il compilatore generi un assembly il cui output byte per byte è identico in tutte le compilazioni se si
usano input identici.
Sintassi
-deterministic
Osservazioni
Per impostazione predefinita, l'output del compilatore che deriva da un determinato set di input è univoco,
poiché il compilatore aggiunge un timestamp e un GUID generato da numeri casuali. L'opzione -deterministic
si usa per generare un assembly deterministico il cui contenuto binario è identico in tutte le compilazioni purché
l'input rimanga lo stesso.
Il compilatore considera i seguenti input al fine del determinismo:
La sequenza dei parametri della riga di comando.
Il contenuto del file di risposta del file RSP del compilatore.
La versione precisa del compilatore in uso e i relativi assembly di riferimento.
Il percorso della directory corrente.
Il contenuto binario di tutti i file passati in modo esplicito al compilatore direttamente o indirettamente, tra
cui:
File di origine
Assembly di riferimento
Moduli a cui viene fatto riferimento
Risorse
Il file di chiave con nome sicuro
@ file di risposta
Analizzatori
Set di regole
File aggiuntivi che possono essere usati dagli analizzatori
Le impostazioni cultura correnti (per la lingua in cui vengono generati la diagnostica e i messaggi di
eccezione).
La codifica predefinita (o la tabella codici corrente) se non è specificata la codifica.
L'esistenza, non esistenza e contenuto dei file nei percorsi di ricerca del compilatore (specificati, ad esempio,
da -lib o -recurse ).
La piattaforma CLR in cui viene eseguito il compilatore.
Il valore di %LIBPATH% , che può influenzare il caricamento delle dipendenze dell'analizzatore.
Quando le origini sono disponibili pubblicamente, la compilazione deterministica può essere usata per stabilire
se un file binario viene compilato da un'origine attendibile. Può anche essere utile in un sistema di compilazione
continua per determinare se è necessario eseguire le istruzioni di compilazione che dipendono dalle modifiche
apportate a un file binario.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-doc
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
-doc[+ | -]
oppure
-doc:file
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L'opzione -doc controlla se il compilatore genera un file XML contenente i commenti della documentazione. Se
si usa la sintassi -doc:file , il parametro file specifica il nome del file XML. Se si usa -doc o -doc+ , il
compilatore ottiene il nome del file XML dal file eseguibile o dalla libreria che il compilatore sta creando. Se si
usa -doc- o non si specifica l'opzione -doc , il compilatore non crea un file XML.
Nei file di codice sorgente, i commenti della documentazione possono precedere le definizioni seguenti:
Tipi definiti dall'utente, ad esempio una classe o interfaccia
Membri, ad esempio un campo, un evento, una proprietà, una funzione oppure una subroutine.
Per usare il file XML generato con la funzionalità IntelliSense di Visual Studio, usare un nome per il file XML
uguale al nome dell'assembly che si vuole supportare. Assicurarsi che il file XML sia nella stessa directory
dell'assembly, in modo che quando si fa riferimento all'assembly nel progetto di Visual Studio, venga trovato
anche il file XML. I file di documentazione XML non sono necessari per il funzionamento di IntelliSense per il
codice all'interno di un progetto o all'interno di progetti a cui viene fatto riferimento da un progetto.
A meno che non si esegua la compilazione con -target:module , il file XML contiene i tag <assembly></assembly> .
Questi tag specificano il nome del file contenente il manifesto dell'assembly per il file di output della
compilazione.
Vedere Tag XML consigliati per i commenti relativi alla documentazione per informazioni su come generare
documentazione dai commenti nel codice.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda Compila .
3. impostare il valore nella casella genera file di documentazione XML .
Esempio
Vedere Documentazione del codice tramite XML per un esempio.
Vedi anche
Compilatore della riga di comando di Visual Basic
Documentazione del codice tramite XML
-errorreport
05/03/2021 • 4 minutes to read • Edit Online
Specifica il modo in cui il compilatore di Visual Basic deve segnalare gli errori interni del compilatore.
Sintassi
-errorreport:{ prompt | queue | send | none }
Osservazioni
Questa opzione offre un modo pratico per segnalare un errore interno del compilatore Visual Basic al team di
Visual Basic di Microsoft. Per impostazione predefinita, il compilatore non invia alcuna informazione a Microsoft.
Tuttavia, se si verifica un errore interno del compilatore, questa opzione consente di segnalare l'errore a
Microsoft. Tali informazioni consentiranno ai tecnici Microsoft di identificare la cause e possono contribuire a
migliorare la prossima versione di Visual Basic.
La capacità di un utente di inviare i report dipende dalle autorizzazioni dei criteri utente e del computer.
Nella tabella seguente sono riepilogati gli effetti dell' -errorreport opzione.
O P Z IO N E C O M P O RTA M EN TO
Il compilatore invia i dati che includono lo stack al momento dell'errore, che in genere include un codice
sorgente. Se -errorreport viene usato con l'opzione -bugreport ( , viene inviato l'intero file di origine.
Questa opzione è ideale per l'uso con l'opzione -bugreport ( , perché consente ai tecnici Microsoft di riprodurre
più facilmente l'errore.
NOTE
L' -errorreport opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue
la compilazione dalla riga di comando.
Esempio
Il codice seguente tenta di compilare T2.vb e se il compilatore rileva un errore interno del compilatore, viene
richiesto di inviare la segnalazione di errore a Microsoft.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-bugreport
-filealign
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-filealign:number
Argomenti
number
Obbligatorio. Valore che specifica l'allineamento delle sezioni nel file di output. I valori validi sono 512, 1024,
2048, 4096 e 8192. I valori sono in byte.
Commenti
È possibile usare l' -filealign opzione per specificare l'allineamento delle sezioni nel file di output. Le sezioni
sono blocchi di memoria contigua in un file eseguibile portabile (PE) che contiene il codice o i dati. L'
-filealign opzione consente di compilare l'applicazione con un allineamento non standard. la maggior parte
degli sviluppatori non è necessario utilizzare questa opzione.
Ogni sezione è allineata a un limite che corrisponde a un multiplo del -filealign valore. Non vi è alcun valore
predefinito fisso. Se -filealign non viene specificato, il compilatore sceglie un valore predefinito in fase di
compilazione.
Specificando le dimensioni della sezione, è possibile modificare le dimensioni del file di output. La modifica delle
dimensioni della sezione può essere utile per i programmi che verranno eseguiti su dispositivi di piccole
dimensioni.
NOTE
L' -filealign opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Vedi anche
Compilatore della riga di comando di Visual Basic
-help, -? (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-help
oppure
-?
Commenti
Se si include questa opzione in una compilazione, non viene creato alcun file di output e non si verifica alcuna
compilazione.
NOTE
L' -help opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il codice seguente Visualizza la guida dalla riga di comando.
vbc -help
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-highentropyva (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Indica se un eseguibile a 64 bit o un eseguibile contrassegnato dall'opzione del compilatore -Platform: anycpu
supporta la sequenza casuale del layout dello spazio degli indirizzi a entropia elevata (ASLR).
Sintassi
-highentropyva[+ | -]
Argomenti
+ | -
facoltativo. L'opzione è disattivata per impostazione predefinita o se si specifica -highentropyva- . L'opzione è
attiva se si specifica -highentropyva o -highentropyva+ .
Commenti
Se si specifica questa opzione, le versioni compatibili del kernel di Windows possono usare livelli di entropia più
elevati quando il kernel esegue in modo casuale il layout dello spazio degli indirizzi di un processo come parte
di ASLR. Se il kernel usa livelli di entropia più elevati, è possibile allocare un numero maggiore di indirizzi alle
aree di memoria quali stack e heap. Di conseguenza, è più difficile indovinare la posizione di una determinata
area di memoria.
Quando l'opzione è impostata su on, l'eseguibile di destinazione e tutti i moduli da cui dipende devono essere in
grado di gestire valori di puntatore maggiori di 4 gigabyte (GB) quando tali moduli sono in esecuzione come
processi a 64 bit.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-Imports (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-imports:namespaceList
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L' -imports opzione importa qualsiasi spazio dei nomi definito all'interno del set di file di origine corrente o da
qualsiasi assembly a cui si fa riferimento.
I membri in uno spazio dei nomi specificato con -imports sono disponibili per tutti i file del codice sorgente
nella compilazione. Usare l' istruzione Imports (tipo e spazio dei nomi .NET) per usare uno spazio dei nomi in un
unico file del codice sorgente.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda riferimenti .
3. Immettere il nome dello spazio dei nomi nella casella accanto al pulsante Aggiungi impor tazione utente .
4. fare clic sul pulsante Aggiungi impor tazione utente .
Esempio
Il codice seguente viene compilato quando -imports:system.globalization si specifica. In caso contrario, la
compilazione riuscita richiede l' Imports System.Globalization inclusione di un'istruzione all'inizio del file di
codice sorgente o che la proprietà sia completamente qualificata come
System.Globalization.CultureInfo.CurrentCulture.Name .
Module Example
Public Sub Main()
Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}")
End Sub
End Module
Vedi anche
Compilatore della riga di comando di Visual Basic
Riferimenti e istruzione Imports
Esempi di righe di comando di compilazione
-keycontainer
05/03/2021 • 2 minutes to read • Edit Online
Specifica il nome di un contenitore di chiavi per una coppia di chiavi allo scopo di assegnare a un assembly un
nome sicuro.
Sintassi
-keycontainer:container
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Il compilatore crea il componente condivisibile inserendo una chiave pubblica nel manifesto dell'assembly e
firmando l'assembly finale con la chiave privata. Per generare un file di chiave, digitare sn -k file nella riga di
comando. L' -i opzione installa la coppia di chiavi in un contenitore. Per ulteriori informazioni, vedere Sn.exe
(strumento nome sicuro).
Se si esegue la compilazione con -target:module , il nome del file di chiave viene mantenuto nel modulo e
incorporato nell'assembly creato quando si compila un assembly con -addmodule.
Questa opzione può essere specificata anche come attributo personalizzato AssemblyKeyNameAttribute nel
codice sorgente di qualsiasi modulo MSIL (Microsoft Intermediate Language).
È possibile passare al compilatore le informazioni di crittografia anche tramite -keyfile. Usare -delaysign se si
vuole un assembly con firma parziale.
Per ulteriori informazioni sulla firma di un assembly , vedere Creazione e utilizzo di assembly Strong-Named .
NOTE
L' -keycontainer opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si
esegue la compilazione dalla riga di comando.
Esempio
Il codice seguente compila il file Input.vb di origine e specifica un contenitore di chiavi.
Specifica un file contenente una chiave o una coppia di chiavi allo scopo di assegnare a un assembly un nome
sicuro.
Sintassi
-keyfile:file
Argomenti
file
Obbligatorio. File contenente la chiave. Se il nome del file contiene uno spazio, racchiudere il nome tra virgolette
("").
Commenti
Il compilatore inserisce la chiave pubblica nel manifesto dell'assembly e quindi firma l'assembly finale con la
chiave privata. Per generare un file di chiave, digitare sn -k file nella riga di comando. Per ulteriori
informazioni, vedere Sn.exe (strumento nome sicuro).
Se si esegue la compilazione con -target:module , il nome del file di chiave viene mantenuto nel modulo e
incorporato nell'assembly creato quando si compila un assembly con -addmodule.
È possibile passare al compilatore le informazioni di crittografia anche tramite -keycontainer. Usare -delaysign
se si vuole un assembly con firma parziale.
È possibile specificare questa opzione anche come attributo personalizzato ( AssemblyKeyFileAttribute ) nel
codice sorgente di qualsiasi modulo Microsoft Intermediate Language.
Se -keyfile nella stessa compilazione vengono specificati sia che -key container (per opzione della riga di
comando o attributo personalizzato), il compilatore tenta prima di tutto il contenitore di chiavi. Se l'operazione
riesce, l'assembly viene firmato con le informazioni incluse nel contenitore di chiavi. Se il compilatore non trova
il contenitore di chiavi, tenta il file specificato con -keyfile . Se l'operazione ha esito positivo, l'assembly viene
firmato con le informazioni contenute nel file di chiave e le informazioni sulla chiave vengono installate nel
contenitore di chiavi (simile a sn -i ) in modo che nella compilazione successiva il contenitore di chiavi sarà
valido.
Si noti che un file di chiave può contenere solo la chiave pubblica.
Per ulteriori informazioni sulla firma di un assembly , vedere Creazione e utilizzo di assembly Strong-Named .
NOTE
L' -keyfile opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il codice seguente compila il file Input.vb di origine e specifica un file di chiave.
Vedi anche
Assembly in .NET
Compilatore della riga di comando di Visual Basic
-Reference (Visual Basic)
Esempi di righe di comando di compilazione
-langversion (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Fa in modo che il compilatore accetti solo la sintassi inclusa nella versione della lingua Visual Basic specificata.
Sintassi
-langversion:version
Argomenti
version
Obbligatorio. La versione del linguaggio da utilizzare durante la compilazione. I valori accettati sono 9 ,, 10
11 , 12 , 14 , 15 , 15.3 , 15.5 , 16 default e latest .
I numeri interi possono essere specificati anche usando .0 come versione secondaria, ad esempio 11.0 .
È possibile visualizzare l'elenco di tutti i valori possibili specificando -langversion:? nella riga di comando.
Commenti
L' -langversion opzione specifica la sintassi accettata dal compilatore. Se, ad esempio, si specifica che la
versione del linguaggio è 9,0, il compilatore genera errori per la sintassi valida solo nella versione 10,0 e
successive.
È possibile utilizzare questa opzione quando si sviluppano applicazioni destinate a versioni diverse del .NET
Framework. Ad esempio, se la destinazione è .NET Framework 3,5, è possibile usare questa opzione per
assicurarsi di non usare la sintassi della versione 10,0 del linguaggio.
È possibile impostare -langversion direttamente solo tramite la riga di comando. Per ulteriori informazioni,
vedere la pagina relativa alla destinazione di una specifica .NET Framework versione.
Esempio
Il codice seguente viene compilato sample.vb per Visual Basic 9,0.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-libpath
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-libpath:dirList
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L' -libpath opzione specifica il percorso degli assembly a cui fa riferimento l'opzione -Reference .
La ricerca dei riferimenti non completi agli assembly viene operata nell'ordine seguente:
1. Directory di lavoro corrente, ovvero la directory da cui viene chiamato il compilatore.
2. Directory di sistema di Common Language Runtime.
3. Directory specificate da -libpath .
4. Directory specificate dalla variabile di ambiente LIB.
L' -libpath opzione è additiva, che viene specificata più di una volta in aggiunta a qualsiasi valore precedente.
Usare -reference per specificare un riferimento a un assembly.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda riferimenti .
3. fare clic sul pulsante Percorsi riferimento... .
4. nella finestra di dialogo Percorsi riferimento immettere il nome della directory nella casella car tella: .
5. fare clic su Aggiungi car tella .
Esempio
Il codice seguente esegue la compilazione T2.vb per creare un file con estensione exe. Il compilatore cerca nella
directory di lavoro, nella directory radice dell'unità C: e nella nuova directory degli assembly dell'unità C: per i
riferimenti all'assembly.
vbc -libpath:c:\;"c:\New Assemblies" -reference:t2.dll t2.vb
Vedi anche
Assembly in .NET
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-collegamento (Visual Basic)
05/03/2021 • 7 minutes to read • Edit Online
Indica al compilatore di rendere disponibili al progetto in fase di compilazione le informazioni sui tipi COM
presenti negli assembly specificati.
Sintassi
-link:fileList
oppure
-l:fileList
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L'opzione -link consente di distribuire un'applicazione in cui sono incorporate informazioni sul tipo.
L'applicazione può quindi usare i tipi in un assembly di runtime che implementano le informazioni sul tipo
incorporate senza dovere far riferimento all'assembly di runtime. Se vengono pubblicate diverse versioni
dell'assembly di runtime, l'applicazione che contiene le informazioni sul tipo incorporate può funzionare con le
diverse versioni senza che sia necessaria la ricompilazione. Per un esempio, vedere Procedura dettagliata:
incorporamento dei tipi da assembly gestiti.
L'opzione -link è particolarmente utile quando si usa l'interoperabilità COM. È possibile incorporare tipi COM
in modo che per l'applicazione non sia più necessario un assembly di interoperabilità primario nel computer di
destinazione. L'opzione -link indica al compilatore di incorporare le informazioni sul tipo COM dall'assembly
di interoperabilità a cui si fa riferimento nel codice compilato risultante. Il tipo COM viene identificato dal valore
CLSID (GUID). Di conseguenza, l'applicazione può essere eseguita in un computer di destinazione in cui sono
stati installati gli stessi tipi COM con gli stessi valori CLSID. Le applicazioni che consentono di automatizzare
Microsoft Office costituiscono un valido esempio. Poiché applicazioni come Office mantengono in genere lo
stesso valore CLSID in versioni diverse, l'applicazione può usare i tipi COM a cui si fa riferimento purché .NET
Framework 4 o versioni successive sia installato nel computer di destinazione e l'applicazione usi metodi,
proprietà o eventi inclusi nei tipi COM a cui si fa riferimento.
L'opzione -link incorpora solo interfacce, strutture e delegati. L'incorporamento di classi COM non è
supportato.
NOTE
Quando si crea un'istanza di un tipo COM incorporato nel codice, è necessario creare l'istanza usando l'interfaccia
appropriata. Il tentativo di creare un'istanza di un tipo COM incorporato usando la coclasse genera un errore.
Per impostare l'opzione -link in Visual Studio, aggiungere un riferimento all'assembly e impostare la proprietà
Embed Interop Types su true . Il valore predefinito della proprietà Embed Interop Types è false .
Se si collega a un assembly COM (assembly A) che fa riferimento a un altro assembly COM (assembly B), è
necessario eseguire il collegamento anche all'assembly B se si verifica una delle condizioni seguenti:
Un tipo dell'assembly A eredita da un tipo o implementa un'interfaccia dall'assembly B.
Viene richiamato un campo, una proprietà, un evento o un metodo che presenta un tipo restituito o un
tipo di parametro proveniente dall'assembly B.
Usare -LIBPATH per specificare la directory in cui si trova uno o più riferimenti ad assembly.
Analogamente all'opzione del compilatore -Reference , l' -link opzione del compilatore usa il file di risposta
vbc. rsp, che fa riferimento a assembly .NET Framework di uso frequente. Usare l'opzione del compilatore -
noconfig se non si vuole che il compilatore usi il file Vbc. rsp.
La forma breve di -link è -l .
' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)
Imports System.Collections.Generic
Imports Microsoft.Office.Interop.Excel
Class Utility
' The following code causes an error when called by a client assembly.
Public Function GetRange1() As List(Of Range)
End Function
' The following code is valid for calls from a client assembly.
Public Function GetRange2() As IList(Of Range)
End Function
End Class
Nell'esempio seguente, il codice client può chiamare il metodo che restituisce l'interfaccia generica IList senza
errori.
Module Client
Public Sub Main()
Dim util As New Utility()
Esempio
La riga di comando seguente compila il file di origine OfficeApp.vb e gli assembly di riferimento da
COMData1.dll e COMData2.dll per produrre OfficeApp.exe .
Vedi anche
Compilatore della riga di comando di Visual Basic
Procedura dettagliata: incorporamento dei tipi da assembly gestiti
-Reference (Visual Basic)
-noconfig
-LIBPATH
Esempi di righe di comando di compilazione
Introduzione all'interoperabilità COM
-linkresource ((Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-linkresource:filename[,identifier[,public|private]]
oppure
-linkres:filename[,identifier[,public|private]]
Argomenti
filename
Obbligatorio. File di risorse da collegare all'assembly. Se il nome del file contiene uno spazio, racchiudere il
nome tra virgolette ("").
identifier
facoltativo. Nome logico della risorsa. Nome usato per caricare la risorsa. L'impostazione predefinita
corrisponde al nome del file. Facoltativamente, è possibile specificare se il file è pubblico o privato nel manifesto
dell'assembly, ad esempio: -linkres:filename.res,myname.res,public . Per impostazione predefinita, filename è
Public nell'assembly.
Commenti
L' -linkresource opzione non incorpora il file di risorse nel file di output. utilizzare l' -resource opzione per
eseguire questa operazione.
L' -linkresource opzione richiede una delle -target opzioni diverse da -target:module .
Se filename è un file di risorse .NET Framework creato, ad esempio dal Resgen.exe (Generatore di file di risorse)
o nell'ambiente di sviluppo, è possibile accedervi con membri nello System.Resources spazio dei nomi. Per
ulteriori informazioni, vedere ResourceManager . Per accedere a tutte le altre risorse in fase di esecuzione, usare
i metodi che iniziano con GetManifestResource nella Assembly classe.
Il nome del file può essere qualsiasi formato di file. Può ad esempio risultare opportuno rendere una DLL nativa
parte dell'assembly in modo che possa essere installata nella Global Assembly Cache e che sia possibile
accedervi dal codice gestito nell'assembly.
La forma breve di -linkresource è -linkres .
NOTE
L' -linkresource opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si
esegue la compilazione dalla riga di comando.
Esempio
Il codice seguente compila in.vb e collega a un file di risorse rf.resource .
Vedi anche
Compilatore della riga di comando di Visual Basic
-target (Visual Basic)
-Resource (Visual Basic)
Esempi di righe di comando di compilazione
-main
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-main:location
Argomenti
location
Obbligatorio. Nome della classe o del modulo che contiene la Sub Main stored procedure da chiamare all'avvio
del programma. Il formato può essere Main: module o -Main: Namespace. Module .
Commenti
Usare questa opzione quando si crea un file eseguibile o un programma eseguibile di Windows. Se l'opzione -
Main viene omessa, il compilatore cerca una condivisione valida Sub Main in tutti i moduli e le classi pubbliche.
Per una descrizione delle diverse forme della procedura, vedere la procedura principale in Visual Basic Main .
Quando location è una classe che eredita da Form , il compilatore fornisce una Main routine predefinita che
avvia l'applicazione se la classe non ha Main routine. In questo modo è possibile compilare il codice dalla riga di
comando creata nell'ambiente di sviluppo.
Esempio
Il codice seguente compila T2.vb e T3.vb , specificando che la Sub Main stored procedure verrà trovata nella
Test2 classe.
Vedi anche
Compilatore della riga di comando di Visual Basic
-target (Visual Basic)
Esempi di righe di comando di compilazione
Routine Main in Visual Basic
-moduleassemblyname
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-moduleassemblyname:assembly_name
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Il compilatore elabora l' -moduleassemblyname opzione solo se -target:module è stata specificata l'opzione. In
questo modo il compilatore crea un modulo. Il modulo creato dal compilatore è valido solo per l'assembly
specificato con l' -moduleassemblyname opzione. Se si inserisce il modulo in un assembly diverso, si
verificheranno errori di run-time.
L' -moduleassemblyname opzione è necessaria solo quando sono soddisfatte le condizioni seguenti:
Un tipo di dati nel modulo deve accedere a un Friend tipo in un assembly a cui si fa riferimento.
L'assembly a cui si fa riferimento ha concesso l'accesso dell'assembly Friend all'assembly in cui verrà
compilato il modulo.
Per ulteriori informazioni sulla creazione di un modulo, vedere -target (Visual Basic). Per ulteriori informazioni
sugli assembly Friend, vedere assembly Friend.
NOTE
L' -moduleassemblyname opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando
si compila da un prompt dei comandi.
Vedi anche
Procedura: compilare un assembly su più file
Compilatore della riga di comando di Visual Basic
-target (Visual Basic)
-principale
-Reference (Visual Basic)
-addmodule
Assembly in .NET
Esempi di righe di comando di compilazione
Assembly Friend
-netcf
05/03/2021 • 4 minutes to read • Edit Online
Imposta il compilatore in modo che abbia come destinazione la .NET Compact Framework.
Sintassi
-netcf
Osservazioni
L' -netcf opzione fa sì che il compilatore di Visual Basic faccia riferimento al .NET Compact Framework anziché
al .NET Framework completo. La funzionalità del linguaggio presente solo nella .NET Framework completa è
disabilitata.
L' -netcf opzione è progettata per essere usata con -sdkpath (. Le funzionalità del linguaggio disabilitate da
-netcf sono le stesse funzionalità del linguaggio non presenti nei file assegnati a -sdkpath .
NOTE
L' -netcf opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando. L' -netcf opzione viene impostata quando viene caricato un progetto Visual Basic
dispositivo.
Module Module1
Sub Main()
End ' not valid to terminate execution with /netcf
End Sub
End Module
L'associazione tardiva, in tutti i form, è disabilitata. Gli errori in fase di compilazione vengono generati
quando si rilevano scenari di associazione tardiva riconosciuti. Il programma seguente compila ed esegue
senza -netcf ma ha esito negativo in fase di compilazione con -netcf .
Class LateBoundClass
Sub S1()
End Sub
Module Module1
Sub Main()
Dim o1 As Object
Dim o2 As Object
Dim o3 As Object
Dim IntArr(3) As Integer
o1 = New LateBoundClass
o2 = 1
o3 = IntArr
I modificatori auto, ANSIe Unicode sono disabilitati. La sintassi dell' istruzione Declare viene inoltre
modificata in Declare Sub|Function name Lib "library" [Alias "alias"] [([arglist])] . Nel codice
seguente viene illustrato l'effetto di -netcf su una compilazione.
L'uso di Visual Basic parole chiave 6,0 che sono state rimosse da Visual Basic genera un errore diverso
quando -netcf si usa. Ciò influiscono sui messaggi di errore per le parole chiave seguenti:
Open
Close
Put
Write
Input
Lock
Unlock
Seek
Width
Name
FreeFile
EOF
Loc
LOF
Line
Esempio
Il codice seguente viene compilato Myfile.vb con il .NET Compact Framework, usando le versioni di
mscorlib.dll e Microsoft.VisualBasic.dll disponibili nella directory di installazione predefinita del .NET Compact
Framework nell'unità C. In genere, si utilizzerà la versione più recente del .NET Compact Framework.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-sdkpath
-noconfig
05/03/2021 • 2 minutes to read • Edit Online
Specifica che il compilatore non deve fare riferimento automaticamente agli assembly .NET Framework di uso
comune o importare gli System Microsoft.VisualBasic spazi dei nomi e.
Sintassi
-noconfig
Osservazioni
L' -noconfig opzione indica al compilatore di non compilare con il file Vbc. rsp, che si trova nella stessa
directory del file Vbc.exe. Il file Vbc. rsp fa riferimento agli assembly di .NET Framework di uso comune e
importa gli System Microsoft.VisualBasic spazi dei nomi e. Il compilatore fa riferimento in modo implicito
all'assembly System.dll a meno che non -nostdlib venga specificata l'opzione. L' -nostdlib opzione indica al
compilatore di non eseguire la compilazione con Vbc. rsp o di fare automaticamente riferimento all'assembly
System.dll.
NOTE
Viene sempre fatto riferimento agli assembly Mscorlib.dll e Microsoft.VisualBasic.dll.
È possibile modificare il file Vbc. rsp per specificare altre opzioni del compilatore da includere in ogni
compilazione di Vbc.exe, tranne quando si specifica l' -noconfig opzione. Per ulteriori informazioni, vedere @
(specificare il file di risposta).
Il compilatore elabora le opzioni passate al vbc comando per ultimo. Pertanto, qualsiasi opzione nella riga di
comando esegue l'override dell'impostazione della stessa opzione nel file Vbc. rsp.
NOTE
L' -noconfig opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Vedi anche
-nostdlib (Visual Basic)
Compilatore della riga di comando di Visual Basic
@ (Specifica di un file di risposta)
-Reference (Visual Basic)
-nologo (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Evita la visualizzazione del banner sul copyright e dei messaggi informativi durante la compilazione.
Sintassi
-nologo
Osservazioni
Se si specifica -nologo , il compilatore non visualizza un banner sul copyright. Per impostazione predefinita,
l'opzione -nologo non è attiva.
NOTE
L' -nologo opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il codice seguente compila T2.vb e non visualizza un banner sul copyright.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-nostdlib (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Fa in modo che il compilatore non faccia automaticamente riferimento alle librerie standard.
Sintassi
-nostdlib
Osservazioni
L' -nostdlib opzione rimuove il riferimento automatico all'assembly System.dll e impedisce al compilatore di
leggere il file Vbc. rsp. Il file Vbc. rsp, che si trova nella stessa directory del file Vbc.exe, fa riferimento agli
assembly .NET Framework di uso comune e importa gli System Microsoft.VisualBasic spazi dei nomi e.
NOTE
Viene sempre fatto riferimento agli assembly Mscorlib.dll e Microsoft.VisualBasic.dll.
NOTE
L' -nostdlib opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il codice seguente viene compilato T2.vb senza fare riferimento alle librerie standard. Per rimuovere l'oggetto,
è necessario impostare la _MYTYPE costante di compilazione condizionale sulla stringa "Empty" My .
Vedi anche
-noconfig
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
Personalizzazione degli oggetti disponibili in My
-nowarn
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-nowarn[:numberList]
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L' -nowarn opzione fa sì che il compilatore non generi avvisi. Per escludere un singolo avviso, fornire l'ID avviso
all' -nowarn opzione che segue i due punti. Separare più numeri di avviso con virgole.
È necessario specificare solo la parte numerica dell'identificatore di avviso. Se ad esempio si desidera disattivare
BC42024, viene visualizzato l'avviso relativo alle variabili locali non utilizzate -nowarn:42024 .
Per ulteriori informazioni sui numeri ID avviso, vedere Configuring Warnings in Visual Basic.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda Compila .
3. Selezionare la casella di controllo Disabilita tutti gli avvisi per disabilitare tutti gli avvisi.
- oppure -
Per disabilitare un avviso particolare, fare clic su nessuno nell'elenco a discesa accanto all'avviso.
Esempio
Il codice seguente compila T2.vb e non visualizza alcun avviso.
Esempio
Il codice seguente compila T2.vb e non Visualizza gli avvisi per le variabili locali non usate (42024).
Sintassi
-nowin32manifest
Osservazioni
Quando viene usata questa opzione, l'applicazione è soggetta a virtualizzazione in Windows Vista a meno che
non venga specificato un manifesto dell'applicazione in un file di risorsa Win32 file o durante una istruzione di
compilazione successiva. Per altre informazioni sulla virtualizzazione, vedere Distribuzione ClickOnce in
Windows Vista.
Per altre informazioni sulla creazione di manifesti, vedere -win32manifest (Visual Basic).
Vedi anche
Compilatore della riga di comando di Visual Basic
Application Page, Project Designer (Visual Basic)
-optimize
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-optimize[ + | - ]
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Le ottimizzazioni del compilatore consentono di ridurre le dimensioni del file di output rendendolo più veloce ed
efficiente. Tuttavia, poiché le ottimizzazioni generano una riorganizzazione del codice nel file di output,
-optimize+ può rendere difficile il debug.
Tutti i moduli generati con -target:module per un assembly devono usare le stesse -optimize impostazioni
dell'assembly. Per ulteriori informazioni, vedere -target (Visual Basic).
È possibile combinare le -optimize -debug Opzioni e.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
Esempio
Il codice seguente compila T2.vb e Abilita le ottimizzazioni del compilatore.
Vedi anche
Compilatore della riga di comando di Visual Basic
-debug (Visual Basic)
Esempi di righe di comando di compilazione
-target (Visual Basic)
-optioncompare
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-optioncompare:{binary | text}
Osservazioni
È possibile specificare -optioncompare in uno dei due formati seguenti: -optioncompare:binary per usare i
confronti di stringhe binarie e -optioncompare:text per usare i confronti di stringhe di testo. Per impostazione
predefinita, il compilatore utilizza -optioncompare:binary .
In Microsoft Windows la tabella codici corrente determina l'ordinamento binario. Un ordinamento binario tipico
è il seguente:
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
I confronti di stringhe basati su testo sono basati su un ordinamento del testo senza distinzione tra maiuscole e
minuscole determinato dalle impostazioni locali del sistema. Di seguito è riportato un tipico ordinamento del
testo:
(A = a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø)
Esempio
Il codice seguente compila ProjFile.vb e usa i confronti di stringhe binarie.
Vedi anche
Compilatore della riga di comando di Visual Basic
-optionexplicit
-optionstrict
-optioninfer
Esempi di righe di comando di compilazione
Istruzione Option Compare
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
-optionexplicit
05/03/2021 • 2 minutes to read • Edit Online
Fa in modo che il compilatore segnali errori se le variabili non vengono dichiarate prima di essere utilizzate.
Sintassi
-optionexplicit[+ | -]
Argomenti
+ | -
facoltativo. Specificare -optionexplicit+ per richiedere la dichiarazione esplicita delle variabili. L'
-optionexplicit+ opzione è l'impostazione predefinita ed è uguale a -optionexplicit . L' -optionexplicit-
opzione consente la dichiarazione implicita delle variabili.
Commenti
Se il file di codice sorgente contiene un' istruzione Option Explicit, l'istruzione sostituisce l' -optionexplicit
impostazione del compilatore da riga di comando.
Per impostare -optionexplicit (nell'IDE di Visual Studio
1. Selezionare un progetto in Esplora soluzioni . Scegliere Proprietà dal menu Progetto .
2. Fare clic sulla scheda Compila .
3. Modificare il valore nella casella Option Explicit .
Esempio
Il codice seguente viene compilato quando -optionexplicit- si usa.
Module Module1
Sub Main()
i = 99
System.Console.WriteLine(i)
End Sub
End Module
Vedi anche
Compilatore della riga di comando di Visual Basic
-optioncompare
-optionstrict
-optioninfer
Esempi di righe di comando di compilazione
Istruzione Option Explicit
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
-optioninfer
05/03/2021 • 2 minutes to read • Edit Online
Consente di usare l'inferenza del tipo di variabile locale nelle dichiarazioni di variabile.
Sintassi
-optioninfer[+ | -]
Argomenti
T ERM IN E DEF IN IZ IO N E
NOTE
È possibile usare l'opzione -noconfig per mantenere le impostazioni predefinite interne del compilatore anziché quelle
specificate in vbc.rsp. Il valore predefinito del compilatore per questa opzione è -optioninfer- .
Commenti
Se il file di codice sorgente contiene un' istruzione Option deduce, l'istruzione sostituisce l' -optioninfer
impostazione del compilatore da riga di comando.
Per impostare -optioninfer (nell'IDE di Visual Studio
1. Selezionare un progetto in Esplora soluzioni . Scegliere Proprietà dal menu Progetto .
2. Nella scheda Compila , modificare il valore nella casella Option dedurre .
Esempio
Il codice seguente compila test.vb con l'inferenza del tipo locale abilitata.
Vedi anche
Compilatore della riga di comando di Visual Basic
-optioncompare
-optionexplicit
-optionstrict
Esempi di righe di comando di compilazione
Option Infer (istruzione)
Inferenza del tipo di variabile locale
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
Compilazione (pagina), Creazione progetti (Visual Basic)
-noconfig
Compilazione dalla riga di comando
-optionstrict
05/03/2021 • 2 minutes to read • Edit Online
Applica una semantica dei tipi rigorosa per limitare le conversioni implicite dei tipi.
Sintassi
-optionstrict[+ | -]
-optionstrict[:custom]
Argomenti
+ | -
facoltativo. L' -optionstrict+ opzione limita la conversione implicita di tipi. Il valore predefinito per questa
opzione è -optionstrict- . L' -optionstrict+ opzione è uguale a -optionstrict . È possibile utilizzare
entrambi per la semantica di tipo permissivo.
custom
Obbligatorio. Avvisa quando la semantica del linguaggio strict non viene rispettata.
Commenti
Quando -optionstrict+ è attivo, è possibile effettuare in modo implicito solo le conversioni verso un tipo più
ampio. Le conversioni implicite di tipi più piccoli, ad esempio l'assegnazione Decimal di un oggetto tipo a un
oggetto di tipo Integer, vengono segnalate come errori.
Per generare avvisi per le conversioni implicite di tipi più restrittivi, usare -optionstrict:custom . Utilizzare
-nowarn:numberlist per ignorare determinati avvisi e -warnaserror:numberlist considerare determinati avvisi
come errori.
Per impostare -optionstrict (nell'IDE di Visual Studio
1. Selezionare un progetto in Esplora soluzioni . Scegliere Proprietà dal menu progetto .
2. Fare clic sulla scheda Compila .
3. Modificare il valore nella casella Option Strict .
Per impostare -optionstrict (a livello di codice
Vedere istruzione Option Strict.
Esempio
Il codice seguente viene compilato Test.vb usando la semantica di tipo strict.
Vedi anche
Compilatore della riga di comando di Visual Basic
-optioncompare
-optionexplicit
-optioninfer
-nowarn
-warnaserror (Visual Basic)
Esempi di righe di comando di compilazione
Option Strict Statement
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
-out (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-out:filename
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Specificare il nome completo e l'estensione del file da creare. In caso contrario, il file con estensione exe prende
il nome dal file del codice sorgente contenente la Sub Main stored procedure e il file con estensione dll prende il
nome dal primo file di codice sorgente.
Se si specifica un nome di file senza estensione exe o dll, il compilatore aggiunge automaticamente l'estensione,
a seconda del valore specificato per l' -target opzione del compilatore.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda applicazione .
3. modificare il valore nella casella nome assembly .
Esempio
Il codice seguente compila T2.vb e crea il file di output T2.exe .
Vedi anche
Compilatore della riga di comando di Visual Basic
-target (Visual Basic)
Esempi di righe di comando di compilazione
-Platform (Visual Basic)
05/03/2021 • 5 minutes to read • Edit Online
Consente di specificare la versione di Common Language Runtime (CLR) in grado di eseguire il file di output.
Sintassi
-platform:{ x86 | x64 | Itanium | arm | anycpu | anycpu32bitpreferred }
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Per specificare il tipo di processore di destinazione del file di output, usare l'opzione -platform .
In genere, gli assembly .NET Framework scritti in Visual Basic vengono sempre eseguiti, indipendentemente
dalla piattaforma. L'elaborazione di alcuni elementi può tuttavia risultare influenzata dalla piattaforma in uso. I
casi più comuni sono:
Strutture contenenti membri che cambiano dimensione in base alla piattaforma, ad esempio tutti i tipi
puntatore.
Operazioni aritmetiche che includono dimensioni costanti.
Dichiarazioni pInvoke o COM non corrette che usano Integer anziché IntPtr per gli handle.
Casting di IntPtr su Integer .
Uso dell'interoperabilità pInvoke o COM con componenti non disponibili in tutte le piattaforme.
L'opzione -Platform consente di attenuare alcuni problemi se si è certi di aver fatto supposizioni
sull'architettura in cui viene eseguito il codice. In particolare:
Se si specifica l'opzione per una piattaforma a 64 bit e l'applicazione viene eseguita su un computer a 32
bit, il messaggio di errore verrà visualizzato con maggiore anticipo e sarà maggiormente descrittivo del
problema specifico rispetto all'errore che si verifica senza usare questa opzione.
Se si imposta il flag x86 e successivamente si usa un computer a 64 bit per l'elaborazione
dell'applicazione, questa verrà eseguita nel sottosistema WOW e non a livello nativo.
In un sistema operativo Windows a 64 bit:
Gli assembly compilati con l'opzione -platform:x86 potranno essere eseguiti da CLR a 32 bit in WOW64.
Gli eseguibili compilati con l'opzione -platform:anycpu potranno essere eseguiti da CLR a 64 bit.
Una DLL compilata con l'opzione -platform:anycpu potrà essere eseguita dallo stesso CLR del processo
in cui viene caricata.
Gli eseguibili compilati con l'opzione -platform:anycpu32bitpreferred potranno essere eseguiti da CLR a
32 bit.
Per ulteriori informazioni sullo sviluppo di un'applicazione per l'esecuzione in una versione a 64 bit di Windows,
vedere applicazioni a 64 bit.
Per impostare -Platform nell'IDE di Visual Studio
1. In Esplora soluzioni scegliere il progetto, aprire il menu progetto , quindi fare clic su proprietà .
2. Nella scheda Compila selezionare o deselezionare la casella di controllo preferisci 32 bit oppure
selezionare un valore nell'elenco CPU di destinazione .
Per ulteriori informazioni, vedere compilazione pagina, Progettazione progetti (Visual Basic).
Esempio
L'esempio seguente mostra come usare l'opzione del compilatore -platform .
Vedi anche
-target (Visual Basic)
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-quiet
05/03/2021 • 2 minutes to read • Edit Online
Impedisce al compilatore di visualizzare codice per avvisi ed errori relativi alla sintassi.
Sintassi
-quiet
Osservazioni
Per impostazione predefinita, l'opzione -quiet non è attiva. Quando il compilatore segnala un errore o un
avviso correlato alla sintassi, restituisce anche la riga dal codice sorgente. Per le applicazioni che analizzano
l'output del compilatore, potrebbe essere più pratico per il compilatore restituire solo il testo della diagnostica.
Nell'esempio seguente viene Module1 restituito un errore che include il codice sorgente quando viene
compilato senza -quiet .
Module Module1
Sub Main()
x()
End Sub
End Module
Output:
C:\projects\vb2.vb(3) : error BC30451: 'x' is not declared. It may be inaccessible due to its protection
level.
x()
~
NOTE
L' -quiet opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il codice seguente compila T2.vb e non Visualizza il codice per la diagnostica del compilatore correlato alla
sintassi:
Compila i file del codice sorgente in tutte le directory figlio della directory specificata o della directory del
progetto.
Sintassi
-recurse:[dir\]file
Argomenti
dir
facoltativo. La directory in cui si vuole che abbia inizio la ricerca. Se non specificato, la ricerca inizia nella
directory del progetto.
file
Obbligatorio. I file da cercare. È consentito l'utilizzo di caratteri jolly.
Commenti
È possibile usare caratteri jolly in un nome file per compilare tutti i file corrispondenti nella directory del
progetto senza usare -recurse . Se non viene specificato alcun nome file di output, il compilatore basa il nome
del file di output sul primo file di input elaborato. Si tratta in genere del primo file nell'elenco di file compilato
quando viene visualizzato in ordine alfabetico. Per questo motivo, è preferibile specificare un file di output
usando l' -out opzione.
NOTE
L' -recurse opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il comando seguente compila tutti i file di Visual Basic nella directory corrente.
vbc *.vb
Il comando seguente compila tutti i file di Visual Basic nella Test\ABC Directory e in tutte le directory
sottostanti, quindi genera Test.ABC.dll .
Vedi anche
Compilatore della riga di comando di Visual Basic
-out (Visual Basic)
Esempi di righe di comando di compilazione
-Reference (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Fa in modo che il compilatore renda le informazioni sul tipo negli assembly specificati disponibili per il progetto
attualmente in fase di compilazione.
Sintassi
-reference:fileList
oppure
-r:fileList
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
I file importati devono contenere i metadati dell'assembly. Solo i tipi pubblici sono visibili all'esterno
dell'assembly. L'opzione -addmodule importa i metadati da un modulo.
Se si fa riferimento a un assembly (assembly A) che a sua volta fa riferimento a un altro assembly (assembly B),
è necessario fare riferimento all'assembly B se:
Un tipo dell'assembly A eredita da un tipo o implementa un'interfaccia dall'assembly B.
Viene richiamato un campo, una proprietà, un evento o un metodo che presenta un tipo restituito o un
tipo di parametro proveniente dall'assembly B.
Usare -LIBPATH per specificare la directory in cui si trova uno o più riferimenti ad assembly.
Affinché il compilatore riconosca un tipo in un assembly (non un modulo), è necessario forzare la risoluzione del
tipo. Un esempio di come è possibile eseguire questa operazione consiste nel definire un'istanza del tipo. Sono
disponibili altri modi per risolvere i nomi dei tipi in un assembly per il compilatore. Se, ad esempio, si eredita da
un tipo in un assembly, il nome del tipo diventa noto al compilatore.
Per impostazione predefinita, viene usato il file di risposta vbc. rsp, che fa riferimento a assembly .NET
Framework di uso comune. Usare -noconfig se non si vuole che il compilatore usi vbc. rsp.
La forma breve di -reference è -r .
Esempio
Il comando seguente compila il file di origine Input.vb e gli assembly di riferimento da Metad1.dll e
Metad2.dll per produrre Out.exe .
Vedi anche
Compilatore della riga di comando di Visual Basic
-noconfig
-target (Visual Basic)
Pubblica
Esempi di righe di comando di compilazione
-refonly (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
L'opzione -refonly indica che l'output primario della compilazione deve essere un assembly di riferimento
invece di un assembly di implementazione. Il parametro -refonly disabilita automaticamente l'output dei file
PDB poiché non è possibile eseguire gli assembly di riferimento.
Ogni opzione del compilatore è disponibile in due forme: -opzione e (opzione) . La documentazione mostra
solo la forma -opzione.
Sintassi
-refonly
Osservazioni
Visual Basic supporta l' -refonly opzione che inizia con la versione 15,3.
Gli assembly di riferimento sono un tipo speciale di assembly che contiene solo la quantità minima di metadati
necessaria per rappresentare la superficie dell'API pubblica della libreria. Sono incluse le dichiarazioni per tutti i
membri significativi quando si fa riferimento a un assembly negli strumenti di compilazione, ma si escludono
tutte le implementazioni e le dichiarazioni dei membri privati che non hanno alcun impatto osservabile sul
contratto API. Per ulteriori informazioni, vedere assembly di riferimento nella Guida di .NET.
Le -refonly Opzioni e si escludono a -refout vicenda.
Vedi anche
-refout
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-refout (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
L'opzione -refout specifica un percorso file in cui l'assembly di riferimento deve essere restituito come output.
Ogni opzione del compilatore è disponibile in due forme: -opzione e (opzione) . La documentazione mostra
solo la forma -opzione.
Sintassi
-refout:filepath
Argomenti
filepath
Percorso e nome del file dell'assembly di riferimento. In genere dovrebbe trovarsi in una sottocartella
dell'assembly primario. La convenzione consigliata (usata da MSBuild) consiste nell'inserire l'assembly di
riferimento in una sottocartella "ref /" relativa all'assembly primario. Tutte le cartelle in filepath devono
esistere; il compilatore non le crea.
Commenti
Visual Basic supporta l' -refout opzione che inizia con la versione 15,3.
Gli assembly di riferimento sono un tipo speciale di assembly che contiene solo la quantità minima di metadati
necessaria per rappresentare la superficie dell'API pubblica della libreria. Sono incluse le dichiarazioni per tutti i
membri significativi quando si fa riferimento a un assembly negli strumenti di compilazione, ma si escludono
tutte le implementazioni e le dichiarazioni dei membri privati che non hanno alcun impatto osservabile sul
contratto API. Per ulteriori informazioni, vedere assembly di riferimento nella Guida di .NET.
Le -refout Opzioni e si escludono a -refonly vicenda.
Vedi anche
-refonly
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-removeintchecks
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-removeintchecks[+ | -]
Argomenti
T ERM IN E DEF IN IZ IO N E
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda Compila .
3. fare clic sul pulsante Avanzate .
4. modificare il valore della casella di controllo Rimuovi overflow di Integer .
Esempio
Il codice seguente compila Test.vb e disattiva il controllo degli errori di overflow di Integer.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-Resource (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-resource:filename[,identifier[,public|private]]
oppure
-res:filename[,identifier[,public|private]]
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Usare -linkresource per collegare una risorsa a un assembly senza inserire il file di risorse nel file di output.
Se filename è un file di risorse .NET Framework creato, ad esempio dal Resgen.exe (Generatore di file di risorse)
o nell'ambiente di sviluppo, è possibile accedervi con membri nello System.Resources spazio dei nomi
ResourceManager . per ulteriori informazioni, vedere. Per accedere a tutte le altre risorse in fase di esecuzione,
usare uno dei metodi seguenti: GetManifestResourceInfo , GetManifestResourceNames o
GetManifestResourceStream .
La forma breve di -resource è -res .
Per informazioni su come impostare -resource nell'IDE di Visual Studio, vedere gestione delle risorse
dell'applicazione (.NET).
Esempio
Il codice seguente compila In.vb e connette il file di risorse Rf.resource .
vbc -res:rf.resource in.vb
Vedi anche
Compilatore della riga di comando di Visual Basic
-win32resource
-linkresource ((Visual Basic)
-target (Visual Basic)
Esempi di righe di comando di compilazione
-rootnamespace
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-rootnamespace:namespace
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Se si usa il file eseguibile di Visual Studio (Devenv.exe) per compilare un progetto creato nell'Integrated
Development Environment di Visual Studio, usare -rootnamespace per specificare il valore della RootNamespace
Proprietà. Per ulteriori informazioni, vedere Opzioni della riga di comando devenv .
Usare il disassembler MSIL di Common Language Runtime ( Ildasm.exe ) per visualizzare i nomi degli spazi dei
nomi nel file di output.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda applicazione .
3. modificare il valore nella casella spazio dei nomi radice .
Esempio
Il codice seguente compila In.vb e racchiude tutte le dichiarazioni di tipo nello spazio dei nomi mynamespace .
Vedi anche
Compilatore della riga di comando di Visual Basic
Ildasm.exe (disassembler IL)
Esempi di righe di comando di compilazione
-sdkpath
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-sdkpath:path
Argomenti
path
Directory contenente le versioni di mscorlib.dll e Microsoft.VisualBasic.dll da utilizzare per la compilazione.
Questo percorso non viene verificato fino a quando non viene caricato. Racchiudere il nome della directory tra
virgolette ("") se contiene uno spazio.
Commenti
Questa opzione indica al compilatore Visual Basic di caricare i file di mscorlib.dll e Microsoft.VisualBasic.dll da un
percorso non predefinito. L' -sdkpath opzione è stata progettata per essere utilizzata con -netcf (. Il .NET
Compact Framework utilizza versioni diverse di queste librerie di supporto per evitare l'utilizzo di tipi e
funzionalità del linguaggio non disponibili nei dispositivi.
NOTE
L' -sdkpath opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando. L' -sdkpath opzione viene impostata quando viene caricato un progetto Visual
Basic dispositivo.
È possibile specificare che il compilatore deve eseguire la compilazione senza un riferimento alla libreria di
runtime Visual Basic usando l' -vbruntime opzione del compilatore. Per ulteriori informazioni, vedere -
vbruntime.
Esempio
Il codice seguente viene compilato Myfile.vb con il .NET Compact Framework, usando le versioni di
Mscorlib.dll e Microsoft.VisualBasic.dll disponibili nella directory di installazione predefinita del .NET Compact
Framework nell'unità C. In genere, si utilizzerà la versione più recente del .NET Compact Framework.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-netcf
-vbruntime
-target (Visual Basic)
05/03/2021 • 8 minutes to read • Edit Online
Sintassi
-target:{exe | library | module | winexe | appcontainerexe | winmdobj}
Osservazioni
Nella tabella seguente sono riepilogati gli effetti dell' -target opzione.
O P Z IO N E C O M P O RTA M EN TO
Sub Main Nei file del codice sorgente compilati in un file con
estensione exe è necessaria una sola procedura. Utilizzare l'
-main opzione del compilatore per specificare la classe che
contiene la Sub Main routine.
Sub Main Nei file del codice sorgente compilati in un file con
estensione exe è necessaria una sola procedura. Nei casi in
cui il codice ha più di una classe che include una Sub Main
routine, usare l' -main opzione del compilatore per
specificare la classe che contiene la Sub Main routine.
Sub Main Nei file del codice sorgente compilati in un file con
estensione exe è necessaria una sola procedura. Se il codice
contiene più di una classe che include una Sub Main
routine, utilizzare l' -main opzione del compilatore per
specificare la classe che contiene la Sub Main routine.
O P Z IO N E C O M P O RTA M EN TO
A meno che non si specifichi -target:module , -target comporta l'aggiunta di un manifesto dell'assembly .NET
Framework a un file di output.
Ogni istanza di Vbc.exe produce al massimo un file di output. Se si specifica un'opzione del compilatore, ad
esempio -out o -target più di una volta, viene applicata l'ultima elaborazione del compilatore. Le
informazioni su tutti i file in una compilazione vengono aggiunte al manifesto. Tutti i file di output, ad eccezione
di quelli creati con -target:module , contengono i metadati dell'assembly nel manifesto. Usare Ildasm.exe
(DISASSEMBLER il) per visualizzare i metadati in un file di output.
La forma breve di -target è -t .
Per impostare -target nell'IDE di Visual Studio
1. Selezionare un progetto in Esplora soluzioni . Scegliere Proprietà dal menu Progetto .
2. Fare clic sulla scheda Applicazione .
3. Modificare il valore nella casella tipo di applicazione .
Esempio
Il codice seguente compila in.vb , creando in.dll :
Vedi anche
Compilatore della riga di comando di Visual Basic
-principale
-out (Visual Basic)
-Reference (Visual Basic)
-addmodule
-moduleassemblyname
Assembly in .NET
Esempi di righe di comando di compilazione
-subsystemversion (Visual Basic)
18/03/2021 • 3 minutes to read • Edit Online
Specifica la versione minima del sottosistema in cui è possibile eseguire il file eseguibile generato,
determinando le versioni di Windows in cui è possibile eseguire il file eseguibile. In genere, questa opzione
assicura che il file eseguibile possa sfruttare le funzionalità di protezione che non sono disponibili con le versioni
precedenti di Windows.
NOTE
Per specificare il sottosistema stesso, usare l'opzione del compilatore -target.
Sintassi
-subsystemversion:major.minor
Parametri
major.minor
Versione minima richiesta per il sottosistema, espressa in una notazione del punto per le versioni principali e
secondarie. Ad esempio, è possibile specificare che un'applicazione non può essere eseguita su un sistema
operativo precedente a Windows 7 Se si imposta il valore di questa opzione su 6.01, come descritto nella tabella
più avanti in questo argomento. È necessario specificare i valori per major e minor come numeri interi.
Gli zeri iniziali della versione minor non modificano la versione, a differenza degli zeri finali. Ad esempio, 6.1 e
6.01 si fanno riferimento alla stessa versione, ma 6.10 fa riferimento a una versione diversa. È consigliabile
esprimere la versione secondaria con due cifre per evitare confusione.
Commenti
Nella tabella seguente sono elencate le versioni comuni del sottosistema di Windows.
Windows XP 5,01
Windows 7 6.01
Windows 8 6.02
Valori predefiniti
Il valore predefinito dell'opzione del compilatore -subsystemversion dipende dalle condizioni elencate di
seguito:
Il valore predefinito è 6.02 se è impostata un'opzione del compilatore nell'elenco seguente:
-target:appcontainerexe
-target:winmdobj
-platform:arm
Il valore predefinito è 6.00 se si usa MSBuild, se la destinazione è .NET Framework 4.5 e se non è stata
impostata una delle opzioni del compilatore specificate in precedenza in questo elenco.
Il valore predefinito è 4.00 se nessuna di queste condizioni è vera.
Vedi anche
Compilatore della riga di comando di Visual Basic
Proprietà di MSBuild
-utf8output (Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-utf8output[+ | -]
Argomenti
+ | -
facoltativo. Il valore predefinito per questa opzione è -utf8output- , il che significa che l'output del compilatore
non usa la codifica UTF-8. Specificare -utf8output equivale a specificare -utf8output+ .
Commenti
In alcune configurazioni internazionali, l'output del compilatore non può essere visualizzato correttamente nella
console. In tali situazioni, utilizzare -utf8output e reindirizzare l'output del compilatore in un file.
NOTE
L' -utf8output opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue
la compilazione dalla riga di comando.
Esempio
Il codice seguente compila In.vb e indirizza il compilatore per visualizzare l'output usando la codifica UTF-8.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-vbruntime
05/03/2021 • 5 minutes to read • Edit Online
Indica che il compilatore deve compilare senza un riferimento alla libreria di runtime di Visual Basic oppure con
un riferimento a una libreria di runtime specifica.
Sintassi
-vbruntime:{ - | + | * | path }
Argomenti
-
Eseguire la compilazione senza un riferimento alla libreria di runtime Visual Basic.
+
Compilare con un riferimento alla libreria di runtime Visual Basic predefinita.
*
Eseguire la compilazione senza un riferimento alla libreria di runtime Visual Basic e incorporare la funzionalità di
base dalla libreria di runtime Visual Basic nell'assembly.
path
Compilare con un riferimento alla libreria (DLL) specificata.
Commenti
L' -vbruntime opzione del compilatore consente di specificare che il compilatore deve compilare senza un
riferimento alla libreria di Runtime Visual Basic. Se si compila senza un riferimento alla libreria di runtime Visual
Basic, gli errori o gli avvisi vengono registrati nel codice o nei costrutti di linguaggio che generano una chiamata
a un helper del runtime di Visual Basic. Un helper Visual Basic Runtime è una funzione definita in
Microsoft.VisualBasic.dll chiamata in fase di esecuzione per l'esecuzione di una semantica di linguaggio
specifica.
L' -vbruntime+ opzione produce lo stesso comportamento che si verifica se non -vbruntime è specificata
alcuna opzione. È possibile usare l' -vbruntime+ opzione per eseguire l'override delle -vbruntime opzioni
precedenti.
La maggior parte degli oggetti del My tipo non sono disponibili quando si usano le -vbruntime-
-vbruntime:path Opzioni o.
Esempio
Nell'esempio seguente viene illustrato come utilizzare l' -vbruntime opzione per compilare con un riferimento a
una libreria personalizzata.
vbc -vbruntime:C:\VBLibraries\CustomVBLibrary.dll
Vedi anche
Visual Basic Core-nuova modalità di compilazione in Visual Studio 2010 SP1
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-sdkpath
-verbose
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-verbose[+ | -]
Argomenti
+ | -
facoltativo. Specificare -verbose equivale -verbose+ a specificare, che determina la generazione di messaggi
dettagliati da parte del compilatore. Il valore predefinito per questa opzione è -verbose- .
Commenti
L' -verbose opzione Visualizza informazioni sul numero totale di errori emessi dal compilatore, segnala gli
assembly caricati da un modulo e Visualizza i file attualmente in fase di compilazione.
NOTE
L' -verbose opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si esegue la
compilazione dalla riga di comando.
Esempio
Il codice seguente compila In.vb e indirizza il compilatore per visualizzare informazioni dettagliate sullo stato.
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-warnaserror (Visual Basic)
05/03/2021 • 3 minutes to read • Edit Online
Sintassi
-warnaserror[+ | -][:numberList]
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
L'opzione -warnaserror considera tutti gli avvisi come errori. Qualsiasi messaggio segnalato di norma come
avviso viene invece segnalato come errore. Il compilatore segnala le occorrenze successive dello stesso avviso
come avvisi.
Per impostazione predefinita, l'opzione -warnaserror- è attiva, pertanto gli avvisi sono solo informativi. Con
l'opzione -warnaserror , equivalente a -warnaserror+ , gli avvisi vengono considerati errori.
Se si vuole che solo determinati avvisi vengano considerati errori, è possibile specificare un elenco delimitato da
virgole di numeri di avvisi da considerare errori.
NOTE
L'opzione -warnaserror non controlla la modalità di visualizzazione degli avvisi. Usare l'opzione -nowarn per disabilitare
gli avvisi.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda Compila .
3. Assicurarsi che la casella di controllo Disabilita tutti gli avvisi sia deselezionata.
4. Selezionare la casella di controllo Considera tutti gli avvisi come errori .
P ER IM P O STA RE - WA RN A SERRO R IN M O DO DA C O N SIDERA RE AVVISI SP EC IF IC I C O M E ERRO RI N EL L 'IDE DI VISUA L ST UDIO
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda Compila .
3. Assicurarsi che la casella di controllo Disabilita tutti gli avvisi sia deselezionata.
4. Assicurarsi che la casella di controllo Considera tutti gli avvisi come errori sia deselezionata.
5. Selezionare errore nella colonna notifica accanto all'avviso che deve essere considerato come un errore.
Esempio
Il codice seguente compila In.vb e indica al compilatore di visualizzare un errore per la prima occorrenza di
ogni avviso rilevato.
Esempio
Il codice seguente compila T2.vb e considera come errore solo l'avviso per le variabili locali inutilizzate
(42024).
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
Configuring Warnings in Visual Basic
-win32icon
05/03/2021 • 2 minutes to read • Edit Online
Inserisce un file con estensione ICO nel file di output. Il file ico rappresenta il file di output in Esplora file .
Sintassi
-win32icon:filename
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
È possibile creare un file con estensione ico con il compilatore di risorse di Microsoft Windows (RC). Il
compilatore di risorse viene richiamato quando si compila un programma di Visual C++; un file con estensione
ICO viene creato dal file RC. Le opzioni -win32icon e -win32resource si escludono reciprocamente.
Vedere -linkresource ((Visual Basic) per fare riferimento a un file di risorse .NET Framework o -Resource (Visual
Basic) per alleghire un file di risorse .NET Framework. Vedere -win32resource ( per importare un file con
estensione res.
1. è stato selezionato un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto .
2. fare clic sulla scheda applicazione .
3. modificare il valore nella casella icona .
Esempio
Il codice seguente compila In.vb e connette un file con estensione ico Rf.ico .
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
-win32manifest (Visual Basic)
05/03/2021 • 4 minutes to read • Edit Online
Identifica un file manifesto dell'applicazione Win32 definito dall'utente da incorporare nel file eseguibile di tipo
PE di un progetto.
Sintassi
-win32manifest: fileName
Argomenti
T ERM IN E DEF IN IZ IO N E
Commenti
Per impostazione predefinita, il compilatore Visual Basic incorpora un manifesto dell'applicazione che specifica
un livello di esecuzione richiesto di asInvoker. Crea il manifesto nella stessa cartella in cui viene compilato il file
eseguibile, in genere la cartella bin\Debug o bin\Release quando si usa Visual Studio. Se si desidera fornire un
manifesto personalizzato, ad esempio per specificare un livello di esecuzione richiesto di highestAvailable o
requireAdministrator, utilizzare questa opzione per specificare il nome del file.
NOTE
Questa opzione e l'opzione -win32resource ( si escludono a vicenda. Se si tenta di usare entrambe le opzioni nella stessa
riga di comando, si otterrà un errore di compilazione.
Un'applicazione senza un manifesto dell'applicazione che specifica un livello di esecuzione richiesto sarà
soggetta alla virtualizzazione dei file e del Registro di sistema con la funzionalità Controllo account utente in
Windows Vista. Per altre informazioni sulla virtualizzazione, vedere Distribuzione ClickOnce in Windows Vista.
L'applicazione sarà soggetta alla virtualizzazione se si verifica una delle condizioni seguenti:
1. Usare l' -nowin32manifest opzione e non si fornisce un manifesto in un'istruzione di compilazione
successiva o come parte di un file di risorse Windows (res) tramite l' -win32resource opzione.
2. Si indica un manifesto personalizzato che non specifica un livello di esecuzione richiesto.
Visual Studio crea un file manifesto predefinito e lo memorizza nelle directory di debug e versione insieme al
file eseguibile. Per visualizzare o modificare il file app. manifest predefinito, fare clic su Visualizza
impostazioni UAC nella scheda applicazione in Progettazione progetti. Per altre informazioni, vedere
Application Page, Project Designer (Visual Basic).
È possibile fornire il manifesto dell'applicazione come passaggio di post-compilazione personalizzato o come
parte di un file di risorse Win32 utilizzando l' -nowin32manifest opzione. Usare la stessa opzione se si vuole che
l'applicazione sia sottoposta alla virtualizzazione dei file o del Registro di sistema in Windows Vista. In questo
modo si impedisce al compilatore di creare e incorporare un manifesto predefinito nel file PE.
Esempio
Nell'esempio seguente viene illustrato il manifesto predefinito inserito dal compilatore Visual Basic in un file PE.
NOTE
Il compilatore inserisce nel file XML del manifesto un nome applicazione standard MyApplication. app. Si tratta di una
soluzione alternativa per consentire l'esecuzione delle applicazioni in Windows Server 2003 Service Pack 3.
Vedi anche
Compilatore della riga di comando di Visual Basic
-nowin32manifest (Visual Basic)
-win32resource
05/03/2021 • 2 minutes to read • Edit Online
Sintassi
-win32resource:filename
Argomenti
filename
Nome del file di risorse da aggiungere al file di output. Racchiudere il nome file tra virgolette ("") se contiene
uno spazio.
Commenti
È possibile creare un file di risorse Win32 con il compilatore di risorse di Microsoft Windows (RC).
Una risorsa Win32 può contenere informazioni sulla versione o sulla bitmap (icona) che consentono di
identificare l'applicazione in Esplora file . Se non si specifica -win32resource , il compilatore genera le
informazioni sulla versione in base alla versione dell'assembly. Le opzioni -win32resource e -win32icon si
escludono reciprocamente.
Vedere -linkresource ((Visual Basic) per fare riferimento a un file di risorse .NET Framework o -Resource (Visual
Basic) per alleghire un file di risorse .NET Framework.
NOTE
L' -win32resource opzione non è disponibile nell'ambiente di sviluppo di Visual Studio. è disponibile solo quando si
esegue la compilazione dalla riga di comando.
Esempio
Il codice seguente compila In.vb e connette un file di risorse Win32 Rf.res :
Vedi anche
Compilatore della riga di comando di Visual Basic
Esempi di righe di comando di compilazione
Visual Basic opzioni del compilatore elencate per
categoria
18/03/2021 • 8 minutes to read • Edit Online
Il Visual Basic compilatore della riga di comando viene fornito come alternativa alla compilazione di programmi
dall'interno di Visual Studio Integrated Development Environment (IDE). Di seguito è riportato un elenco delle
opzioni del compilatore da riga di comando Visual Basic ordinate in base alla categoria funzionale.
Ogni opzione del compilatore è disponibile in due forme: -opzione e (opzione) . La documentazione mostra
solo la forma -opzione.
Optimization
O P Z IO N E SC O P O
File di output
O P Z IO N E SC O P O
assembly .NET
O P Z IO N E SC O P O
Guida
O P Z IO N E SC O P O
Linguaggio
O P Z IO N E SC O P O
Preprocessore
O P Z IO N E SC O P O
Risorse
O P Z IO N E SC O P O
Varie
O P Z IO N E SC O P O
-codepage Specifica la tabella codici da usare per tutti i file del codice
sorgente nella compilazione.
Vedi anche
Opzioni del compilatore Visual Basic in ordine alfabetico
Gestire le proprietà di progetti e soluzioni
Informazioni di riferimento su .NET Framework
(Visual Basic)
05/03/2021 • 2 minutes to read • Edit Online
In questo argomento vengono forniti i collegamenti alle informazioni sull'utilizzo della libreria di classi .NET
Framework.
Sezioni correlate
Per iniziare
Offre una panoramica completa di .NET Framework, oltre ai collegamenti a risorse aggiuntive.
Panoramica della libreria di classi
Introduce le classi, le interfacce e i tipi di valore che consentono di velocizzare e ottimizzare il processo di
sviluppo e di fornire l'accesso alle funzionalità di sistema.
Guida allo sviluppo
Viene fornita una guida a tutte le aree e attività principali per lo sviluppo di applicazioni, tra cui la creazione, la
configurazione, il debug, la sicurezza e la distribuzione dell'applicazione. Questo argomento fornisce anche
informazioni su programmazione dinamica, interoperabilità, estendibilità, gestione della memoria e Threading.
Strumenti
Vengono descritti gli strumenti che è possibile utilizzare per sviluppare, configurare e distribuire applicazioni
utilizzando tecnologie .NET Framework.
Browser per le API .NET
Fornisce sintassi, esempi di codice e informazioni correlate per ogni classe negli spazi dei nomi .NET Framework.
Specifica del linguaggio Visual Basic
05/03/2021 • 2 minutes to read • Edit Online
La specifica del linguaggio Visual Basic è l'origine autorevole per rispondere a tutte le domande sulla
grammatica e sulla sintassi di Visual Basic. Contiene informazioni dettagliate sul linguaggio, inclusi molti punti
non trattati nella documentazione di riferimento Visual Basic.
La specifica è disponibile nell'Area download Microsoft.
Questo sito contiene la specifica Visual Basic 11. Viene creata dai file markdown contenuti nel repository GitHub
dotnet/vblang.
Le segnalazioni dei problemi relativi alla specifica devono essere create nell'archivio dotnet/vblang. In
alternativa, se si è interessati a correggere eventuali errori riscontrati, è possibile inviare una richiesta pull allo
stesso repository.
Vedi anche
Riferimenti al linguaggio Visual Basic
AVA N TI
Procedure dettagliate relative al linguaggio Visual
Basic
22/03/2020 • 5 minutes to read • Edit Online
Le procedure dettagliate forniscono istruzioni specifiche per scenari comuni, che li rende un ottimo strumento
per apprendere l'utilizzo del prodotto o di una determinata area funzionale.
Scrittura di un programma asincrono
Viene illustrato come creare una soluzione asincrona utilizzando Async e Await.
Dichiarazione e generazione di eventi
Illustra come dichiarare e generare eventi in Visual Basic.
Gestione degli eventiHandling Events
Spiega come gestire gli eventi usando la parola chiave standard WithEvents o le nuove parole chiave
AddHandler / RemoveHandler .