Novos Tipos Introduzidos no C# 2.0
Partial Type
Um partial type é um tipo que é permitido ser usado com modificador partial. Aqui estão tres tipos que podem ser usados com o modificador partial: Class, struct e interface. O modificador partial não é permitido em classe delegate.
É usado onde é requerido para dividir um tipo em múltiplos arquivos. A consequencia de um tipo partial é que uma vez compilado, ele não pode ser extendido.
Um tipo partial habilita simultaneamente desenvolvimento de diferentes aspectos de um tipo em diferentes arquivos. Divisão de desenvolvimento é conveniente quando membros da equipe possuem conhecimentos especiais. Por exemplo, um desenvolve a interface do usuário, em um arquivo,
enquanto o outro desenvolve métodos de uma complexa funcionalidade que reside em outro arquivo. Ou desenvolvimento de métodos que possam ser divididos entre desenvolvedores e arquivos.
O tipo é modificado pelo modificador partial, e todas as partes precisam ser declaradas com o modificador partial e residir dentro do mesmo namespace. Um tipo partial pode ser nested.
O exemplo abaixo, ilustra o conceito de tipo partial. Funcionalidades da classe MeuCarro é desenvolvida em diferentes códigos por diferentes desenvolvedores. Os dois arquivos residem no mesmo namespace e quando os arquivos são compilados as funcionalidades são combinadas pelo compilador.
Arquivo1.cs
namespace Modelos
{
// Parte 1
public partial class MeuCarro
{
public LigarMotor()
{;}
}
}
Arquivo2.cs
namespace Modelos
{
// Parte 2
public partial class MeuCarro
{
public DesligarMotor()
{;}
}
}
Generic Type
Os tipos genericos habilitam classes, delegates, interfaces, struturas e métodos serem criados com tipo parametros que são tipos placeholder, que podem ser substituidos quando o tipo é conhecido.
Normalmente usados em estruturas de dados (collections e arrays, ou passando parametros nos métodos).
São especificados com um par de delimitadores ("<" e ">") colocados após o respectivo tipo ou método.
Abaixo, o método MetodoGenerico é declarado como generic.
using System;
using System.Collections.Generic;
using System.Text;
namespace Modelos
{
public class ModelosGenericos
{
public static void MetodoGenerico<M>(M arg)
{
Console.WriteLine("Chamando método genérico Modelos M, " + arg.GetType());
}
public static void Main()
{
// Chama o método genérico passando diferentes tipos
MetodoGenerico<string>("Olá Gernéricos");
MetodoGenerico<double>(16.75);
}
}
}