W C# typ anonimowy pozwala na utworzenie obiektu bez uprzedniego określenia jej struktury (klasy). Zamiast najpierw definiować klasę, na przykład:
public class Point2D
{
public double X { get; set; } = 0.0;
public double Y { get; set; } = 0.0;
public Point2D() { }
public Point2D(double x, double y)
{
X = x;
Y = y;
}
public override string ToString() => $"({X}, {Y})";
}
[...]
Point2D p = new Point2D
{
X = 4.0,
Y = 6.5
};
Console.WriteLine($"P = {p.ToString()}");
Możesz utworzyć od razu obiekt z takimi właściwościami, jeżeli potrzebujesz na przykład tylko jednego obiektu:
var point2d = new
{
X = 4.0,
Y = 6.5
};
W Javie – jeżeli dobrze mówię – polega to na definiowaniu tego i tylko tego, co w interfejsie podczas tworzenia obiektu, by można było tego używać spoza definicji obiektu.
interface SomeInteface {
void doTheMagic();
}
[...]
SomeInterface obj = new SomeInterface() {
@Override
public void doTheMagic() {
System.out.println("Hello, World!");
}
}
EDIT: Drobne poprawki redakcyjne dla akapitu związanego z Javą oraz poprawa konstruktora i uproszczenie przeciążenia dla kodu w C#.