2009-07-01 5 views
12

Per curiosità, ho creato 2 assembly che hanno entrambi una classe (Class1) con lo stesso spazio dei nomi identico (Library1). Creo quindi un altro client facendo riferimento a questi 2 assembly e provo a creare un'istanza di Class1.Utilizzare tipi con lo stesso nome e spazio dei nomi in 2 assembly .NET

Il compilatore, non sorprendentemente, mi dà un errore di compilazione circa il riferimento ambiguo. C'è un modo per specificare esplicitamente il tipo nell'assembly che voglio usare per evitare l'ambiguità?

Nota: questo lo so raramente, se non del tutto, accade nella pratica. È solo una domanda per curiosità sulla funzionalità della lingua.

risposta

10

Penso che dovresti usare uno extern alias per avvolgere gli spazi dei nomi dell'assembly al di fuori dello spazio dei nomi Globale. Ecco come:

  1. Nel progetto che fa riferimento i 2 gruppi, selezionare uno di loro Riferimenti, e nella finestra Proprietà modificare il valore Alias ​​da global, per esempio, global, Library1a.

  2. Fare lo stesso per l'altro riferimento, ma dargli un diverso alias-- andiamo con global, Library1b per il nostro esempio.

  3. Inserire extern alias Library1a; e/o extern alias Library1b; come le prime 2 righe di qualsiasi classe che consuma gli assiemi.

  4. Quando si accede a membri ambigui, qualificare lo spazio dei nomi con Library1a. o Library1b.. Esempi: Library1a.Library1.Class1...Library1b.Library1.Class1...

1

Succede in pratica ed è un dolore reale, l'alias esterno non può sempre risolvere il problema. Ecco un esempio di dove è un problema Duplicate Namepsaces.