昨晚编译《C#入门经典》一例题时出现了错误“Ch12Ex04.Farm<T>”不会实现接口成员“System.Collections.Generic.IEnumerable<T>.GetEnumerator()” E:\BegVCSharp\Chapter12\Ch12Ex04\Ch12Ex04\Farm.cs
可是我在泛型类Farm中已经实现了接口IEnumerable,不知道到底错在哪里,下面是我的源代码:
Animal.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;namespace Ch12Ex04
{
    public abstract class Animal
    {
        protected string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
         //构造函数
        public Animal()
        {
            name = "The Animal with no name.";
        }
        public Animal(string newName)
        {
            name = newName;
        }
        public void Feed()
        {
            Console.WriteLine("{0} has been fed.", name);
        }
        //抽象方法
        public abstract void MakeANoise();
    }
}
--------------------------------------------------------------------
--------------------------------------------------------------------
Chicken.cs
using System;
using System.Collections.Generic;
using System.Text;namespace Ch12Ex04
{
    public class Chicken:Animal
    {
        public void LayEgg()
        {
            Console.WriteLine("{0} has laid an egg.", name);
        }
        public Chicken(string newName):base(newName)
        {
        }
        public override void MakeANoise()
        {
            Console.WriteLine("{0} says '咯咯'", name);
        }    }
}
--------------------------------------------------------------------
--------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;namespace Ch12Ex04
{
    public class Cow:Animal
    {
        public void Milk()
        {
            Console.WriteLine("{0} has been milked.",name);
        }
        public Cow(string newName):base(newName)
        {
        }
        public override void MakeANoise()
        {
            Console.WriteLine("{0} says 'moo'", name);
        }    }
}
  =====================================================================
using System;
using System.Collections.Generic;
using System.Text;namespace Ch12Ex04
{
    public class SuperCow:Cow
    {
        public void Fly()
        {
            Console.WriteLine("{0} is flying", name);
        }        //构造函数
        public SuperCow(string newName)
            : base(newName)
        {
        }
        public override void MakeANoise()
        {
            Console.WriteLine("{0} says 'I'm super cow", name);
        }
    }
}
=================================================================
报错的就是这个泛型
Farm.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;namespace Ch12Ex04
{
    public class Farm<T> : IEnumerable<T>
        where T : Animal
    {
        private List<T> animals = new List<T>();        public List<T> Animals
        {
            get
            {
                return animals;
            }
        }
        //实现接口IEnumrable
        public IEnumerable<T> GetEnumrator()
        {
            return animals.GetEnumerator();
        }        IEnumerator IEnumerable.GetEnumerator()
        {
            return animals.GetEnumerator();
        }
        //迭代Animal类的方法
        public void MakeNoises()
        {
            foreach (T animal in animals)
            {
                animal.MakeANoise();
            }
        }
        public void FeedTheAnimals()
        {
            foreach (T animal in animals)
            {
                animal.Feed();
            }
        }
        //迭代Cow和继承于它的类
        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;
        }
    }
}
=====================================================================
客户代码
using System;
using System.Collections.Generic;
using System.Text;namespace Ch12Ex04
{
    class Program
    {
        static void Main(string[] args)
        {
            Farm<Animal> farm = new Farm<Animal>();
            farm.Animals.Add(new Cow("Jack"));
            farm.Animals.Add(new Chicken("John"));
            farm.Animals.Add(new Chicken("Joe"));
            farm.Animals.Add(new SuperCow("Sam"));
            farm.MakeNoises();            Farm<Cow> dairyFarm = farm.GetCows();
            dairyFarm.FeedTheAnimals();            foreach (Cow cow in dairyFarm)
            {
                if (Cow is SuperCow)
                {
                    (cow as SuperCow).Fly();
                }
            }
            Console.ReadKey();
        }
    }
}

解决方案 »

  1.   

    public IEnumerable<T> GetEnumrator()
            {
                return animals.GetEnumerator();
            }===================> public IEnumerator <T> GetEnumrator()
            {
                return animals.GetEnumerator();
            }
      

  2.   

    //实现接口IEnumrable
            public IEnumerator<T> GetEnumrator()
            {
                return animals.GetEnumerator();
            }        IEnumerator IEnumerable.GetEnumerator()
            {
                return animals.GetEnumerator();
            }是这样写的吗?
      

  3.   

    那不可能出现
    不会实现接口成员“System.Collections.Generic.IEnumerable<T>.GetEnumerator()”
    的错误的。
      

  4.   

    恩,谢谢danjiewu(阿丹) ,问题解决了,把
            public IEnumerable<T> GetEnumrator()
            {
                return animals.GetEnumerator();
            }
    改成
            public IEnumerator<T> GetEnumrator()
            {
                return animals.GetEnumerator();
            }
    就可以了,但是只有完全删除重新写才有效,直接把IEnumerable改成IEnumerator还是无法编译