请各位大大帮忙解决下一个泛型类的问题
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;
}
}
//实现IEnumerable接口
public IEnumerable <T> GetEnumrator()
{
return animals.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return animals.GetEnumerator();
}
//迭代两个基类方法
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;
}
}
}
这是 < <C#入门经典> > 里的一例题中的一个泛型类Farm.cs,用已有类Animal来约束。
为何我在编译运行时出现了错误“Ch12Ex04.Farm <T> ”不会实现接口成员“System.Collections.Generic.IEnumerable <T> .GetEnumerator()”E:\Chapter12\Ch12Ex04\Ch12Ex04\Farm.cs??请各位帮忙解答下,谢谢
[解决办法]
IEnumerator IEnumerable.GetEnumerator()
=========================================
public IEnumerator <T> GetEnumerator()
[解决办法]
將源碼貼出來,方便測試啊!
[解决办法]
源码是一个Animal.cs类,两个继承于其的Cow,Chicken类,和一个继承于Cow的SuperCow类
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;
}
}
//构造函数2
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();
}
}
[解决办法]
Chick.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);
}
}
}