Подтвердить что ты не робот

Как оператор на структурах?

Я не понимаю. Оператор As:

The as operator is used to perform certain types of conversions between compatible reference or nullable types.

Тогда почему работает следующее?

struct Baby : ILive
{
    public int Foo { get; set; }

    public int Ggg() 
    {
        return Foo;
    }
}

interface ILive
{
    int Ggg();
}

void Main()
{
    ILive i = new Baby(){Foo = 1} as ILive;    // ??????
    Console.Write(i.Ggg());                    // Output: 1
}
  • Baby - это структура, создающая ее, ставит значение в stack. Здесь нет ссылки.

  • Здесь, конечно, нет типов с нулевым значением.

Любое объяснение, почему я ошибаюсь?

4b9b3361

Ответ 1

Передача его в качестве интерфейса создаст коробочную копию в управляемой куче и вернет ссылку на коробку. Ящик реализует интерфейс.

Ответ 2

Это работает, потому что правая сторона - это интерфейс. Условие состоит в том, что правая сторона может принимать null как значение, то есть это ссылочный тип или тип значения NULL. Интерфейсы являются ссылочными типами. В этом случае код будет вставлять структуру, а затем вставлять объект в коробке в интерфейс.

Ответ 3

Просто присваивается значение ссылочного типа ILive с нулевым значением, поэтому не возникает ошибка. Однако, если вы попробуете этот прокомментированный код, вы получите сообщение об ошибке.

Baby b = new Baby ();
 object o = b;
//Baby bb = o as Baby ;

Это связано с тем, что вы пытаетесь использовать as для значения типа и не может быть нулевым.