using System;public class Sample 

    public string i = "000";} 
public class test 
{      public static void Main() 
         { 
           object obj1; 
           obj1 = "aaa"; 
           Console.WriteLine(obj1);
            obj1 = new Sample(); 
            Sample obj2; 
             obj2 = (Sample)obj1;
            //obj2 can have i.   obj1  no  i option
// why obj1 doesnt have "i", but obj2 has "i" Console.WriteLine(obj2.i); obj1 = "bbb"; Console.WriteLine(""); if(obj1.Equals(obj2)) {Console.WriteLine("same value");} if (obj1==obj2) { Console.WriteLi ne("same reference"); } Console.ReadLine(); }}
问题如上,用手机发的,没缩进,求解答。

解决方案 »

  1.   

    断点跟进
    obj1为{ObjString.Sample}
      

  2.   

    obj2 = (Sample)obj1;
    为什么要做个类型转换呢?因为obj1是object类型,而不是Sample类型
      

  3.   

    why obj1 doesnt have "i", but obj2 has "i"
    因为obj2在声明的时候是Sample类型,所以有i,而obj1是Object类型,object类中并没有i这个字段(虽然obj1也是sample类型装箱的)
      

  4.   

    object 是所有类的超类,也就是Sample也是继承object的,Sample是object的子类,Sample里的属性Object里当然没有啊