2011-01-09 1 views
5

assumere in un'applicazione WinForm che abbiamo in program.cs:È possibile creare alias per una variabile in C#?

static class Program 
{ 
    public static SomeClass someClass; 

    [STAThread] 
    static void Main() 
    { 
     //something 
    } 
} 

in modo da utilizzare someClass in altre classi nel progetto attuale dovremmo accedere Program.someClass

La domanda è: possiamo fare un alias per Program.someClass come per esempio c1 e utilizzare c1 in codice anziché Program.someClass?

+0

No, oltre a creare una var locale che contiene un riferimento. – BoltClock

+0

Questa stessa nozione è contro-intuitiva, IMHO. Anche se possibile (parlando in termini non pertinenti ai tipi di riferimento e alias potenzialmente multiplo 'che si verificano sintomaticamente), potrebbe solo rendere più problematico il mantenimento del codice, e le persone scrivono il codice abbastanza male così com'è! In un certo senso, chiede un meccanismo che, se non altro, esagera, penso. –

+1

Qual è il punto? Non dovresti scrivere tutto a mano comunque; usare Intellisense. –

risposta

6

Se stai solo cercando di alias per polso-friendly, farlo come un delegato in linea, in questo modo:

Func<SomeClass> c1 =() => Program.someClass; 

Ma concordo sul fatto che rende il codice meno chiaro nella maggior parte dei casi.

+1

@HPT: 'c1()' ti restituirà quell'istanza. Quindi puoi eseguire 'c1(). SomeClassMethod()' per esempio. – zerkms

+0

@zerkms: hai ragione. quello ha funzionato. –

+0

@HPT: è ancora una dipendenza. Come recupererai l'istanza di 'c1' in' AnotherClass'? Se puoi accedere a 'c1' - allora puoi anche accedere a 'Program.someClass'. – zerkms

1

semplicemente passare tale oggetto per ogni classe che hanno bisogno di lavorare con essa

+0

la domanda riguarda solo la possibilità. So che non è utile. –

+2

@HPT: i programmatori risolvono ** compiti reali **. Il migliore è passare l'oggetto. Il mondo sarà migliore se qualcuno userà meno classi statiche, quindi scrivere un codice più flessibile. – zerkms

+0

+1 per un approccio migliore, ma la domanda riguardava solo la mia curiosità e sto cercando un modo per farlo, non risolvendolo eliminando il problema principale: D –

2

Supponendo che si desideri ottenere qualcosa come i macro in C/C++ e anche di eliminare "Programma" come ambito di denominazione, penso che non si possa farlo in C#.

+0

Questa è la pura verità. – mireazma