In questo articolo sono spiegate le funzionalità del(...)

di Cristian Civera, in .NET,

In questo articolo sono spiegate le funzionalità del compilatore C# 2. Le novità son poche, molte delle opzioni c'erano già prima. Tra questi una cosa non la conoscevo: i file .rsp.
Sono normalissimi files di testo che contengono tutti gli argomenti che normalmente passeremmo al compilatore. In questo modo possiamo fornire questi file insieme al nostro progetto e ber la compilazione basterà lancare:
csc @progetto.rsp
E' qualcosa di utile e comunque molto lontano da msbuild ma in alcuni può servire. Esiste già un file csc.rsp nella stessa directory del compilatore che viene "incluso" automaticamente e che referenzia quelli che sono i normali assembly solitamente usati.
Si può disattivare queste inclusione con l'opzione /noconfig.
La novità sono alias per gli assembly. Avrete senz'altro visto leggendo articoli su C# 2 l'uso del prefisso global::namespace.tipo per poter cercare un tipo partendo dal namespace di root e non da quello corrente. Per esempio:

using System;
class MyApp
{
public class System { }
const int Console = 7;
const int myInt = 66;
static void Main()
{
System.Console.WriteLine(myInt);
}
}

In questo caso sono presenti due tipi con il medesimo nome. System.Console dell'assembly System.dll che tutti conosciamo e System.Console dell'assembly corrente. Il compilatore prenderà come riferimento l'assembly corrente. Se volessimo accedere a System.dll dovremmo usare

global::System.Console.WriteLine(myInt);

Certo, bisogna evitare casi omonimia ma non si sa mai che possa servire. Queste funzionalità è più ampia però di quanto viene illustrata perché :: è un nuovo operatore per sfruttare gli alias.
Possiamo infatti dichiare nel nostro codice dei nomi per mappare un certo tipo ad un certo assembly:

extern alias tipo1;
extern alias tipo2;

tipo1::miaClasse.Qualcosa();
tipo2::miaClasse.Qualcosa();

In questo caso abbiamo un tipo miaClasse col medesimo namespace e metodo. Quindi sfruttiamo gli alias per riferirci ad uno o all'altro assembly.
Ovviamente in fase di compilazione dovremo dire di che assemblies si trattano:

csc /r:tipo1:assembly1.dll /r:tipo2:assembly2.dll

In pratica si può dire che global è un alias predefinito che mappa tutti gli assemblies.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese