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()
A classe para os métodos de extensão deve ser colocada fora do método definido em "void Main()".
publicstaticclass MetodosDeExtensao
publicstaticint ContarPalavras(thisstring str)
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
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:
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:
namespace CodigosExemplo
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;
publicclass Startup
//Cria a aplicação
//Cria a janela principal
Window1 win = new Window1();
//Executa a aplicação e mostra a janela principal
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
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
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"
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'>
<Slider x:Name="mySlider"
Minimum="0" />
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…