Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VB.NET] Differenza tra sintassi di Istanziazione

    Salve ragazzi, qualcuno saprebbe dirmi se esiste una reale differenza, ed in caso
    quale, tra i due modi di istanziare un oggetto in VB.NET:

    codice:
    'Primo modo
    Dim MyClassObject as Class = New Class()
    
    'Secondo modo
    Dim MyClassObject as New Class()
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Immagino che al posto di Class() ci sia in realtà il vero nome della classe.
    (Altrimenti non compila.....)
    Rispondendo alla tua domanda (con la premessa di cui sopra) : nessuna differenza reale.
    La riprova si ha convertendo il codice in C#. Entrambe le dichiarazioni diventano
    codice:
    public class Main
    {
    //Primo modo
    	Pippo MyClassObject1 = new Pippo();
    
    //Secondo modo
    	Pippo MyClassObject2 = new Pippo();
    
    	public Main()
    	{
    
    	}
    }
    
    public class Pippo
    {
    	public void Pippo()
    	{
    
    	}
    }
    Ciao, Brainjar

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    la differenza sta che il vb.net mantiene l'orribile sintassi del vecchio vb che ti da l'opportunità di dichiarare un oggetto senza il tipo ma lasciando che il compilatore ne associ uno compatibile..

    in sostanza non cambia nulla.. per la correttezza si

  4. #4
    Effettivamente se volessi usare il polimorfismo con la seconda sintassi non potrei
    ma in tutti gli altri casi mi sembra sia più pratico scrivere nel secondo modo, in ogni caso
    il tipo di classe alla quale si riferisce l'oggetto è specificato dopo l'operatore New.
    Detto questo specifico che il vb.net non mi piace per nulla.

    @Brainjar
    che un traduttore traduca il codice in c# nello stesso modo non mi consola molto
    già che in c# il problema non si pone visto che non puoi usare la seconda sintassi.
    Però mi hai indicato dove cercare la risposta giusta

  5. #5
    Ok confermo che non c'è nessuna differenza, infatti il codice IL generato è identico:

    Codice VB
    codice:
       Dim objSintassi1 As System.Text.StringBuilder = New System.Text.StringBuilder()
       Dim objSintassi2 As New System.Text.StringBuilder
    Codice IL
    codice:
      .locals init ([1] class [mscorlib]System.Text.StringBuilder objSintassi1,
               [2] class [mscorlib]System.Text.StringBuilder objSintassi2)
    
      IL_0000:  newobj     instance void [mscorlib]System.Text.StringBuilder::.ctor()
      IL_0005:  stloc.1
      IL_0006:  newobj     instance void [mscorlib]System.Text.StringBuilder::.ctor()
      IL_000b:  stloc.2

  6. #6
    Originariamente inviato da Stoicenko
    la differenza sta che il vb.net mantiene l'orribile sintassi del vecchio vb che ti da l'opportunità di dichiarare un oggetto senza il tipo ma lasciando che il compilatore ne associ uno compatibile..
    Nel vecchio VB in realtà le cose non erano così; la sintassi
    codice:
    Dim oggetto As New Classe
    identificava un oggetto ad istanziazione automatica, ossia un oggetto che non veniva creato subito, ma al momento del primo riferimento ad esso. Per facilitare il passaggio a VB.NET si è mantenuta questa sintassi, che risulta equivalente alla sua versione più estesa
    codice:
    Dim oggetto As Classe = New Classe()
    ; le variabili ad istanziazione automatica invece non esistono più.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Originariamente inviato da Max Mercury
    Ok confermo che non c'è nessuna differenza, infatti il codice IL generato è identico:

    Codice VB
    codice:
       Dim objSintassi1 As System.Text.StringBuilder = New System.Text.StringBuilder()
       Dim objSintassi2 As New System.Text.StringBuilder
    Codice IL
    codice:
      .locals init ([1] class [mscorlib]System.Text.StringBuilder objSintassi1,
               [2] class [mscorlib]System.Text.StringBuilder objSintassi2)
    
      IL_0000:  newobj     instance void [mscorlib]System.Text.StringBuilder::.ctor()
      IL_0005:  stloc.1
      IL_0006:  newobj     instance void [mscorlib]System.Text.StringBuilder::.ctor()
      IL_000b:  stloc.2
    Questo intendevo.
    Ciao, Brainjar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.