Tipurile anonime este una dintre inovațiile din C # 3.0, Visual Basic .NET 9.0 și Oxygene care permite tipurilor de date să încapsuleze un set de proprietăți într-un singur obiect fără a fi nevoie să specificați mai întâi în mod explicit tipul [1] . Aceasta este una dintre cele mai importante caracteristici ale limbajului SQL -like LINQ integrat în limbajele C# și VB.net. Deoarece tipurile anonime nu acceptă tastarea numelor, acestea trebuie să fie stocate în variabilele declarate cu cuvântul cheie care îi spune compilatorului C# să folosească inferența tipuluivarpentru variabila dată. Astfel de proprietăți sunt doar citire în C#, dar sunt și citire-scriere în VB.net.
Această caracteristică nu trebuie confundată cu tastarea dinamică . Chiar dacă tipurile anonime permit programatorului să definească câmpuri din mers, acestea sunt totuși entități statice. Verificarea tipului se face în timpul compilării, iar încercarea de a accesa un câmp care nu există va cauza o eroare de compilare. Acest lucru permite programatorului să profite de confortul unui limbaj dinamic împreună cu siguranța tipului unui limbaj tipizat static .
Unul dintre principalele dezavantaje ale unui tip anonim în C# 3.0 este incapacitatea de a-l exporta în afara metodei în care a fost creat. Această limitare se datorează unei limitări vechi a .NET Framework 2.0 CLR, care nu a furnizat tipuri anonime. În consecință, nu este posibil să se rezolve un conflict de nume atunci când se exportă un tip anonim cu aceeași semnătură și, în consecință, tipul anonim nu poate fi făcut vizibil în afara ansamblului. Metodele sunt limitate deoarece pot fi exportate în alte ansambluri, ceea ce ar cauza problema descrisă [2] .