#有个水果篮里面最多可以装10个苹果和香蕉,她们都派生自一个叫水果的基类。使用接口IEnumerable和IEnumerator实现装入水果及遍历水果的过程
时间: 2025-01-20 15:16:27 浏览: 21
好的,下面是一个使用C#语言实现的示例,展示了如何使用`IEnumerable`和`IEnumerator`接口来装入水果及遍历水果的过程。
首先,我们定义一个水果基类:
```csharp
public class Fruit
{
public string Name { get; set; }
public Fruit(string name)
{
Name = name;
}
}
```
接下来,我们定义苹果和香蕉类,它们都继承自水果基类:
```csharp
public class Apple : Fruit
{
public Apple(string name) : base(name) { }
}
public class Banana : Fruit
{
public Banana(string name) : base(name) { }
}
```
然后,我们定义一个水果篮类,该类实现了`IEnumerable`接口:
```csharp
using System;
using System.Collections;
using System.Collections.Generic;
public class FruitBasket : IEnumerable<Fruit>
{
private List<Fruit> fruits;
private int capacity;
public FruitBasket(int capacity)
{
this.capacity = capacity;
fruits = new List<Fruit>(capacity);
}
public void Add(Fruit fruit)
{
if (fruits.Count < capacity)
{
fruits.Add(fruit);
}
else
{
Console.WriteLine("水果篮已满,无法添加更多水果。");
}
}
public IEnumerator<Fruit> GetEnumerator()
{
return new FruitBasketEnumerator(fruits);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
private class FruitBasketEnumerator : IEnumerator<Fruit>
{
private List<Fruit> fruits;
private int currentIndex;
public FruitBasketEnumerator(List<Fruit> fruits)
{
this.fruits = fruits;
currentIndex = -1;
}
public Fruit Current
{
get
{
if (currentIndex == -1 || currentIndex >= fruits.Count)
{
throw new InvalidOperationException();
}
return fruits[currentIndex];
}
}
object IEnumerator.Current => Current;
public bool MoveNext()
{
if (currentIndex < fruits.Count - 1)
{
currentIndex++;
return true;
}
return false;
}
public void Reset()
{
currentIndex = -1;
}
public void Dispose()
{
// No unmanaged resources to dispose
}
}
}
```
最后,我们编写一个测试程序来装入水果并遍历水果:
```csharp
public class Program
{
public static void Main()
{
FruitBasket basket = new FruitBasket(10);
basket.Add(new Apple("苹果1"));
basket.Add(new Banana("香蕉1"));
basket.Add(new Apple("苹果2"));
basket.Add(new Banana("香蕉2"));
foreach (var fruit in basket)
{
Console.WriteLine(fruit.Name);
}
}
}
```
运行上述程序,你会看到水果篮中的水果被遍历并打印出来。
阅读全文
相关推荐
















