BadCats
@BadCats

Вложенные анонимные типы?

Всем привет, имеется вот такой пример:
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();
        }
    }

Как видно, в данном примере - один анонимный тип вкладывается в другой. Я понял, что это можно изобразить примерно так: f75ccdacb0734f67b7127bb0dde39b10.jpg
Также как я понял, когда я создаю анонимный тип, 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 классами ли нет?
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 1
Free .NET decompiler
и Ildasm ответят на вопрос.
Я думаю что не вложенный будет, т.к. подобный тип может быть создан где либо еще, и что бы не дублировать их будет использован один и тот же.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы