Недавно я столкнулся с этим вопросом Stackoverflow: Когда использовать struct?
В нем у него был ответ, который сказал что-то немного глубокое:
Кроме того, поймите, что когда структура реализует интерфейс - как Перечислитель делает - и переносится на этот реализованный тип, структура становится ссылочным типом и перемещается в кучу. Внутренний Класс словаря, 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!?
В чем именно детальная семантика структуры типа значения обрабатывается как ссылочный тип?