Всем привет, имеется вот такой пример:
class Program
{
static void Main()
{
// Анонимные типы в анонимных типах.
var instance = new { Name = "Alex", Age = 27, Id = new { Number = 123 } };
Console.WriteLine("Name = {0}, Age = {1}, Id = {2}", instance.Name, instance.Age, instance.Id.Number);
// Delay.
Console.ReadKey();
}
}
Как видно, в данном примере - один анонимный тип вкладывается в другой. Я понял, что это можно изобразить примерно так:
Также как я понял, когда я создаю анонимный тип, Visual Studio создает новый класс и новый класс создается когда компилятор встречает новый анонимный тип. Новизна определяется путем сравнения имен свойств, их порядка и типов.
И получается, что когда я создаю новый анонимный тип, то Visual Studio порождает (примерно) следующий класс:
[DebuggerDisplay("{ x = {x}, y = {y} }", Type = "<Anonymous Type>")]
public sealed class Anonymous<TX, TY>
{
private readonly TX field_x;
private readonly TY field_y;
public TX x { get { return field_x; } }
public TY y { get { return field_y; } }
[DebuggerHidden]
public Anonymous(PX x, PY y)
{
field_x = x;
field_y = y;
}
public override bool Equals(object value) { /* тут имплементация */ }
public override int GetHashCode() { /* тут имплементация */ }
public override string ToString() { /* тут имплементация */ }
}
Но если у меня один анонимный тип вложен в другой, то эти порожденные классы будут Nested классами ли нет?