Pular para o conteúdo principal

Postagens

Mostrando postagens de 2011

Métodos com um número variável de parâmetros

Saudações. Se você, como eu, mora na região sul do Brasil, deve estar congelado ou em processo de congelamento, para aproveitar este tempo e a pausa entre um e outro artigo resolvi escrever sobre um assunto que vai ajudar muito programador C# que está começando a se aventurar por esta linguagem.O recurso em questão é o uso de um número variável de argumentos (ou parâmetros) em uma assinatura de um método.Pense na seguinte situação: você tem um método e que pode receber zero ou “n” argumentos que podem ser do mesmo tipo ou não. Ou ainda, você tem um método em que é necessário ter pelo menos um argumento e os demais opcionais.A solução mais rápida para isso é usar a palavra chave “params” ao lado do argumento que se deseja deixar opcional e com um número variado de elementos.Deve ser declarado no método da seguinte forma:<tipo do retorno> <NomeDoMétodo>(params <tipo do parametro>[] <nome do parâmetro>)Um exemplo do uso pode ser conferido abaixo, em um programa qu…

Como comparar dois arquivos–Ferramentas

Olá. Desta vez, quero deixar uma dica rápida para programadores que assim como eu, nem sempre estão conectados em uma rede corporativa e não dispõem de ferramentas de versionamento ou, para aqueles que simplesmente precisam comparar dois arquivos de texto.Considere um arquivo de código que foi alterado e você precisa comparar com a versão antiga. A ferramenta em questão é o editor Notepad++ (que pode ser baixado aqui).Abra os dois arquivos no Notepad++. Observe que não é necessário colocar lado a lado. Qualquer tipo de arquivo pode ser comparado e não é necessário que sejam do mesmo tipo ou nome.Para comparar basta pressionar as teclas ALT-D ou usar os comandos Plugins > Compare > Compare do menu. Ao fazer isto a tela assume a aparência da figura:Os principais pontos da interface são a indicação de quais linhas foram removidas de uma versão para outra:As linhas que foram incluídas:E também os dados que foram alterados:Para localizar rapidamente as modificações use a barra de nav…

Como remover espaços e quebra de linha de documentos XML

A dica de hoje (após um longo e tenebroso inverno, que a propósito continua aqui no Paraná) nasceu de um incêndio que precisou ser apagado nos projetos da vida com prazo de entrega pra “ontem”… mas, vamos a parte divertida.No Framework .NET a geração de documentos XML é facilitada de várias formas. Vamos partir do código abaixo para gerar um documento simples usando apenas System.Xml.var xmlDoc = new XmlDocument();
XmlElement raiz = xmlDoc.CreateElement("artigo");
XmlElement Id = xmlDoc.CreateElement("id");
Id.InnerText = "08072011";
XmlElement Titulo = xmlDoc.CreateElement("titulo");
Titulo.InnerText = "Como remover espaços e quebra de linha de documentos XML";
XmlElement Vazio = xmlDoc.CreateElement("vazio");
Vazio.InnerText = String.Empty;
raiz.AppendChild(Id);
raiz.AppendChild(Titulo);
raiz.AppendChild(Vazio);
xmlDoc.AppendChild(raiz);
xmlDoc.Save(@"d:\teste.xml");

O código acima gera o arquivo “teste.xml” que ao ser visuali…

Como Testar Extension Methods sem o Visual Studio

Extension Methdos são um recurso interessante do Framework .NET porém, para testarmos o seu funcionamento, geralmente precisamos escrever o código no Visual Studio e gerar um programa.Para quem não quer usar o Visual Studio uma alternativa interessante é usar o programa gratuito LINQPAD que pode ser baixado em http://www.linqpad.net.Para fazer os testes com Extension Methods primeiro mude o tipo da consulta para C# Program (isto se você estiver usando esta linguagem) no campo “Language”.Daí em diante o editor de texto prepara a estrutura do programa para o formato abaixo.void Main()
{

}

// Define other methods and classes here



A classe para os métodos de extensão deve ser colocada fora do método definido em "void Main()".


void Main()
{

}

// Define other methods and classes here
publicstaticclass MetodosDeExtensao
{
publicstaticint ContarPalavras(thisstring str)
{
return str.Split(' ').Length;
}
}


O código que irá consumir o método de extensão deve ser colocado dentro do méto…

Extension Methods–Outros dados importantes

Ao fazer referência ao namespace System.Linq no código os Extension Methods deste são acrescentados para as collections dentro do código e tornando-se acessíveis pelo intelisense do Visual Studio. Veja este exemplo:namespace CodigosExemplo
{
publicclass Class1
{
publicvoid Mostrar()
{
int[] numeros = newint[] { 1, 7, 2, 11, 5, 13 };
}
}
}


Neste exemplo podemos usar um Extension Method para fazer a ordenação dos números bastando incluir o namespace:


using System.Linq;


Observe na figura os métodos de extensão já habilitados no Intelisense do Visual Studio.



Assim para ordenar o array basta mudar o código para o seguinte:


using System.Linq;

namespace CodigosExemplo
{
publicclass Class1
{
publicvoid Mostrar()
{
int[] numeros = newint[] { 1, 7, 2, 11, 5, 13 };
var ordena = numeros.OrderBy(n => n );
}
}
}


Com este recurso é possível descobrir o índice de um elemento dentro do vetor, o que não pode ser feito sem usar os Extension Methods.


//Exemplo de Exten…

Entity Framework–Primeiros Passos

EF representa um avanço para os programadores que querem gastar o seu tempo escrevendo as aplicações e não se preocupando em como os dados são armazenados e como devem ser recuperados. Embora a Microsoft mantenha as plataformas existentes para acesso a dados, EF será o padrão a ser adotado e, consequentemente, receberá toda atenção e inovações desta empresa. Por isto, para os programadores que planejam permanecer na plataforma .NET é bom dar uma conhecida em seus recursos.Com EF não é preciso escrever o código baseado no banco de dados, mas, agora, podemos ter em mente os objetos de negócio da aplicação e escrever o código baseado nestes. EF usa um modelo chamado Entity Data Model (EDM).Mudando os conceitosConsidere que exista no banco de dados três tabelas com os seguintes campos:Para você recuperar todos os dados do produto usando as instruções SQL provavelmente você terá de fazer alguns JOINS. Dificilmente você vai agrupar os dados em uma só tabela, principalmente aqueles referente…

WPF–Controlando a aplicação

Cada aplicação em WPF consiste de uma instância da classe System.Windows.Application.Isto signifca que é por meio desta classe que são controladas as janelas e o comportamento geral do programa.O Visual Studio gera automaticamente o código abaixo para o início da aplicação.using System;
using System.Windows;

publicclass Startup
{
[STAThread()]
staticvoid Main()
{
//Cria a aplicação
Application app = new Application();
//Cria a janela principal
Window1 win = new Window1();
//Executa a aplicação e mostra a janela principal
app.Run(win);
}
}





Comportamento da aplicação – Controlando como a mesma é finalizada

Em WPF é possível alterar vários aspectos da aplicação, um que merece destaque é a maneira como a mesma pode ser encerrada. Por padrão a aplicação permanece ativa até o momento que a última janela é finalizada, mas, isto pode ser modificado. Se você fizer um ajuste na propriedade ShudtownMode da classe Application antes de chamar o método Run(). Existem três opções…

Extension Methods–Fatos e curiosidades

Um dos grandes problemas deste tipo de funcionalidade é que estes métodos são mais difíceis de serem descobertos, quando se considera o uso de Reflection por exemplo.Considere a classe produto:namespace Dados
{
publicclass Produto
{
publicint Id { get; set; }
publicstring Descricao { get; set; }
publicdecimal ValorDeVenda { get; set; }
publicstring DescricaoAdicional { get; set; }
publicstring GrupoEstoque { get; set; }
publicdecimal Saldo { get; set; }
}
}




E que possua uma classe de método de extensão para retornar o valor do estoque:


namespace Dados
{
publicstaticclass MetodosDeExtensao
{
publicstaticdecimal RertornarValorDoEstoque(this Produto objProduto)
{
return objProduto.Saldo * objProduto.ValorDeVenda;
}
}
}





Se você usar Reflection, o método acima não será listado com um dos métodos desta classe, mesmo podendo ser usado com uma instância da mesma. Isto pode causar algum impacto se estiver considerando distribuir este tipo de dado em um Class Library,

Outros elementos E…

Iniciando com WPF e XAML – Mais elementos importantes

Respondendo a EventosUm dos pontos importantes de qualquer linguagem é a capacidade desta permitir escrever código para responder a eventos.No C# os eventos são escritos para elementos especiais das classes, os delegates que funcionam como ponteiros para funções.Um uso típico é o responder a um clique em um controle Buttom ou verificar se em um controle de texto, o usuário pressionou uma tecla específica. Entretanto, há muito mais por trás de eventos. É possível inspecionar se houve mudança no valor de alguma propriedade de um determinado componente, por exemplo.No XAML a maneira de responder a evento é simples bastando escrever o nome do evento e o método que será executado, como no exemplo abaixo:EventName=”EventHandlerMethodName” Para um controle do tipo Button o código ficaria parecido com o seguinte: <Button … Click=”btnEnviar_Click”>

É importante lembrar que é preciso conhecer os parâmetros que o método do EventHandler precisa ter para poder ser executado. O código C# par…

Iniciando com WPF e XAML

A partir de hoje vou deixar aqui as minhas impressões e experiências com o WPF e XAML. O meu objetivo é anotar os principais pontos desta linguagem de marcação do Framework .NET usada para definir a interface dos programas construídos sobre a plataforma WPF (Windows Presentation Foundation).XAML – O ponto principalUm ponto fundamental da linguagem XAML é que cada elemento mapeia uma classe do Framework .NET, logo, ao definir a tag Button você está criando uma instância da classe Button. Cada propriedade é configurada a partir dos atributos sendo que, para configurações de interface mais complexas, provavelmente você precisará definir os controle usando as tags aninhadas. <Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>

Ajuste fino do componente Slider

Trabalhando em um projeto WPF sofri um monte para tentar fazer com que o valor selecionado em um controle Slider se ajustasse apenas a valores inteiros. Sim, estou iniciando – um pouco tarde é verdade– no uso do WPF, mas chego lá!O XAML básico é o seguinte:<Page xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<TextBlock Text="Hello"
Padding="10"/>
<Slider x:Name="mySlider"
Grid.Row="1"
Maximum="100"
Minimum="0" />
</Grid>
</Page>

Este código pode ser feito em um editor básico como o bloco de notas do Windows. Salve-o com a extensão Xaml. Com um clique duplo no arquivo, o mesmo é exibido dentro do browser como a figura 1 demonstra.


A ideia básica é fazer co…

String.Format e seus segredos

Olá… de volta a ativa um um artigo que se não é novidade, vai ajudar aqueles programadores que estão brigando com o método String.Format ou com formatações dentro do método “ToString()”.Você deve ter percebido que Console.WriteLine na verdade é um método “parente” do String.Format pois permite que façamos formatações como neste último.Existem alguns truques dentro destes que não são muito usados ou tão comuns. Observe o código a seguir:    9void Main()   10   {   11     List<meusDados> dados = new List<meusDados>();   12     dados.Add(new meusDados   13     {   14       ID = 1,   15       Nome = "José",   16       Cargo = "Gerente",   17       Admissao = newDateTime(1990, 1, 2),   18       Salario = 3000M   19     });   20     dados.Add(new meusDados   21     {   22       ID = 10,   23       Nome = "Ana",   24       Cargo = "Programadora",   25       Admissao = newDateTime(2000, 10, 12),   26       Salario = 2773.35M   27     });   2…