Understanding values and references
- By John Sharp
- 11/21/2018
Quick reference
To |
Do this |
Copy a value type variable |
Simply make the copy. Because the variable is a value type, you will have two copies of the same value. For example: int i = 42; int copyi = i; |
Copy a reference type variable |
Simply make the copy. Because the variable is a reference type, you will have two references to the same object. For example: Circle c = new Circle(42); Circle refc = c; |
Declare a variable that can hold a value type or the null value |
Declare the variable by using the ? modifier with the type. For example: int? i = null; |
Pass an argument to a ref parameter |
Prefix the argument with the ref keyword. This makes the parameter an alias for the actual argument rather than a copy of the argument. The method may change the value of the parameter, and this change is made to the actual argument rather than to a local copy. For example: static void Main() { int arg = 42; doWork(ref arg); Console.WriteLine(arg); } |
Pass an argument to an out parameter |
Prefix the argument with the out keyword. This makes the parameter an alias for the actual argument rather than a copy of the argument. The method must assign a value to the parameter, and this value is made to the actual argument. For example: static void Main() { int arg; doWork(out arg); Console.WriteLine(arg); } |
Box a value |
Initialize or assign a variable of type object with the value. For example: object o = 42; |
Unbox a value |
Cast the object reference that refers to the boxed value to the type of the value variable. For example: int i = (int)o; |
Cast an object safely |
Use the is operator to test whether the cast is valid. For example: WrappedInt wi = new WrappedInt(); ... object o = wi; if (o is WrappedInt temp) { ... } Alternatively, use the as operator to perform the cast, and test whether the result is null. For example: WrappedInt wi = new WrappedInt(); ... object o = wi; WrappedInt temp = o as WrappedInt; if (temp != null) ... |