结构上的as运算符?

Roy*_*mir 24 .net c# casting as-operator

我不明白.该As操作:

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
}
Run Code Online (Sandbox Code Playgroud)
  • Baby是一个结构,创建它将把价值放入stack.这里没有参考.

  • 这里肯定没有可空类型.

关于我为什么错的任何解释?

Mar*_*ell 34

将其作为接口进行转换将在托管堆上创建一个盒装副本,并返回对盒装副本的引用.该框实现了界面.

  • @RoyiNamir至少没有.接口总是引用类型,除了泛型之外,它们可以是*约束*类型(引用类型和值类型之间的中间) (4认同)

Cod*_*aos 9

它的工作原理是因为右侧是一个界面.条件是右侧可以接受null为值,即它是引用类型或可空值类型.接口是引用类型.在这种情况下,代码将打包结构,然后将盒装对象转换为接口.