超どうでも良い発見。

public struct Hoge {
   public int Value;
   public void Add(int value) { this.Value += value; }
   public Hoge(int value) { this.Value = value; }
   public override string ToString() { return this.Value.ToString(); }

   public static void Main() {
      //ボクシング。
      object obj = new Hoge(3);
      //(Hoge)objの時点で値のコピーになるので、
      ((Hoge)obj).Add(4);
      //objには影響が無い。
      Console.WriteLine(obj);
      //リフレクションでobjのメソッドを直接呼ぶと、
      typeof(Hoge).InvokeMember("Add", BindingFlags.InvokeMethod, null, obj, new object[] {4});
      //値のコピーが発生しないのでobjに影響する。
      Console.WriteLine(obj);
   }
}