2012-07-08 13 views
5

Ciao, sto imparando VB.net per un nuovo lavoro che in precedenza era stato un C#. Ho appena scoperto una caratteristica interessante di VB.net. Posso fare riferimento a oggetti su un secondo modulo che non è stato istallato!oggetti non integrati di riferimento in vb.net

Quindi da Form1 posso ottenere la proprietà Text di TextBox1 di Form2 come segue

Dim txt As String = Form2.TextBox1.Text 

Qualcuno può spiegare come funziona? Tutte le forme sono istallate all'inizio del programma e quindi la loro visibilità viene attivata durante tutta la durata del programma?

+0

possibile duplicato di [C'è un'istanza predefinita di modulo in VB.Net ma non in C#, PERCHÉ?] (Http://stackoverflow.com/questions/4698538/there-is-a-default-instance-of -form-in-vb-net-ma-not-in-c-why) –

risposta

6

Le forme in VB sono un caso speciale. Il compilatore genera un elenco di moduli fortemente tipizzati nello spazio My.Forms object dello spazio dei nomi My. Ogni modulo è esposto come una proprietà My.Forms.TheNameOfTheForm. Queste proprietà restituiscono sempre istanze valide, ad esempio se un modulo non è stato istanziato prima, lo sarà quando si utilizza la proprietà per la prima volta.

Finora, tutto bene.

Ma Microsoft ha anche fatto la morte cerebrale (!) La decisione di importare le proprietà dall'oggetto My.Forms per impostazione predefinita, ovunque, e non c'è niente che puoi fare. Superficialmente, questo è per ragioni di retrocompatibilità per VB6, ma questo è un non senso dal momento che VB7 (.NET 1.0) non ha questa caratteristica, è venuto solo più tardi.

Ma proprio per chiarire:

sono tutte forme instatiated all'inizio del programma ...?

No, per fortuna no. Vengono istanziati la prima volta che accedi alla proprietà.

+0

+1. Ma Microsoft ** ha ** aggiunto la funzionalità per la compatibilità all'indietro con VB6. L'hanno perso dal primo VB.Net, ma hanno aggiunto altre funzionalità nelle prossime versioni per aumentare la compatibilità con le versioni precedenti. – MarkJ

+0

Vale anche la pena notare che il modulo verrà riattivato automaticamente quando si fa riferimento a una proprietà, anche dopo aver impostato il riferimento su nulla. – MarkJ

+0

Questo rende la conversione da VB6 molto semplice, ma richiede solo un'attenzione particolare al programmatore per NON usare questa funzione per errore. –