这可能是一个愚蠢的问题,但如果我有以下内容:
这可能是一个愚蠢的问题,但如果我有以下内容:
interface A { }
struct B {
A some_field;
}
那么B的默认构造函数将会得到多少字节大小的内容呢?
换句话说(从另一个角度来看),接口类型的默认值是什么,它是否被视为引用类型或值类型,因为类(引用)和结构体(值)都可以从中继承?
接口是参考类型。
接口类型的字段始终为一个指针的宽度,并默认为null
。
如果您分配了实现接口的结构体,则该结构体将被装箱,该字段将包含对装箱对象的引用。
null
或实现该接口的对象之外的任何内容。与所有引用持有者一样,默认值将为null
。Thing<T> where T:IComparable<T>
{T foo;
...}
字段Foo
的默认值将与实际替代T
的类型相同。例如,给定
struct SimplePoint : IComparable<SimplePoint>
{public int x,y;
public int CompareTo(SimplePoint other)
{...}
...}
如果在Thing<SimplePoint>
中,字段Foo
没有被赋值,则它的默认值为(0,0)。
顺便提一下,将结构类型转换为任何引用类型(包括它实现的接口)都会产生一个引用,指向包含结构字段快照的新堆对象。但将该引用转换为其他引用类型将产生一个指向相同堆实例的引用。