Подробности о том, что происходит, когда структура реализует интерфейс
Я недавно сталкивался с этим вопросом 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!?
Какова точная семантика структуры типа значения, которая обрабатывается как ссылочный тип?