2010-03-02 15 views
6

Ho visto un sacco di risposte al problema typedef in C#, che ho usato, in modo da avere:alias nidificazione in C#

using Foo = System.Collections.Generic.Queue<Bar>; 

e questo funziona bene. Posso cambiare la definizione (specialmente cambiare Bar => Zoo ecc.) E tutto ciò che usa Foo cambia. Grande.

Ora voglio questo lavoro:

using Foo = System.Collections.Generic.Queue<Bar>; 
using FooMap = System.Collections.Generic.Dictionary<char, Foo>; 

ma C# non sembra come Foo nella seconda riga, anche se ho definito nel primo.

C'è un modo di utilizzare un alias esistente come parte di un altro?

Edit: sto usando VS2008

+0

tbh Questo appare come un bug – Codesleuth

+0

D'accordo con Codesleuth - non riesce ancora se Foo è un alias per un tipo semplice (come System.Int32), quindi suppongo che questo sia un bug del compilatore. –

+1

@Codesleuth @Dan, ti interessa commentare la risposta di Dave? – quamrana

risposta

13

Secondo la norma sembra che la risposta è no. Da Section 16.3.1, paragrafo 6:

1 L'ordine in cui sono scritti utilizzando -alias direttive ha alcun significato, e la risoluzione dello spazio dei nomi, o nome-tipo- riferimento un utilizzando-alias- la direttiva non è interessata dalla direttiva-alias using o da altre direttive di utilizzo nella unità di compilazione o corpo dello spazio dei nomi.

2 In altre parole , il-o nome-tipo-spazio dei nomi di un usando-alias-direttiva viene risolto come se l'unità o dello spazio dei nomi immediatamente contenente corpo compilazione aveva non utilizzando direttive.

Edit:

ho appena notato che la versione al link qui sopra è un po 'fuori moda. Il testo del paragrafo corrispondente nello standard 4th Edition è più dettagliato, ma impedisce comunque di fare riferimento usando alias all'interno di altri. Contiene anche un esempio che rende esplicito questo.

A seconda delle esigenze di scoping e la forza di scrivere si potrebbe essere in grado di cavarsela con qualcosa di simile:

class Foo : System.Collections.Generic.Queue<Bar> 
{ 
}