Monday 2 October 2017

Reference Type & Value Type


  • The types are either treated by value type or by reference type.
  • Reference type variables are stored in the heap while value type variables are stored in the stack.
  • A value type holds the data within its own memory allocation and a reference type contains a pointer to another memory location that holds the real data.


Value Type:

  • When you created a value type, a single space in the memory is allocated to store the value and that variable directly holds a value.
  • If you assign it to another variable, the value is copied directly and both variables work independently.
  • Value type can  be created at compile time and stored in stack memory, because of this, garbage collector can't access the stack.
  • All the values are derived implicitly from the System.ValueType.
  • You cannot derive a new type from a value type. However, like reference types, structs can implement interfaces.
  • eg:- int X = 25;
  • Here the value 25 is stored in an area of memory called the stack.
  • When the variable X goes out of scopebecause the method in which it was defined has finished executing, the value is discarded from stack.
  • Using the stack is efficient, but the limited lifetime of value types makes them less suited for sharing data between different classes.
  • Each value type has an implicit default constructor that initialize the default value of that type.
  • Value type cannot contain the null value.
  • The nullable types features does allow for value types to be assigned to null.

Reference Type:

  • Reference types represent the address of the variable rather than the data itself.
  • Assigning a reference variable to another doesn't copy the data. Instead it created a second copy of the reference, which refers to the same location of the heap as the original value.
  • When a reference type variable is no longer used, it can be reclaimed by garbage collector.
  • Reference type is created at run time.
  • eg: Classes, objects, arrays, indexers, interfaces, etc.


No comments:

Post a Comment