Структурам не нужны были бы интерфейсы, если бы this передавался в extension functions по ссылке, а не по значению (для структур)

struct BookInfo
{
string Title;
}

static class SimpleBookExtensions
{
// так можно
public static void Print(this BookInfo info) {}
// а так почему-то нельзя
public static void Print(ref this BookInfo info) {}
}

Почему вторым способом не делают?

http://stackoverflow.com/questions/2618 … on-methods
http://stackoverflow.com/questions/6528 … y-ref-in-c
http://stackoverflow.com/questions/1809 … on-methods
http://stackoverflow.com/questions/1891 … e-ref-this

"in VB you can already use ByRef extension methods"

https://github.com/dotnet/roslyn/issues/165
https://github.com/dotnet/csharplang/issues/186