Ответ 1
Передача его в качестве интерфейса создаст коробочную копию в управляемой куче и вернет ссылку на коробку. Ящик реализует интерфейс.
Я не понимаю. Оператор As
:
Тогда почему работает следующее?
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
. Здесь нет ссылки.
Здесь, конечно, нет типов с нулевым значением.
Любое объяснение, почему я ошибаюсь?
Передача его в качестве интерфейса создаст коробочную копию в управляемой куче и вернет ссылку на коробку. Ящик реализует интерфейс.
Это работает, потому что правая сторона - это интерфейс. Условие состоит в том, что правая сторона может принимать null
как значение, то есть это ссылочный тип или тип значения NULL. Интерфейсы являются ссылочными типами. В этом случае код будет вставлять структуру, а затем вставлять объект в коробке в интерфейс.
Просто присваивается значение ссылочного типа ILive
с нулевым значением, поэтому не возникает ошибка. Однако, если вы попробуете этот прокомментированный код, вы получите сообщение об ошибке.
Baby b = new Baby ();
object o = b;
//Baby bb = o as Baby ;
Это связано с тем, что вы пытаетесь использовать as
для значения типа и не может быть нулевым.