C#
Two simple options:
class Obj
{
public int state;
public static implicit operator int(Obj o)
{
return o.state++;
}
}
static int LValueI;
static Obj LValueM { set { value.state++; } }
static void Main()
{
var obj = new Obj { state = 1 };
LValueI = obj;
Console.WriteLine(obj.state); //2, caused by the implicit cast.
LValueM = obj;
Console.WriteLine(obj.state); //3, caused by the property setter.
Console.ReadLine();
}
class Obj
{
public int state;
public static implicit operator int(Obj o)
{
return o.state++;
}
}
static int LValueI;
static Obj LValueM { set { value.state++; } }
static void Main()
{
var obj = new Obj { state = 1 };
LValueI = obj;
Console.WriteLine(obj.state); //2, caused by the implicit cast.
LValueM = obj;
Console.WriteLine(obj.state); //3, caused by the property setter.
Console.ReadLine();
}
Or we could simply write to the same memory:
[StructLayoutAttribute(LayoutKind.Explicit)]
class Program
{
[FieldOffset(0)]
int state = 1;
[FieldOffset(1)]
int LValue;
void Test()
{
var obj = this;
Console.WriteLine(state); //1
LValue = state;
Console.WriteLine(state); //257
Console.ReadLine();
}
static void Main() { new Program().Test(); }
}