You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#继承多态项目中Eat()方法实现及调用问题求助

解决方案:实现Animal.Eat()方法与Petowner.Feed()参数传递

1. 实现Animal类的Eat()方法

按照需求完成进食逻辑,对比传入食物与动物偏好食物,更新饥饿状态:

public virtual void Eat(string food)
{
    // 严格匹配食物(若需忽略大小写可改为food.Equals(favFood, StringComparison.OrdinalIgnoreCase))
    if (food == favFood)
    {
        hungry = false;
        Console.WriteLine($"{name} äter {food} och är nu mätt!");
    }
    else
    {
        hungry = true;
        HungryAnimal();
        Console.WriteLine($"{name} vill inte äta {food}!");
    }
}

同时优化ToString()方法,返回动物的实际信息(默认base.ToString()仅返回类型名):

public override string ToString()
{
    return $"Namn: {name}, Ålder: {age}, Ras: {breed}, Favoritmat: {favFood}";
}

2. 修改Petowner类的Feed()方法,获取并传递食物参数

在用户选择动物后,添加食物输入步骤,将参数传入Eat()方法,同时完善输入合法性校验:

public void Feed()  // Sub-menu
{
    int x = 0;
    Console.Clear();
    Console.WriteLine("Vilket djur vill du mata?\n---------------------\n");
    PrintAnimals();
    try
    {
        x = int.Parse(Console.ReadLine());
        // 校验动物序号是否在有效范围内
        if (x < 1 || x > pets.Count)
        {
            Console.Clear();
            Console.WriteLine("Ogiltigt nummer, prova igen!\n--------------------\nTryck på valfri tangent för att gå tillbaka...\n");
            Console.ReadKey();
            Feed(); // 重新进入投喂菜单
            return;
        }
    }
    catch (Exception)
    {
        Console.Clear();
        Console.WriteLine("Nu vart det fel, prova igen! (Välj med siffror)\n--------------------\nTryck på valfri tangent för att gå tillbaka...\n");
        Console.ReadKey();
        Feed(); // 重新进入投喂菜单
        return;
    }

    // 获取要投喂的食物
    Console.Clear();
    Console.WriteLine($"Vilken mat vill du ge {pets[x-1].name}?");
    string food = Console.ReadLine();

    // 调用Eat方法并传入食物参数
    pets[x-1].Eat(food);

    Console.WriteLine("\nTryck på valfri tangent för att gå tillbaka till menyn...");
    Console.ReadKey();
}

注:假设PrintAnimals()方法按1-4的顺序输出动物列表,因此用x-1对应列表索引。

额外补充

如果需要HungryAnimal()有具体行为,可在Animal类或子类中重写该方法,示例:

public virtual void HungryAnimal() 
{
    Console.WriteLine($"{name} är fortfarande hungrig!");
}

内容的提问来源于stack exchange,提问作者pickleriick137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:45:35