.NET Tips And Tricks
Artigos com o marcador .NET Framework
Atributo DebuggerDisplay
06/09/10
Olá, tudo bem?
No nosso trabalho, passamos boa parte do tempo debugando, ou depurando
aplicações, postei dois artigos sobre as novidades na depuração de código no Visual Studio 2010,aqui, aqui e aqui.
Esse três artigos que publiquei, mostram recursos do Visual Studio 2010, mas desde a versão 2.0 do .NET Framework, temos um atributo chamado DebuggerDisplay.
Com o DebuggerDisplay conseguimos definir, o que gostaríamos de ver facilmente, na janela onde podemos navegar entre as propriedades de uma classe durante a depuração do código.
Detalhe que o atributo não está limitado ao C#, podemos utilizar tranquilamento com VB.NET, F# e C++.
Vamos imaginar a classe Posicao abaixo, onde eu armazeno o valor X e Y de um determinado objeto de um jogo por exemplo.
class Posicao
{
public int X { get; set; }
public int Y { get; set; }
}
Agora instanciamos a classe, e definimos alguns valores.
static void Main(string[] args)
{
var posicao = new Posicao {X = 50, Y = 100};
}
Essa é uma classe simples, mas da para ver bem o funcionamento do DebuggerDisplay. Agora compilando o programa, e depurando o mesmo, quero descobrir o valor de X e Y, então eu dependo da janela Locals onde posso navegar nas propriedades do objeto, ou navegando nos menus abertos sobre o objeto ao passar o mouse pelo mesmo.
Na imagem acima, da para ver que a coluna value, da janela Locals mostra o tipo do meu objeto, que nesse caso é OperadoresCSharp.Posicao, o mesmo ocorre com o menu flutuante, em ambos os casos eu preciso expandir o objeto para ver os valores das propriedades.
Agora utilizando o atributo DebuggerDisplay, que está no namespace System.Diagnostics eu consigo definir, por exemplo, quais propriedades da minha classe eu quero mostrar diretamente no lugar onde é mostrado o tipo do objeto.
[DebuggerDisplay("{X} {Y}")]
class Posicao
{
public int X { get; set; }
public int Y { get; set; }
}
No atributo, eu consigo colocar entre {} o nome de uma propriedade, que é o que fiz, agora na depuração já melhorou um pouco.
Já melhorou, só que ainda não é o ideal, o que é 50, 100? Só estou mostrando os valores das propriedades, mas não sei de qual propriedade é o valor 50 ou 100, felizmente conseguimos “nomear”, e fazer algo assim X = {X}.
[DebuggerDisplay("X={X} Y={Y}")]
class Posicao
{
public int X { get; set; }
public int Y { get; set; }
}
Agora sim, na hora de depurar o código, fica mais claro saber que o 50 é do X e 100 é do Y.
Mas isso funciona só com propriedades? Felizmente não, vamos imaginar que por algum motivo, é importante saber a soma de X e Y, e eu possuo um método chamado SomarValores(), consigo utilizar a mesma sintaxe passando ao invés do nome da propriedade, o nome do método, veja abaixo.
[DebuggerDisplay("X={X} Y={Y} Soma dos valores = {SomarValores()}")]
class Posicao
{
public int X { get; set; }
public int Y { get; set; }
public int SomarValores()
{
return X + Y;
}
}
Muito simples e útil, colocando um simples atributo, consigo definir valores úteis, que ajudem na hora da depuração do projeto.
Para finalziar, o atributo não está limitado a classes, posso utilizar com.
- Classes
- Structs
- Delegates
- Enumeradores
- Campos
- Propriedades
- Assemblies
Abraços e até o próximo post.
Biblioteca de IO para Silverlight 4 e COM+
11/07/10
Um dos novos recursos do Silverlight 4, quando temos aplicações rodando for a do Browser é utilizar componentes COM+.
Pode parecer estranho falar de COM+, imaginem uma aplicação instalada no computador do usuário, não temos acesso direto aos arquivos do PC por exemplo, é ai que entra o COM+, vamos trabalhar com componentes que farão esse serviço. E acessar arquivos é só um dos exemplos
.
Lembrando que, a aplicação deverá rodar com nível de privilégio elevado, por questões óbvias de segurança
.
Não é difícil trabalhar com esses componentes COM+, mas temos que conhecer os nomes dos métodos e propriedades que cada componente possui, e como estaremos trabalhando com dynamic, o Intellisense não vai ajudar.
Foi pensando nisso que resolvi hospedar no CodePlex meus projetos e estudos, e resolvi criar uma biblioteca de IO para trabalhar com o FileSystemObject do COM+, e ficar mais transparente para o programador trabalhar com arquivos e diretórios.
Estou implementando primeiramente as classes File e Directory, e trabalhar com essas classes será da mesma forma das respectivas classes do namespace System.IO. Por isso vou manter os nomes em inglês tanto para classes e métodos.
Agora vamos ver como utilizamos COM+ em uma aplicação OOB (Out Of Browser) feita com Silverlight 4.
Primeiro passo é definir nas propriedades do projeto que a aplicação pode rodar fora do browser, e nas configurações falar que a aplicação roda sobre privilégios elevados.
O próximo passo é adicionar referência a Microsoft.CSharp.dll, encontrará essa .dll no diretório de SDK´s, veja abaixo o diretório do meu computador C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\Microsoft.CSharp.dll
Abaixo um exemplo de código utilizando COM+ verifico se um determinado arquivo existe ou não, e informo ao usuário.
using (dynamic fileSystemObject = AutomationFactory.CreateObject("Scripting.FileSystemObject"))
{
if (fileSystemObject.FileExists(path))
MessageBox.Show("Arquivo existe");
else
MessageBox.Show("Arquivo não existe");
}
Como disse anteriormente não é um código complexo, mas temos que saber o nome do método que é FileExists, temos que utilizar a classe AutomationFactory do namespace System.Runtime.InteropServices que cria uma objeto pelo nome do mesmo, no caso para trabalhar com arquivos e diretórios é “Scripting.FileSystemObject”.
Utilizando a biblioteca que eu estou criando o código fica.
if (File.Exists("d:\\Arquivo.txt"))
MessageBox.Show("Arquivo existe");
else
MessageBox.Show("Arquivo não existe");
Toda a comunicação com COM+ está encapsulada, não é necessário o conhecimento de qual método chamar, qual classe instanciar.
Até o momento implementei alguns métodos somente, principalmente pelo motivo que já falei aqui no blog que meu braço está machucado, mas o projeto é aberto, está hospedado no CodePlex, quem quiser contribuir, dar dicas, sugestões, criticas por favor fique a vontade, qualquer ajuda é bem vinda!!! ![]()
Clique aqui para acessar o projeto no CodePlex, e quem quiser contribuir entre em contato que cadastro como contribuidor.
Espero que gostem do projeto.
Abraços.
Entendendo o Garbage Collector
03/01/10
Estava lendo o blog do André Nobre e achei ótimos artigos sobre o funcionamento do Garbage Collector, é obrigatório para todo desenvolvedor entender o funcionamento do GC e para quem não entende ou ainda ficou alguma dúvida é leitura obrigatória.
Garbage Collector I
Garbage Collector II
Um ótimo 2010 a todos e bons estudos.
Abraços.
Treinamento de VS.NET 2010 e .NET Framework 4.0
24/10/09
Está disponível para download o Training Kit do Visual Studio 2010 e .NET Framework 4.0, é um ótimo material para quem quer ficar por dentro das novidades da próxima versão do Visual Studio e .NET Framework, para fazer o download clique aqui.
Abaixo uma lista do que encontrarão no treinamento.
Abraços.




