什么是对象:
•        一个类的局部变量存在于栈(stack)中
       不是被预先赋值的
       可以被初始化为null或调用构造函数进行初始化
(下面的例子中Pair类的声明请看前面,右边显示的是内存中的情况,@表示指向)

栈堆代码示例:
static void Main()                
{
    Pair p;                          p ?
}
static void Main()              
{
    Pair p = null;                 p null
}
static void Main()
{
    Pair p = new Pair();         p @               0  .X
}      
                                               0  .Y
代码说明:
虽然类的声明和结构的声明非常类似,但类与结构是两个不同的类型。结构是值类型,而类是引用类型。无论类的实例多大,类的局部变量只是这个类实例的一个引用。
上面例子中的最上面的那段程序定义了一个Pair类的局部变量p。不管Pair类包含什么成员,p只是存在存在于栈中的一个引用。因为p没有被初始化,所以这个引用没有被赋值,p也就不能被使用。
上面例子中的中间的那段程序定义了一个Pair类的局部变量p。p被初始化为null,所以p没有指向任何对象。p已经被赋值,所以p也就能被使用。
上面例子中的最下面的那段程序定义了一个Pair类的局部变量p。由new新生成一Pair类对象,这个新产生的对象产生在堆(heap)中,然后p通过赋值指向这一堆中的对象,而p是被定义为存在于栈中。p已经被赋值,所以p也就能被使用。
new对于类来说是产生一堆中的对象,而对于结构来说是在栈中产生一个值,这可能需要一段时间的适应。