值类型如何实现接口类型?

Lin*_*son 8 c# boxing interface value-type

在C#语言规范v5.0的1.3节中,它说:

接口类型的内容可以是空引用,对实现该接口类型的类类型实例的引用,或者对实现该接口类型的值类型的盒装值的引用

这三个陈述中有两个没有问题.然而,最后一个让我困惑.接口类型如何保存实现该接口类型的值类型的盒装值?我认为值类型无法实现接口类型?或者是说盒装值实现了接口类型?如果是这种情况,盒装值如何实现接口类型?

我在理解所有这些方面遇到了麻烦.

Mar*_*zek 11

值type(struct)可以实现接口.它不能继承另一个struct,但可以实现接口.

struct(C#参考)

结构可以实现接口,但它们不能从另一个结构继承.因此,不能将struct成员声明为protected.

所以当你有一个struct实现IInterface并执行以下操作时:

var value = new MyStruct();
var valueAsInterface = (IInterface)value;
Run Code Online (Sandbox Code Playgroud)

valueAsInterface包含对实现该接口类型的值类型的盒装值的引用.


Ken*_*eth 5

没有任何东西可以说值类型无法实现接口.

以下代码完全合法:

interface ITest
{
    void DoSomething();
}

struct MyTest : ITest
{
    public void DoSomething()
    {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)