object
or System.Object
is the ultimate base class for all types.
Any type can be upcast to object
.
The following code creates a class Stack to provide a First-In-Last_Out data structure.
public class Stack { int position; object[] data = new object[10]; public void Push (object obj) { data[position++] = obj; } public object Pop() { return data[--position]; } }
Because Stack
works with the object
type,
we can Push and Pop any type to and from the Stack.
Stack stack = new Stack(); stack.Push ("CSS"); string s = (string) stack.Pop(); // Downcast, so explicit cast is needed Console.WriteLine (s);
When casting between a value type and object, the CLR must perform the process of boxing and unboxing.
Boxing is to convert a value-type instance to a reference-type instance.
The reference type may be either the object class or an interface.
int x = 1; object obj = x; // Box the int
Unboxing reverses the operation, by casting the object back to the original value type:
int y = (int)obj; // Unbox the int
Unboxing requires an explicit cast.
For instance, the following throws an exception, because long does not exactly match int:
object obj = 1; // 1 is inferred to be of type int long x = (long) obj; // InvalidCastException
The following code does the unboxing and cast:
object obj = 9; long x = (int) obj;