我最近遇到了这个 Stackoverflow 问题:何时使用结构?
在里面,它有一个回答有点深奥:
此外,要意识到当一个结构实现了一个接口 - 就像 Enumerator 所做的那样 - 并被强制转换为该实现的类型时,该结构成为一个引用类型并被移动到堆中。在 Dictionary 类的内部,Enumerator 仍然是一个值类型。但是,只要方法调用 GetEnumerator(),就会返回引用类型的 IEnumerator。
这究竟是什么意思?
如果我有类似的东西
struct Foo : IFoo
{
public int Foobar;
}
class Bar
{
public IFoo Biz{get; set;} //assume this is Foo
}
...
var b=new Bar();
var f=b.Biz;
f.Foobar=123; //What would happen here
b.Biz.Foobar=567; //would this overwrite the above, or would it have no effect?
b.Biz=new Foo(); //and here!?
值类型结构的详细语义究竟是什么被视为引用类型?