本人初学C#,看入门经典第四版泛型那一章,里面有段代码
            Farm<Animal> farm = new Farm<Animal>();
            farm.Animals.Add(new Cow("Jack"));
            farm.Animals.Add(new Chicken("Vera"));
            farm.Animals.Add(new Chicken("Sally"));
            farm.Animals.Add(new SuperCow("Kevin"));
            farm.MakeNoises();            Farm<Cow> dairyFarm = farm.GetCows();
            dairyFarm.FeedTheAnimals();            foreach (Cow cow in dairyFarm)
            {
                if (cow is SuperCow)
                {
                    (cow as SuperCow).Fly();
                }
            }
这个Farm<T>是自定义的泛型类,里面有个方法GetCows()返回的也是泛型类的实例(T为Cow的)
这里有个疑问就是farm如果之后还增加一个,如farm.Animals.Add(new Cow("Test"))的话,
这个dairyFarm是否会随之变化,自己测试了下,没有变化
不太清楚这个泛型类是不是引用类型,如果是的话,为什么这个dairyFarm没跟着变化
求达人解答,谢谢

解决方案 »

  1.   

    public Farm<Cow> GetCows()
            {
                Farm<Cow> cowFarm = new Farm<Cow>();
                foreach (T animal in animals)
                {
                    if (animal is Cow)
                    {
                        cowFarm.Animals.Add(animal as Cow);
                    }
                }
                return cowFarm;
            }
    cowFarm.Animals.Add(animal as Cow);莫非是因为这个语句?将animal显示转换为Cow的实例,并没有对animal引用?
      

  2.   

    当然是引用类型,值类型只有那么几个。
    array都是引用类型