A value type is a type whose value is stored in a variable on the stack, e.g. when you do this:
vb.net Code:
  1. Dim var As Integer = 100
the 'var' variable actually contains the value 100. A reference type is a type whose value is stored on the heap while a variable on the stack will contain the memory address of that object, e.g. when you do this:
vb.net Code:
  1. Dim var As Form = New Form
the 'var' variable actually contains a memory address, i.e. a reference to a Form object that resides on the heap.

Note that the stack and the heap are areas in memory that are arranged in different ways to optimise different types of access. Another point to note is that basically classes are reference types and structures are value types.

Boxing is the act of creating an Object variable that contains a reference to a value type, e.g.
vb.net Code:
  1. Dim var As Object = 100
Instead of 'var' containing the value 100 it contains a reference to the value on the heap. In order to use that value you must first unbox it, i.e. assign its value to a variable on the stack. The process of boxing and unboxing is relatively time-consuming and should therefore be avoided if possible. An example of where boxing and unboxing would occur is populating an ArrayList with Integer values. As you retrieve each item it is returned as an Object reference, so you must unbox it to use it. A generic List(Of Integer) is far more efficient because all Integer values are stored in Integer variables, so no boxing or unboxing occurs.