Где хранятся struct, реализующие interface?

Структуры (struct) в языке программирования C# хранятся в стеке (stack), в отличие от объектов класса, которые хранятся в куче (heap).

Структуры могут реализовывать интерфейсы (interfaces), и механизм данной реализации немного отличается от классов. В случае, если структура реализует интерфейс, каждый метод интерфейса, определенный в структуре, будет скомпилирован как отдельный метод структуры. Это может привести к дублированию кода в случае, если несколько структур реализуют один и тот же интерфейс. Это происходит потому, что структуры копируются при передаче по значению (by value), в отличие от классов, которые передаются по ссылке (by reference).

Поскольку структуры хранятся в стеке, их временные экземпляры создаются при вызове методов и строго ограничены областью видимости, в которой они созданы. Это означает, что экземпляры структур, реализующих интерфейс, будут храниться в стеке, но только до тех пор, пока они находятся в области видимости. При выходе из этой области видимости временные экземпляры структур будут автоматически удалены.

Однако, в случае, если структура реализует интерфейс и ее экземпляр сохраняется в другой структуре, классе или массиве, она будет копироваться и передаваться по значению. Это поведение основывается на поведении самой структуры в C# и может потребовать дополнительных манипуляций для обеспечения правильной передачи по значению.

В заключении, структуры, реализующие интерфейсы, хранятся в стеке и будут создаваться и удаляться в области видимости, где они определены. При передаче по значению временные экземпляры структур будут копироваться. Это поведение отличается от классов, которые хранятся в куче и передаются по ссылке.