public class animal
    {
        protected static string _name="animal";        public static void ShowName()
        {
            Console.WriteLine("动物名称:" + _name);
        }
    }    public class horse : animal
    {        public void ShowName()
        {
            Console.WriteLine("动物名称为" + _name);
        }
        public void ChangeName()
        {
            _name = "horse";
        }
    }    public class Demo
    {
        public static void Main(string[] args)
        {
            horse hr = new horse();
            hr.ChangeName();
            animal.ShowName();
        }
            }
当我在基类定义了一个静态字段_name,当horse继承了animal类,我用horse类改变该继承的字段,然后父类为什么也跟着改变呢?
就是当我调用了hr.ChangeName()后,父类的_name的值也跟着改变了
如果我定义的不是静态的字段_name,就没有这种变化,为什么???

解决方案 »

  1.   


    //类
    using System;
    using System.Collections.Generic;
    using System.Text;public class animal
    {
        public string _name = "animal";    public  void ShowName()
        {
            Console.WriteLine("动物名称:" + _name);
        }
    }public class horse : animal
    {    public new void ShowName()
        {
            Console.WriteLine("动物名称为" + _name);
        }
        public void ChangeName()
        {
            _name = "horse";
        }

    //FORM
     private void Form1_Load(object sender, EventArgs e)
            {
                horse hr = new horse();
                hr.ChangeName();
                Console.WriteLine(hr._name);
            }结果不是都改变了嘛~~~如果是静态的字段_name当然会改变了,
      

  2.   

    _name是静态变量,只有一个变量,没有“跟着变”的说法。也就是说,你的animal类和horse类的_name字段是一个字段
      

  3.   

    声明为static的变量,在父类和派生类都是用同一个地址空间..无论在父类还是子类改变它,都是改变同一个地址空间的值。。一样的
      

  4.   

    我建议 lz先理解一下 static
      

  5.   

    你那个_name 就相当与一个全局变量,一改当然会变,另外static 是属于类,不属于类的实例