初学者问题
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(); }
}
问题如上,用手机发的,没缩进,求解答。 --------------------编程问答-------------------- 断点跟进
obj1为{ObjString.Sample} --------------------编程问答-------------------- obj2 = (Sample)obj1;
为什么要做个类型转换呢?因为obj1是object类型,而不是Sample类型 --------------------编程问答-------------------- why obj1 doesnt have "i", but obj2 has "i"
因为obj2在声明的时候是Sample类型,所以有i,而obj1是Object类型,object类中并没有i这个字段(虽然obj1也是sample类型装箱的) --------------------编程问答-------------------- object 是所有类的超类,也就是Sample也是继承object的,Sample是object的子类,Sample里的属性Object里当然没有啊 --------------------编程问答-------------------- 楼上都正解 +1
补充:.NET技术 , C#