结果就是1,2 啊
任何类型都可以转换成object类型,包括简单类型

解决方案 »

  1.   

    我曾经也蛋疼过.. public void MyTest( object obj)
            {
                obj = 1;
                object obj2= MyTest2(obj);
                Console.WriteLine(obj.ToString());
                Console.WriteLine(obj2.ToString());        }
            public object MyTest2(object obj)
            {
                obj=2;
                return obj;
            }obj=2; 这步其实是obj=new Object(2);//虽然不能这样写,但意义就是这样..它会在堆上新建1片地方保存2这个值..obj存的是这个实例的引用..你仔细想象也明白啊..public class test{
    public string name{get;set;}
    }test t1=new test(){name="123"};
    test t2=t1;
    t2.name="456";这时2个的name都一样..而你是obj=2;你自己体会下吧
      

  2.   

    的确是引用类型,obj2=MyTest(obj1) 这里返回2,所以输出2是没问题的
    知道你的疑问在于obj1为什么还是1?
    public object MyTest2(object obj)
            {
                obj=2;
                return obj;
            }上面这个方法,改变了局部变量的值,但传进来的参数,实质只是obj1的一个引用复本,obj=2; 只是对这个引用复本重新赋值了,而obj1本身变不会有任何变化(无论是引用类型还是值类型)
      

  3.   


    不是在赋值时新建,而是object obj2= MyTest2(obj)调用的时候,传入的obj就只是obj1的一个引用复本
    为了描述方便,MyTest1中的obj当作obj1
    obj和obj1引用的都是1(装箱了),在MyTest2内部,那个局部变量obj就跟obj1没有一点关系了
      

  4.   

    object是引用类型,但是int不是,object接收int发生装箱,反之发生拆箱。引用的是那个箱,倒腾一遍,int还是int。明白了么?
      

  5.   

    3楼的说法很到位
    我只补充一句:
    string也是引用类型,object跟string的实现是差不多的,明白了么?
      

  6.   

    这个跟数组不同
    如果定义
    int[ ] a=new int[4];
    那么在函数里修改a[0]的时候,改的是被引用的值,而不是a本身的指向而string和object在重新赋值的时候,指向也变了
      

  7.   

    数据类型之引用类型的使用
    //所谓引用类型=类类型=接口类型=数组类型=委托类型
    //引用类型的使用
    class Program
        {
            class C //创建一个类C
            {
                public int Value; //声明一个公共int类型的变量Value
            }
           static void Main(string[] args)
            {
                int v1 = 0; //声明一个int类型的变量v1,并初始化为0
                int v2 = v1; //声明一个int类型的变量v2,并将v1赋值给v2
                v2 = 927; //重新将变量v2赋值为927
                C r1 = new C(); //使用new关键字创建引用对象
                C r2 = r1;         //使r1等于r2
                r2.Value = 112;         //设置变量r2的Value值
                Console.WriteLine("Values:{0},{1}", v1, v2);    //输出变量v1和v2
                Console.WriteLine("Refs:{0},{1}", r1.Value, r2.Value);  //输出引用类型对象的Value值
                Console.ReadLine();
            }
        }