私は最近、この 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!?
参照型のように扱われる値型構造の詳細なセマンティクスは正確には何ですか?