昨晚编译《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();
}
}
}
可是我在泛型类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();
}
}
}
解决方案 »
- 急!hashtable
- 各位大侠帮忙,C#用Access存取ico怎么老有问题啊?
- 送分快来抢:COM+/Enterprise Services的关键特性和应用场景
- 高分求一问,Directx 与 GDI+ 的共同点,优缺点。
- winform 上传文件到服务器上;删除,打开服务器上的文件
- C#如何处理打印
- 刚下载了一个vs.net中文版的ISO文件,可惜第一张盘不能读,请教高手能不能修复一下?
- 问两个有关控件的问题
- C#函数问题
- AppDomain中跨域委托,在Console程序中可用,在Asp.net中提示调用的目标发生异常
- c#的dataReder 对象可以去修改数据库吗?
- 【】如何在C#实现中文HZ编码的解码?希望各位大大能提供源码。。。多谢多谢。。。
{
return animals.GetEnumerator();
}===================> public IEnumerator <T> GetEnumrator()
{
return animals.GetEnumerator();
}
public IEnumerator<T> GetEnumrator()
{
return animals.GetEnumerator();
} IEnumerator IEnumerable.GetEnumerator()
{
return animals.GetEnumerator();
}是这样写的吗?
不会实现接口成员“System.Collections.Generic.IEnumerable<T>.GetEnumerator()”
的错误的。
public IEnumerable<T> GetEnumrator()
{
return animals.GetEnumerator();
}
改成
public IEnumerator<T> GetEnumrator()
{
return animals.GetEnumerator();
}
就可以了,但是只有完全删除重新写才有效,直接把IEnumerable改成IEnumerator还是无法编译