Márcio Fábio Althmann
.NET Tips And Tricks
.NET Tips And Tricks
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.
Abraços e até o próximo post.
05/09/10
E ai pessoal, tudo bem?
Bom a notícia não é tão nova, mas fica aqui a dica para quem ainda não viu
.
Foi disponibilizado para download o preview do livro Programming Windows Phone 7 Series, não é o livro todo, é só um preview, mas é uma ótima fonte para iniciar os estudos. Clique na imagem abaixo para fazer o download.
Abraços.
02/09/10
Olá pessoal, tudo bem?
Tudo muito agitado por aqui, mas voltei a dar atenção ao blog finalmente!! E além de continuar postando sobre Silverlight, Windows Phone 7, vou continuar mostrando alguns truques que podemos utilizar no C#, como os operadores pouco utilizados que já mostrei aqui e aqui.
Hoje vou falar sobre a keyword partial.
Com a keyword partial conseguimos dividir uma mesma classe, struct ou interface em mais de um arquivo. Mas quando o projeto é compilado e o código gerado, esses arquivos são “mesclados”. Quem trabalha com Windows Forms e ainda não viu, veja que um formulário é dividido em vários arquivos mas utilizando partial.
Dividir as classes em vários arquivos, pode ser útil em projetos ou classes grandes, não preciso abrir aquela classe com 100 métodos (alguém tem algo assim?
), ou como eu mostrei aqui no exemplo onde utilizo validação com DataAnnotations no LINQ To SQL só consigo fazer esse tipo de “truque” graças as classes parciais.
Bom chega de falar e vamos aos exemplos que é muito melhor.
Uma classe Calculadora com 4 métodos simples.
class Calculadora
{
public int Somar(int valor1, int valor2)
{
return valor1 + valor2;
}
public int Diminuir(int valor1, int valor2)
{
return valor1 - valor2;
}
public int Multiplicar(int valor1, int valor2)
{
return valor1 * valor2;
}
public int Dividir(int valor1, int valor2)
{
return valor1 / valor2;
}
}
Posso dividir essa classe em duas da seguinte forma.
partial class Calculadora
{
public int Somar(int valor1, int valor2)
{
return valor1 + valor2;
}
public int Diminuir(int valor1, int valor2)
{
return valor1 - valor2;
}
}
partial class Calculadora
{
public int Multiplicar(int valor1, int valor2)
{
return valor1 * valor2;
}
public int Dividir(int valor1, int valor2)
{
return valor1 / valor2;
}
}
Uma dúvida frequente, é se as classes precisam estar no mesmo Arquivo.cs, e a resposta é não, posso ter vários arquivos.cs com nomes diferentes contendo cada um, um pedaço da minha classe parcial.
Outro detalhe, é que para ele mesclar as classes, elas devem pertencer ao mesmo namespace.
Só para mostrar o código IL gerado, vemos que só existe uma classe Calculadora com os 4 métodos, mesmo dividindo o código em duas classes parciais.
E não tenho restrições quanto a herança e implementação de interfaces. Veja o código abaixo.
class PessoaFisica : Pessoa, IDisposable
{
public void Dispose()
{
throw new NotImplementedException();
}
}
Esse código poderia ser dividido da seguinte forma.
partial class PessoaFisica : Pessoa
{
}
partial class PessoaFisica : IDisposable
{
public void Dispose()
{
throw new NotImplementedException();
}
}
Uma keyword simples, que pode ser muito útil na organização de determinados projetos.
Abraços e até o próximo artigo.
31/08/10
E ai pessoal tudo bem?
As últimas semanas foram de muito trabalho, por isso o blog ficou um pouco parado. Mas a partir de hoje, volto com força total aqui no blog, e tenho ótimas novidades para o pessoal que gosta de Silverlight.
A primeira é que estou montando uma comunidade com meu amigo Dorta, específica sobre Silverlight, com lista de discussão, artigos, webcasts e muito mais. Estamos acertando os últimos detalhes, mas em breve todos poderão participar da nova comunidade.
A novidade é uma idéia que pode dar muito certo, mas só para deixar todo mundo curioso, pode ser que saia um livro de Silverlight logo logo, novamente eu e o Dorta estamos montando isso.
Agora, para não passar em branco o post, todo mundo sabe que o lançamento do Windows Phone 7 está próximo. Muitas apliações e jogos estão em desenvolvimento, e é muito divertido “brincar” desenvolvendo para o Windows Phone 7, fiquem com um vídeo de um sistema de particulas que estou criando, quando ficar pronto, ou avançar mais o mesmo, postarei aqui como criar algo assim. Esse vídeo está com 200 partículas, iria mostrar rodando com 1000, mas no emulador não ficou muito legal. Aceito doações de protótipos de aparelhos com o Windows Phone 7
.
Abraços.
Partículas Windows Phone 7 from Márcio Fábio Althmann on Vimeo.
20/08/10
Ontem tive o prazer de conversar como Luciano Palma e com o Fabrício Sanches sobre comunidade, e outros assuntos. Na verdade acho que eu e o Fabrício simplesmente paramos e vimos quem realmente sabe o que Comunidade significa falar
o Palma é o cara, quem o conhece sabe o que estou falando.
Hoje fui olhar, meus e-mails e vi que ele comentou no meu post sobre um e-mail que recebi agradecendo pelo blog aqui.
Nem pedi autorização dele, mas vou colocar o comentário dele logo abaixo, não preciso falar mais nada, simplesmente perfeito.
Comunidade e Redes. Duas palavras com muita magia por trás delas.
Quando você faz parte delas, é como se suas fronteiras simplesmente deixassem de existir. Numa Comunidade (que é uma Rede), cada um aprende com base e seus interesses, e compartilha de forma genuína com os demais. É como se todos aprendessem juntos. Colaborar para este processo tem seu quê de magia e nos traz um sentimento muito positivo.
Esse retorno subjetivo é o Reconhecimento mais importante. Benefícios materiais? Eles vêm depois, mas são consequência. Não deveriam ser vistos como fim… (mas sim como meios de continuar evoluindo).
Luciano Palma
Abraços
19/08/10
E ai pessoal blz?
Bom eu também escrevo para o site Meio Bit, e comecei hoje uma série de posts sobre o Windows Phone 7, claro nada muito avançado, porque o público aqui do blog é diferente do público do Meio Bit.
Então quem quiser conferir o primeiro post é só clicar aqui.
Abraços.
18/08/10
E ai pessoal blz?
A falta de posts no blog é puramente falta de tempo, muito trabahlo, mas muito mesmo, mas em breve vou recuperar o tempo perdido e postar muitas coisas.
Esse post é só para anunciar que agora também sou moderador do Fórum de Silverlight no MSDN Brasil, vou moderar o Forum junto com meu amigo Ricardo Dorta, e em breve nós dois teremos uma ótima novidade para a comunidade de Silverlight Brasileira, fiquem ligados, o projeto está evoluindo e o resultado vai ser ótimo.
Então fiquem a vontade para tirar dúvidas lá no fórum ou mesmo mandando e-mail aqui pelo site.
Abraços.
14/08/10
Depois que mostrei o Ribbon para WPF aqui, recebi muitos e-mails perguntando se teria algo parecido para Silverlight, confesso opção gratuita eu nunca encontrei, mas resolvi procurar hoje e vi um controle em estágio Beta ainda que vale muito dar uma olhada, é da empresa DevElements, e o controle pode ser visto aqui.
Agora caso queiram comprar algo, tenho algumas dicas como os controles da Telerik, Infragistics, ComponentArt ou ComponentOne.
Abraços.
06/08/10
A Microsoft lançou um site chamado Zoom.it nele conseguimos criar um “Screen shot” gigante de um site, e tudo com Silverlight e Deepzoom.
Vou deixar para explicar o Deep Zoom, fica para outro dia, mas o resultado é muito legal, e ainda conseguimos adicionar o Deep Zoom em sites, como fiz abaixo com meu site, e ele também cria uma url curta. Olha o meu site aqui http://zoom.it/hQBR.










Abraços.
03/08/10
Desde que a Microsoft lançou o menu Ribbon no Office, creio que foi amor a primeira vista com a maioria das pessoas, apesar de muito diferente daquele velho e bom menu padrão, utilizando Ribbon, tudo fica mais organizado.
Infelizmente o WPF não possuia o menu Ribbon nativo para utilizarmos em nossos projetos, digo nativamente por que com componentes de terceiros, como por semplo da Telerik, eu já utilizei Ribbon eu vários projetos.
Ontem, dia 02/08 foi liberado o RTM do Ribbon for WPF um menu do estilo Ribbon, para WPF, construído pela própria Microsoft, já utilizei esse menu a algum tempo, mas ainda era Beta e não funcionou bem.
Para começar, podemos fazer download do menu clicando aqui, temos a opção de fazer download do instalador do Ribbon, e também de exemplos de utilização e do código fonte, isso mesmo, podemos olhar o código fonte do projeto, bons estudos
. Além do link para download, clicando aqui vemos a página de documentação do menu.
A primeira mudança quando instalamos o Ribbon, é que ganhamos um novo tipo de projeto para WPF Ribbon Application.
Com o projeto criado, por padrão é criado um menu com itens básicos, o que é muito bom para entender o funcionamento do controle. Abaixo imagem do menu padrão criado com o código gerado.
<ribbon:Ribbon x:Name="Ribbon">
<ribbon:Ribbon.ApplicationMenu>
<ribbon:RibbonApplicationMenu SmallImageSource="Images\SmallIcon.png">
<ribbon:RibbonApplicationMenuItem Header="Hello _Ribbon"
x:Name="MenuItem1"
ImageSource="Images\LargeIcon.png"/>
</ribbon:RibbonApplicationMenu>
</ribbon:Ribbon.ApplicationMenu>
<ribbon:RibbonTab x:Name="HomeTab"
Header="Home">
<ribbon:RibbonGroup x:Name="Group1"
Header="Group1">
<ribbon:RibbonButton x:Name="Button1"
LargeImageSource="Images\LargeIcon.png"
Label="Button1" />
<ribbon:RibbonButton x:Name="Button2"
SmallImageSource="Images\SmallIcon.png"
Label="Button2" />
<ribbon:RibbonButton x:Name="Button3"
SmallImageSource="Images\SmallIcon.png"
Label="Button3" />
<ribbon:RibbonButton x:Name="Button4"
SmallImageSource="Images\SmallIcon.png"
Label="Button4" />
</ribbon:RibbonGroup>
</ribbon:RibbonTab>
</ribbon:Ribbon>
Como podem ver, não existe segredo na criação de Tabs, Grupos e Botões. Agora conseguimos utilizar um ótimo menu com Ribbon, sem recorrer a outras empresas.
Um outro detalhe, é que na Toolbox do Visual Studio, uma nova aba é criada, com todos os controles disponíveis para a criação do menu com Ribbon.
Aproveitem o Ribbon for WPF e é hora de começar a repensar a estrutura dos menus das aplicações
.
Abraços.