Carlos dos Santos

Compilação Condicional em C#

Não sei se todos já utilizaram as famosas diretivas de compilação em C#, como por exemplo #define, #ifdef, #undef, etc...
 
Estes são mecanismos realmente muito interessante que podem eliminar partes do código durante a compilação, por exemplo, você tem um método que deseja ser executado somente no ambiente de desenvolvimento e não no ambiente de produção.
 
No exemplo abaixo, eu mostro como fazer isto usando uma diretiva condicional no método, aliado a uma declaração #ifdef:

-- definição do método
[System.Diagnostics.Conditional("DEBUG")]void ExecutaSomenteEmDebug(){   MessageBox.Show("Em Debug");

}

-- chamando o método
private void Form1_Load(object sender, EventArgs e){   ExecutaSomenteEmDebug();}
 
No exemplo acima, a diretiva Conditional("DEBUG") informa ao compilador que este médodo só "existirá" em modo debug, ou seja, quando você compilar em modo release, todas as chamadas ao método serão ignoradas.
 
A vantagem deste modelo é que você pode criar rotina de LOG, por exemplo, somente para o desenvolvimento, e quando for disponbilizar a aplicação para o ambiente de produção, não precisará modificar nada no código.
 
Outra maneira de utilização um pouco mais abrangente, é você criar suas próprias diretivas de compiliação, por exemplo:
 
-- definição do método
[System.Diagnostics.Conditional("CONDICAO_XYZ")]
void ExecutaCondicional()
{
   MessageBox.Show("Condição XYZ");
}

 

Neste caso este método só será chamado caso exista uma diretiva CONDICAO_XYZ no início do código fonte ou nas opções de compilação, por exemplo:

 

#define CONDICAO_XYZ 

using System;

...

...

 

No exemplo acima, se você comentar a linha do #define, o compilador também irá ignorar o método e as chamadas.

 

Isto é apenas uma pequena amostra do que pode ser feito com diretivas de compilação, espero ter despertado o interesse de vocês e principalmente espero que a dica seja útil.

 

 

[]s,

Carlos.

Comentários

spoky disse:

eu já havia visto alguma coisa, más nunca testei, vou aplicar em algumas coisas, ver se crio o hábito de utilizar e facilitar um pouco minha vida...

vlws

brigadao!

# September 8, 2008 9:04 PM

mfalthmann disse:

Carlos realmente são ótimos recursos, nosso amigo Israel Aéce postou sobre a diretiva #ERROR que realmente pode ajudar quando vamos distribuir códigos, veja mais aqui weblogs.pontonetpt.com/.../28197.aspx

Abraços

# September 8, 2008 10:00 PM