I am confused about how C# works in general when passing object instances.
This is the code I have trouble understanding:
public void foo()
{
    SomeObj obj = new SomeObj();
    obj.PropertyX = true;
    bar(obj);
    Console.Write(obj.PropertyX.toString()); //true or false?
}
public void bar(SomeObj obj)
{
    obj.PropertyX = false;
}
In the code above if the objects instance is passed by reference, I would expect the Console to print false. Is this how C# and OOP work? 
Or does the instance of SomeObj  in foo() preserve the state and the console prints true?
