class test
    {
        public static void Main(string[] args)
        {
            string s = "' ";
            MainClass y = new MainClass();
            BaseClass x = y;
            x.i = 100;
            Console.WriteLine("{0} ,{1}", x.i, y.i);
            Console.ReadKey();
        }    }
    class MainClass : BaseClass
    {
        public int i;
    }    class BaseClass
    {
        public int i;
    }输出结果为什么是100,0 在java里面输出结果也是一样的.求大神解释通俗点,小弟才疏学浅.

解决方案 »

  1.   

    MainClass 的 i

    BaseClass 的 i
    一点关系都没有。
      

  2.   

    你这里没有override(字段也不允许override),那么你当前是什么类型,就访问的那个类型下面对应的字段,不可能会混淆的。
      

  3.   

    1. string s = "' "; 有什么用?
    2. 不要将字段public
    3. 尽管代码不规范,但程序隐含使用的new关键字,也就是hide,并没有override,所以各是各。
      

  4.   

    继承基类之后,你也得继承它的方法啊,没有关键字OVERRIDE,你这算是继承吗?还有,继承之后你也得实现它的方法,不然你继承有个PI用啊!个人建议,到网上随便搜索一个面向对象的案例!
      

  5.   

    java 里面所有的东西都默认是虚的
      

  6.   


    BaseClass y = new BaseClass();
                BaseClass x = new BaseClass();
                x=y;
                x.i = 100;
                Console.WriteLine("{0} ,{1}", x.i, y.i);楼主问的应该是这种情况下值是跟着变得吧
      

  7.   

    再补充一点。field表示的Data,不能override。override只能是行为,比方说属性或方法等。如果你想override,在基类的元素应该定义成virtual或abstract,然后在子类要使用override关键字才成。
      

  8.   

    string s = "' ";
                MainClass y = new MainClass();
                BaseClass x = y;
                x.i = 100;
                Console.WriteLine(string.Format("{0}---{1}---{2}", x.i,y.i, ((BaseClass)y).i););
                Console.ReadKey();看看这样的输出结果你就该明白了