C# - Tipos de dados anónimos - Dei-Isep

Propaganda
C# ‐ Tipos de dados anónimos Tipos de dados anónimos permitem criar objectos que encapsulam um conjunto de propriedades só de leitura (read‐only properties) sem ter de explicitamente definir uma classe para esse tipo de dados. O nome do tipo de dados é gerado pelo compilador mas não fica disponível para usar ao nível do código fonte. O tipo de dados de cada propriedade é inferido pelo compilador. Para criar um tipo de dados anónimo usa‐se o operador new seguido de um inicializador de um objecto. Exemplo: criação de um tipo anónimo inicializado com 2 propriedades com os nomes Nome e Idade. var v = new { Nome = “Miguel”, Idade = 25 }
// Na instrução seguinte mantendo o cursor sobre v.Nome e
// v.Idade podemos verificar que os tipos de dados inferidos
// para as propriedades são string e int
Console.WriteLine(v.Nome, v.Idade);
Os tipos de dados anónimos só podem conter uma ou mais propriedades públicas e só de leitura. Tipicamente os tipos de dados anónimos são usados na cláusula select de uma expressão query para retornar um subconjunto das propriedades de cada objecto. Exemplo: Consideremos uma classe Produto com várias propriedades públicas, das quais apenas estamos interessados nas propriedades Nome e Preco. Consideremos ainda que a variável produtos contém uma colecção de objectos Produto. var query = from prod in produtos
select new { prod.Nome, prod.Preco);
foreach (var v in query) {
Console.WriteLine(“Nome={0}, Preco={1}”, v.Nome, v.Preco);
}
Os tipos de dados anónimos permitem numa cláusula select de uma expressão LINQ query transformar objectos da sequência original em objectos cujos valor e forma podem diferir do original. É útil se queremos armazenar só uma parte da informação de cada objecto da sequência. Tipicamente quando usámos um tipo de dados anónimo para inicializar uma variável), como em “var v in query”, declarámos a variável usando var (variável local implicitamente tipada. O nome do tipo de dados anónimo não pode ser usado na declaração da variável porque só o compilador tem acesso ao nome do tipo de dados anónimo. Se não especificamos o nome para um membro de um tipo de dados anónimo, o compilador dá a esse membro o mesmo nome da propriedade usada para o inicializar. Exemplo: var query = from prod in produtos
select new { prod.Nome, prod.Preco);
Os nomes das propriedades do tipo de dados anónimo definido são Nome e Preco. Equivalente a: var query = from prod in produtos
select new { Nome = prod.Nome, Preco = prod.Preco);
Se uma propriedade de um tipo de dados anónimo é inicializada com uma expressão então temos de fornecer um nome para a propriedade, como no exemplo seguinte: var v = new { Nome = “Miguel”, Idade = 25 }
Os tipos de dados anónimos são classes que derivam directamente de object. Se dois ou mais tipos de dados anónimos no mesmo assembly têm o mesmo número e tipo de propriedades, na mesma ordem, o compilador trata‐os como sendo o mesmo tipo de dados. Não podemos declarar como tipo de dado anónimo campos de dados, propriedades, eventos, tipos de retorno de métodos, parâmetros formais de métodos, de propriedades ou de construtores. Para passar um tipo de dados anónimo ou uma colecção que contenha tipos de dados anónimos, como argumento de um método, podemos declarar o parâmetro formal com o tipo object. Mas assim anula‐se o benefício dos tipos de dados. Se temos necessidade de guardar os resultados de uma query ou passá‐los para fora do método onde foram criados, devemos usar uma estrutura ou classe com nome em vez de um tipo de dados anónimo. Inicializadores de objectos Os inicializadores de objectos permitem atribuir valores a quaisquer campos de dados ou propriedades acessíveis de um objecto na altura de criação do objecto sem ter que invocar um construtor. Exemplo: class Pessoa {
// Propriedades auto-implementadas
public string Nome { get; set; }
public int Idade { get; set; }
}
Pessoa p1 = new Pessoa { Nome = “Miguel”, Idade = 25 };
Embora os inicializadores de objectos possam ser usados em qualquer contexto, são especialmente úteis em expressões LINQ query. As expressões query usam frequentemente tipos de dados anónimos, os quais só podem ser inicializados utilizando um inicializador de objecto, como no exemplo seguinte: var p2 = new { Nome = “Miguel”, Altura = 1.82 };
Variáveis locais implicitamente tipadas O tipo de dados de uma variável local pode ser var em vez de um tipo de dados explícito. Usando var para declarar uma variável o compilador infere o tipo da variável a partir da expressão do lado direito da instrução de inicialização. O tipo de dados inferido pode ser um tipo interno, um tipo anónimo, um tipo de dados definido pelo utilizador, ou um tipo definido na biblioteca de classes.NET Framework. Ao compilar, as variáveis declaradas com var passam a ter um tipo de dados bem definido. O compilador determina e atribui o tipo de dados mais apropriado à variável. Exemplos: // i passa a ser do tipo int
var i = 3;
// s passa a ser do tipo string
var s = “Olá”;
// a passa a ser do tipo anónimo
var a = new { Nome = “Miguel”, Idade = 23 };
Variáveis declaradas com var podem ser usadas nos seguintes contextos:  Variáveis locais  Nas instruções de inicialização dos ciclos for ou foreach,  Nas instruções using. Quando uma variável é inicializada com um tipo de dados anónimo é necessário declarar a variável com var para depois poder aceder às propriedades do objecto. Tipos de dados anónimos: http://msdn.microsoft.com/pt‐pt/library/bb397696.aspx Inicializadores de objectos: http://msdn.microsoft.com/pt‐pt/library/bb384062.aspx Variáveis locais implicitamente tipadas: http://msdn.microsoft.com/pt‐pt/library/bb384061.aspx 
Download