TOC

This article has been localized into Portuguese by the community.

Tipos de dados:

Tipos anônimos

Até agora, aprendemos que objetos vêm de uma classe. Uma classe é declarada com vários campos, propriedades e/ou métodos e, em seguida, você pode criar uma instância dessa classe como um objeto. No entanto, com a introdução de tipos anônimos, você não precisa mais declarar uma classe antes de criar um objeto. Não se preocupe, as classes não são absolutamente mortas, porque tipos anônimos (ou objetos) vêm com várias limitações, mas em algumas situações, eles são realmente ótimos!

Um tipo anônimo é inicializado usando o operador new , em combinação com um inicializador de objetos - nesse aspecto, é muito parecido com instanciar uma classe, apenas você deixa de fora o nome da classe. Além disso, como não há nenhuma classe por trás do objeto, você deve usar a palavra-chave var ao recuperar a referência ao seu objeto. Isso pode parecer complicado, mas o exemplo a seguir deve demonstrar a você que não é nada complicado:

var user = new    
{    
        Name = "John Doe",    
        Age = 42  
};
Console.WriteLine(user.Name + " - " + user.Age + " years old");

É isso - agora temos um objeto com informações (nome e idade) sobre um usuário. Tipos anônimos são ótimos para muitas situações, especialmente quando você só precisa retornar algo rapidamente, com mais complexidade do que apenas uma string ou um número. Os tipos anônimos permitem que você crie propriedades na hora, sem se preocupar em declarar uma classe primeiro e depois alterar essa classe quando sua necessidade for alterada. Mas, como mencionado, há várias limitações que você precisa saber ao considerar o uso de um tipo anônimo ao definir uma classe:

  • Ao contrário de uma classe real, um tipo anônimo não pode ter campos ou métodos - apenas propriedades
  • Uma vez que o objeto foi inicializado, você não pode adicionar novas propriedades a ele
  • Propriedades são somente leitura - assim que o objeto foi inicializado, você não pode alterar seus valores

Mas com isso dito, os tipos anônimos ainda são extremamente práticos para muitas tarefas. Um cenário de uso comum é quando você tem um objeto complexo (de uma classe definida) e precisa simplificá-lo, por exemplo, porque você tem que manter o objeto o menor possível para enviá-lo para um navegador ou porque o objeto completo tem informações confidenciais que você não deseja expor ao consumidor. Tipos anônimos são ótimos para isso, conforme ilustrado no próximo exemplo:

using System;
using System.IO;

namespace AnonymousTypes
{
    class Program
    {
        static void Main(string[] args)
        {
            string pathOfExe = System.Reflection.Assembly.GetEntryAssembly().Location;
            FileInfo fileInfo = new FileInfo(pathOfExe);
            var simpleFileInfo = new
            {
                Filename = fileInfo.Name,
                FileSize = fileInfo.Length
            };
            Console.WriteLine("File name: " + simpleFileInfo.Filename + ". Size: " + simpleFileInfo.FileSize + " bytes");
        }
    }
}

A primeira linha simplesmente nos dará o nome do arquivo atualmente em execução, isto é, nosso próprio aplicativo. Usamos isso para criar uma instância da classe FileInfo, que conterá MUITAS informações sobre esse arquivo específico. Não queremos toda essa informação, por isso criamos uma versão simplificada do mesmo com um tipo anônimo, usando as informações da instância original do FileInfo. Na última linha, usamos essas informações para alguma saída básica.

Você provavelmente notou que damos um nome a cada uma das propriedades definidas em nosso tipo anônimo ( Filename e FileSize ) - isso faz muito sentido, já que queremos acessar mais tarde. No entanto, ao basear nosso objeto em informações de um objeto existente, podemos deixar nosso próprio nome e deixar que o compilador use apenas o nome da propriedade que atribuímos a ele, assim:

var simpleFileInfo = new
{
    fileInfo.Name,
    fileInfo.Length
};

Agora, temos duas propriedades chamadas Name e Length , em vez de Filename e FileSize . Uma conveniência muito boa, se você não se importar com os nomes ou talvez mais provavelmente: Se você realmente preferir os mesmos nomes do objeto original.

Resumo

Tipos anônimos permitem que você instancie rapidamente um objeto com uma ou várias propriedades. Essas propriedades são somente leitura e você não pode adicionar mais propriedades em um momento posterior.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!