I know C# has both value and reference types, but how can you do a this:
int age = 100;
string blah = age.ToString();
If age is a value type, how does it have a ToString method on it? Does it get converted to an object ONLY when required internally then?
You want to look up boxing/unboxing.
Boxing