class Program {
	static void Main(string[] args) {
		var h = new Hoge();
		h.set(2);
		Console.WriteLine(h.piyo);
		var f = new Fuga();
		f.set(2);
		Console.WriteLine(f.piyo);
	}
}
class Hoge {
	public int piyo;
}
struct Fuga {
	public int piyo;
}
static class Extension {
	public static void set(this Hoge h, int i) {
		h.piyo = i;
	}
	public static void set(this Fuga f, int i) {
		f.piyo = i;
	}
}

structは値渡し
すっかり忘れていた…