class Program {
static void Main()
{
object x = new StringBuilder("Hello");
var w = new Wrapper(x);
var fld = typeof(Wrapper).GetField("Wrapped");
var v = (StringBuilder)fld.GetValue(w);
// Modify object returned by FieldInfo.GetValue().
v.Append(" World!");
// Write out original value. It should have been modified by the above line.
Console.WriteLine(x);
// Oh look, these two variables point to the same object.
Console.WriteLine(Object.ReferenceEquals(x, v));
}
class Wrapper
{
public Wrapper(object wrapped)
{
this.Wrapped = wrapped;
}
public object Wrapped;
}
}