In C#, boxing converts value types to reference types, and unboxing reverses this. During boxing, the runtime creates a temporary reference type object on the heap to hold the value type. Reference types are stored on the heap, not the stack (option A is wrong), and identifiers can contain numeric characters (option D is wrong).