Condividi tramite


Raccomandazioni sull'aggiornamento: risoluzione delle proprietà predefinite senza parametri

Aggiornamento: novembre 2007

In Visual Basic 6.0 molti oggetti dispongono di proprietà predefinite, la cui omissione rappresenta un'alternativa rapida di programmazione. TextBox, ad esempio, dispone di una proprietà predefinita Text; pertanto, anziché scrivere:

MsgBox Form1.Text1.Text

è possibile utilizzare l'alternativa rapida:

MsgBox Form1.Text1

La proprietà predefinita si risolve alla compilazione del codice. È inoltre possibile utilizzare le proprietà predefinite con oggetti per cui è prevista l'associazione tardiva, come nell'esempio seguente:

Dim obj As Object
Set obj = Form1.Text1
MsgBox obj

Nell'esempio di associazione tardiva, la proprietà predefinita si risolve in fase di esecuzione e l'oggetto MsgBox visualizza il valore della proprietà predefinita di TextBox come Text1.

In Visual Basic 2008 non sono supportate le proprietà predefinite senza parametri e non è quindi consentita questa alternativa rapida di programmazione. Quando il progetto viene aggiornato, in Visual Basic 2008 sono risolte le proprietà predefinite senza parametri, ma gli utilizzi di associazione tardiva basati sulla risoluzione runtime non possono essere risolti automaticamente. In questi casi, occorre modificare manualmente il codice. Un'ulteriore complicazione è data dal fatto che diverse librerie implementano le proprietà predefinite utilizzando la proprietà _Default, che funziona come proxy e passa le chiamate alla proprietà predefinita vera e propria. In questo modo, quando si aggiorna il progetto, alcune proprietà predefinite vengono risolte in _Default. Il codice funzionerà normalmente, ma sarà meno comprensibile del codice scritto esplicitamente utilizzando l'effettiva proprietà. Per questi motivi, evitare l'utilizzo di proprietà predefinite senza parametri nel codice Visual Basic 6.0. Invece di scrivere:

Dim obj As Object
Set obj = Me.Text1
'BAD: Relying on default property
MsgBox obj
'BAD: Relying on default property
MsgBox Me.Text1

utilizzare:

Dim obj As TextBox
Set obj = Me.Text1
'GOOD: Default property is resolved
MsgBox obj.Text
'GOOD: Default property is resolved
MsgBox Me.Text1.Text

In Visual Basic 2008, benché non siano supportate le proprietà predefinite senza parametri, sono supportate quelle con parametri. Per comprendere la differenza tra i due tipi, tenere presente che le proprietà predefinite con parametri dispongono sempre di un indice. Un esempio è dato dalla proprietà predefinita del recordset ADO, ossia l'insieme Fields. Il codice:

Dim rs As ADODB.Recordset
rs("CompanyName") = "SomeCompany"
rs!CompanyName = "SomeCompany"

è un'alternativa rapida per:

Dim rs As ADODB.Recordset
rs.Fields("CompanyName").Value = "SomeCompany"
rs.Fields!CompanyName.Value = "SomeCompany"

In questo caso la proprietà Fields dispone di parametri e può quindi essere utilizzata in Visual Basic 2008; la proprietà predefinita Fields della proprietà Value, invece, non dispone di parametri e l'utilizzo corretto in Visual Basic 2008 è il seguente:

Dim rs As ADODB.Recordset
rs("CompanyName").Value = "SomeCompany"
rs!CompanyName.Value = "SomeCompany"

Questo esempio e la maggior parte delle altre proprietà predefinite vengono risolti con l'aggiornamento del progetto, pertanto la loro risoluzione in Visual Basic 6.0 rappresenta semplicemente un metodo di programmazione corretto. È tuttavia necessario evitare di utilizzare le proprietà predefinite con i tipi di dati Object e Variant in quanto non possono essere risolti e costringono alla correzione manuale del codice nel progetto aggiornato.

Vedere anche

Altre risorse

Raccomandazioni relative al linguaggio in funzione dell'aggiornamento