Clique aqui para ler esse artigo em PDF.

Clique aqui para ler todos os artigos desta edição
C# 2.0 - Aplicando os novos recursos
|
Este artigo discute |
Este artigo usa as seguintes tecnologias |
|
· Tipos parciais; · Classes estáticas; · Métodos anônimos; · Generics; · Iterators; · Tipos anuláveis |
C# 2.0 e Visual Studio 2005. |
A versão 2.0 da linguagem de programação C# introduziu uma série de extensões, como: tipos parciais, classes estáticas, métodos anônimos, tipos e métodos genéricos (generics), iterators e tipos anuláveis.
Este artigo tem como objetivo finalizar a série sobre os principais novos recursos do C# 2.0, fornecendo um breve resumo e uma demonstração das principiais novidades da linguagem.
Nota: Para um bom entendimento das técnicas demonstradas nesta série sobre os novos recursos do C# 2.0, é ideal que o leitor tenha pelo menos um conhecimento básico da linguagem C#.
Antes de iniciar o exemplo final, vamos relembrar e resumir os novos recursos da linguagem.
Tipos parciais
O recurso de tipos parciais permite a definição de uma classe, estrutura ou interface em dois ou mais arquivos fontes. Os arquivos fontes conterão seções da definição do tipo de dado, sendo que todas as partes serão combinadas no momento da compilação.
O modificador partial é usado na definição de um tipo classe, estrutura ou interface em múltiplas partes. O modificador partial deverá aparecer imediatamente antes de uma das seguintes palavras-chaves: class, struct ou interface.
Classes estáticas
Classes estáticas são classes que somente contêm membros estáticos. Se uma declaração de classe inclui um modificador static, então ela é denominada classe estática.
Métodos anônimos
Métodos anônimos correspondem a uma maneira de passar um bloco de código em um local onde seria esperada uma instância de um delegate. O corpo de um método anônimo é escrito in-line no local em que o delegate é usado, convenientemente vinculando o código-fonte do método à instância do delegate.
Um método anônimo é declarado usando a seguinte sintaxe:
delegate [AssinaturaMetodoAnonimo] bloco
A AssinaturaMetodoAnonimo é opcional e define os nomes e tipos dos parâmetros formais para o método anônimo. Se o AssinaturaMetodoAnonimo for omitido, então o bloco que segue não usa quaisquer parâmetros formais. O bloco define o corpo do método anônimo.
Generics
Generics permitem que classes, estruturas, interfaces e métodos sejam parametrizados pelos tipos de dados que eles armazenam e manipulam, permitindo uma abstração desses tipos de dados. O uso mais comum é nos tipos container, como nos tipos presentes no namespace System.Collections.Generic.
As declarações de classes, estruturas e interfaces genéricas são realizadas especificando-se um ou mais parâmetros de tipo delimitados pelos sinais “<” e “>” e separados por vírgula depois da declaração, como ilustrado a seguir.
interface InterfaceGenerica
class ClasseGenerica
struct EstruturaGenerica
Assim como na declaração de classes, estruturas e interfaces genéricas, os parâmetros de tipo em métodos genéricos são delimitados pelos sinais “<” e “>” e separados por vírgula, antes da definição da lista de parâmetros.
TipoRetorno NomeMetodo
(TipoParametro1 parametro1,
TipoParametro2 parametro2, ...) {
...
}
Iterators
Um iterator é um método, um acessor get numa propriedade ou num indexer ou um operador que fornece suporte a iterações num laço foreach sem a necessidade de implementar as interfaces System.Collections.IEnumerable ou System.Collections.Generic.IEnumerable
Ao invés, o desenvolvedor fornece um iterator, que simplesmente atravessa uma estrutura de dados no seu tipo. Os iterators são identificados pela presença da nova instrução yield. Quando o compilador detecta um iterator no código, ele automaticamente gerará a propriedade Current e os métodos MoveNext e Dispose da interface IEnumerable
A instrução yield é usada em um bloco iterator para fornecer um valor para o objeto enumerador ou para sinalizar o final da iteração. Ela assume uma das seguintes formas:
yield return expressao;
yield break;
Tipos anuláveis
Um tipo anulável é uma estrutura que combina um valor de um tipo base com um indicador booleano de null. O suporte a tipos anuláveis é fornecido no .NET Framework 2.0 por intermédio da estrutura genérica System.Nullable
A estrutura Nullable
Se HasValue é igual a true, então a propriedade Value retorna o valor contido pelo tipo anulável. Porém, se HasValue é igual a false, então uma tentativa de acessar a propriedade Value lança a exceção System.InvalidOperationException.
O código a seguir declara uma variável dataNascimento como sendo do tipo DateTime anulável.
using System;
Nullable<DateTime> dataNascimento;
Porém, o novo modificador de tipo “?” simplifica a construção de tipos anuláveis. Por exemplo, DateTime? é a forma anulável do tipo por valor pré-definido DateTime. Ou seja, DateTime? representa um atalho para Nullable
using System;
DateTime? x;
Exemplo de aplicação dos novos recursos do C# 2.0
O exemplo a seguir cria classes para representar produtos, itens de pedido e pedidos de um comércio. A solução será denominada “ComercioDemo” e será composta por um projeto Class Library denominado “Comercio” e um projeto Console Application denominado “TesteComercio”.
Na solução serão abordados os seguintes novos recursos da versão 2.0 da linguagem C#: tipos parciais, classes estáticas, métodos anônimos, tipos genéricos (generics), iterators e tipos anuláveis. No Visual Studio 2005, crie uma solução em branco nomeada “ComercioDemo” (File>New Project>Other Project Types>Visual Studio Solutions>Blank Solution).
Projeto Class Library (“Comercio”)
Crie um projeto Class Library com o nome de “Comercio” e adicione-o à solução (Add to Solution, na opção Solution da janela New Project). O projeto Comercio será composto pelas classes Produto, ItemPedido, Pedido e ItemPedidoEventArgs.
A Figura 1 apresenta o diagrama da classe Produto do projeto Comercio da solução ComercioDemo.