.net里面对象不是引述呢?什么时候是引用什么时候不是

.net里面对象不是引用呢?什么时候是引用什么时候不是?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            person p = new person();
            p.age = 13;
            setage(p);
            Console.WriteLine(p.age);//p.age=12;
            Console.Read();
        }
        static void setage(person p)
        {
            p.age = 12;
            p = new person();
            p.age = 15;
        }
        class person { public int age;}
    }
}

请问为什么不是15啊?
------解决思路----------------------
static void setage(person p)
        {
            p.age = 12;
            p = new person();
            p.age = 15;
        }
红色的代码,把p指向了新的引用,赋值的是新实例的age属性
跟你传递进来的实例没有任何关系
------解决思路----------------------
引用:
Quote: 引用:

static void setage(person p)
        {
            p.age = 12;
            p = new person();
            p.age = 15;
        }
红色的代码,把p指向了新的引用,赋值的是新实例的age属性
跟你传递进来的实例没有任何关系
按照这句话把p指向另外一个实例,那么p其实就被改变了实例,最后输出不应该是另一个实例的参数而不是原实例的参数吗?

。。。很多人没搞明白。 setage(person p) 这个到底传的是啥,在C#里面这个只是传的是外面P的一个副本,而不是P本身自己的
可以这么理解吧

 static void Main(string[] args)
        {
            person p = new person();   这里的P实列了 
            p.age = 13;
            setage(p); 这把生成了同样的一个P的副本 专了进去,注意是副本不是指针 相当于另一个P ,P的副本都指向了同一个堆里的内存
            Console.WriteLine(p.age);//p.age=12;
            Console.Read();
        }
        static void setage(person p)
        {
            p.age = 12; 
            p = new person(); 然后这里的P的副本又给new 重新指向 一个内存。并不影响外面的原来的P
            p.age = 15;
        }