问题描述
usingSystem;publicclassSample{publicstringi="000";}publicclasstest{publicstaticvoidMain(){objectobj1;obj1="aaa";Console.WriteLine(obj1);obj1=newSample();Sampleobj2;obj2=(Sample)obj1;//obj2canhavei.obj1noioption//whyobj1doesnthave"i",butobj2has"i"Console.WriteLine(obj2.i);obj1="bbb";Console.WriteLine("");if(obj1.Equals(obj2)){Console.WriteLine("samevalue");}if(obj1==obj2){Console.WriteLine("samereference");}Console.ReadLine();}}问题如上,用手机发的,没缩进,求解答。
解决方案
解决方案二:
断点跟进obj1为{ObjString.Sample}
解决方案三:
obj2=(Sample)obj1;为什么要做个类型转换呢?因为obj1是object类型,而不是Sample类型
解决方案四:
whyobj1doesnthave"i",butobj2has"i"因为obj2在声明的时候是Sample类型,所以有i,而obj1是Object类型,object类中并没有i这个字段(虽然obj1也是sample类型装箱的)
解决方案五:
object是所有类的超类,也就是Sample也是继承object的,Sample是object的子类,Sample里的属性Object里当然没有啊
解决方案六:
楼上都正解+1