TOC

This article is currently in the process of being translated into Dutch (~64% done).

Data types:

Anonymous Type

Objecten worden gevormd door klassen. Een klasse wordt gedeclareerd met een aantal velden, eigenschappen en/of methoden. Dan kan een instance van deze klasse gemaakt worden en dat noemt men een object. Met de invoering van anonymous types is het niet nodig eerst een klasse te declareren alvorens een object te creëren. Geen paniek, klassen zijn nog niet afgeschreven, want anonymous types (of objecten) komen met verschillende beperkingen, maar in sommige omstandigheden zijn ze zeer nuttig!

Een anonymous type wordt geïnitialiseerd met de new operator in combinatie met een object initialisatie. Tot zover lijkt het erg op het instantiëren van een klasse maar de naam van de klasse wordt weggelaten. Omdat er geen klasse vermeld wordt achter het object, moet het var sleutelwoord gebruikt worden wanneer naar het object verwezen wordt. Dit lijkt ingewikkeld maar een voorbeeld laat zien dat het wel meevalt:

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

That's it - we now have an object with information (name and age) about a user. Anonymous types are great for a lot of situations, especially when you just need to return something quickly, with more complexity than just a string or a number. Anonymous types allow you to make up properties on the fly, without worrying about declaring a class first and then alter this class when your need changes. But as mentioned, there are several limitations that you need to be aware of when you consider using an anonymous type over defining a class:

  • Unlike a real class, an anonymous type can't have fields or methods - only properties
  • Once the object has been initialized, you can't add new properties to it
  • Properties are readonly - as soon as the object has been initialized, you can't change their values

But with that said, anonymous types are still extremely practical for a lot of tasks. A common usage scenario is when you have a complex object (from a defined class) and you need to simplify it, e.g. because you have to keep the object as small as possible to send it to a browser or perhaps because the full object has sensitive information that you don't want to expose to the consumer. Anonymous types are great for this, as illustrated in this next example:

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");
}
    }
}

Op de eerste regel verkrijgen we de bestandsnaam van het huidige bestand, dus van onze eigen applicatie. Deze gebruiken we om een instantie te creëren van de FileInfo klasse, die VEEL informatie bevat over dit specifiek bestand. Al deze informatie hebben we niet nodig. Dus maken we er een vereenvoudigde versie van met een anonymous type, gebruik makend van de originele FileInfo instantie. Op de laatste regel gebruiken we die informatie om wat uitvoer te verkrijgen.

Elke eigenschap die gedefinieerd wordt in het anonymous type krijgt een naam (Filename en FileSize). Dit is logisch omdat we deze achteraf willen benaderen. Maar wanneer een object werkt met informatie van een bestaand object, kan de eigen naam weggelaten worden en de compiler alleen de naam van de eigenschap laten gebruiken:

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

Nu hebben we twee eigenschappen met de namen Name en Length in plaats van Filename and FileSize. Dat is wel zo gemakkelijk, het gebruik van de dezelfde namen als in het oorspronkelijk object.

Samenvatting

Anonymous types laten toe snel een object te stantiëren met één of enkele eigenschappen. Deze eigenschappen zijn alleen lezen en er kunnen er later geen meer toegevoegd worden.

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!