Today I came across a post that asked “are reference types True?” The author was, I believe, trying to make the point that the behavior of reference types passed to methods may behave in a way you don't expect. (Click the link above to see the code sample in question.)
In this particular case, the expected output is 20, not 10. The value 10 would be true only if the valhold class was passed into method1 using the "ref" keyword. The default behavior of object passing in .NET is to pass a copy of the object in the case of value types or, in the case of reference types, to pass a copy of the object reference (or pointer, not the actual object reference itself). Since method1 in the example takes a valhold class as-is (by copying the reference to the reference), you can still manipulate the contents of the original object. However, if you replace the original object in the method body, then you are now dealing with a new object and any changes will not be made to the original object.