La differenza tra gli spazi dei nomi in Visual Basic.NET vs in C # e come trattare con loro

StackOverflow https://stackoverflow.com/questions/1894753

  •  19-09-2019
  •  | 
  •  

Domanda

In C #, se si esegue questa operazione, si compilerà:

namespace Name
{
    public class Test
    {
    }

    public class TestUse
    {
        private global::Name.Test test;
    }
}

Se si prova lo stesso in VB.NET, tuttavia, non lo farà:

Namespace Name
    Public Class Test
    End Class

    Public Class TestUse
        Private test As Global.Name.Test
    End Class
End Namespace

ottengo (a seconda del modo in cui cerco di usare "Test") o " 'Nome' non è un membro di ''." o "Tipo 'Name.Test' non è definito." nella mia lista di errori. Ho trovato due modi per farlo funzionare, ma non sono ragionevole aspettarsi di un utente. Uno è quello di rimuovere la "Root Namespace" dalle proprietà del progetto. L'altro è quello di includere tale spazio dei nomi tra "Globale" e "Nome".

Ho fatto uno strumento personalizzato che utilizza CodeDom per generare il codice sia per C # e VB.NET. Questo è il motivo per cui nessuno dei due correzioni sopra sono fattibili: Io non posso aspettare i miei utenti di avere uno spazio dei nomi principale vuoto, e mi piacerebbe odio dover fare i trucchi specifici per VB della mia generazione di codice (tipo di sconfitte lo scopo di usare uno strumento indipendente dal linguaggio, non è vero?), come individuando la "Root Namespace" (non che mi piacerebbe sapere come la parte superiore della mia testa) compreso nel mio generazione del codice.

Non voglio lasciare fuori il modificatore globale sia, perché protegge lo strumento da parte degli utenti di picking brutti nomi per l'output generato. Qualcuno ha un suggerimento per come dovrei fare con questo?

È stato utile?

Soluzione

Dato che è necessario eseguire diversi compiti in codice generazione sia per la lingua in ogni caso, sarebbe solo un altro goccia nel mare delle differenze per la generazione di quel codice.

Codifica in trick-specific VB di inserire il namespace di default non è troppo grande un problema, a prima vista, rispetto agli altri dettagli di implementazione.

In bocca al lupo!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top