C# 方法吃狮子在课堂上使用。我如何将吃过的东西(活的东西)的值设置为死的?

C# 方法吃狮子在课堂上使用。我如何将吃过的东西(活的东西)的值设置为死的?,c#,inheritance,methods,interface,C#,Inheritance,Methods,Interface,动物世界中接口IAnimal中的Eat方法在Lion类中具有功能。当一只动物(狮子)吃了一个活的东西,剩下的东西就死了 i生活 namespace AnimalWorld { public interface ILiving { Status LifeStatus { get; set; } Status GetLifeStatus(); } } IANIMALS namesp

动物世界中接口IAnimal中的Eat方法在Lion类中具有功能。当一只动物(狮子)吃了一个活的东西,剩下的东西就死了

i生活

namespace AnimalWorld
{
    public interface ILiving
    {
        Status LifeStatus
        {
            get; set;
        }

        Status GetLifeStatus();


    }
}
IANIMALS

namespace AnimalWorld
{
    public interface IAnimals : ILiving
    {
        // List<IAnimals> Breed(string babyName);
        string Name { get; set; }
        IAnimals Breed(string babyName);

        int Legs { get; }

        void Eat(ILiving food);

    }
}
namespace AnimalWorld
{
    public class Lion : IAnimals
    {

        public Lion(string name)
        {
            this.Name = name;
        }

        public Lion()
        {
        }

        public Status LifeStatus { get; set; }

        public Status GetLifeStatus()
        {
            return Status.Alive;
        }

        public string Name { get; set; }

        public IAnimals Breed(string babyName)
        {
            var baby = new Lion(babyName);
            return baby;
        }

        public int Legs
        {
            get { return 4; }
        }


        public void Eat(ILiving food)
        {
            return food;
        }
    }
}
namespace AnimalWorld
{
    internal class Program
    {
        public static void Main(string[] args)
        {

            var l = new Lion("first lion");

            var firstBabyL = l.Breed("first baby lion");
            var secondBabyL = l.Breed("second baby lion");
         }
    }
}
节目

namespace AnimalWorld
{
    public interface IAnimals : ILiving
    {
        // List<IAnimals> Breed(string babyName);
        string Name { get; set; }
        IAnimals Breed(string babyName);

        int Legs { get; }

        void Eat(ILiving food);

    }
}
namespace AnimalWorld
{
    public class Lion : IAnimals
    {

        public Lion(string name)
        {
            this.Name = name;
        }

        public Lion()
        {
        }

        public Status LifeStatus { get; set; }

        public Status GetLifeStatus()
        {
            return Status.Alive;
        }

        public string Name { get; set; }

        public IAnimals Breed(string babyName)
        {
            var baby = new Lion(babyName);
            return baby;
        }

        public int Legs
        {
            get { return 4; }
        }


        public void Eat(ILiving food)
        {
            return food;
        }
    }
}
namespace AnimalWorld
{
    internal class Program
    {
        public static void Main(string[] args)
        {

            var l = new Lion("first lion");

            var firstBabyL = l.Breed("first baby lion");
            var secondBabyL = l.Breed("second baby lion");
         }
    }
}

由于
LifeStatus
是一个公共属性,因此可以通过Lion的
Eat()
方法设置它

public void Eat(ILiving food)
{
    food.LifeStatus = LifeStatus.Dead;
}

您需要一个方法
Die

公共接口ILiving
{
生活状态
{
获得;设置;
}
状态GetLifeStatus();
空模();
}
用作:

公共类Lion:IAnimals
{
//...
空模()
{
生命状态=状态。死亡;
}
//....
}
如果我没有弄错,您可能需要的答案是保持setter私有,并提供表示类/接口行为的方法

想象一下,在你的代码中,生命状态被任意设置在不同的位置,突然,死亡对你的
IAnimals
有了不同的意义。你必须追查所有设置它的地方。相反,如果您有一个方法,您可以在该方法中执行任何您希望执行的操作,并且调用该方法的所有位置都不必以任何方式进行更改。您将直接在类中“强制”新的含义


现在,为什么死亡可能会改变意义,这是另一个故事…

Eat()
中:
food.LifeStatus=Status.Dead
或者不管这个枚举(假设它是一个枚举)是怎么写的,
GetLifeStatus()
没有意义,因为1)看起来像狮子不会死(anways返回
Status.Alive
),2)
Status lifesttatus
已经有了一个公共getterhanks-guys。我应该添加一个生命状态的枚举。namespace AnimalWorld{public enum status{Alive,Dead}}``您的
Breed
-方法可能应该是泛型的。一头
狮子
很可能不会繁殖一只
Cangaroo
,是吗?此外,你应该将你的界面命名为单数:
IAnimal
,除非你真正指的是通过该界面的一个实例存在的所有动物。在我的回答中,我试图尽可能接近OP的代码,但我同意将LifeStatus私有化并使用类似“死亡”或“杀死”的方法是个好主意(因为我活着的人不会自己称呼它)@jasonmchoe是的,从技术上讲,你的答案是对当前发布的模型进行最短的干净更改,以达到所要求的效果。我只是添加了额外的信息,因为这个示例似乎过于做作,我感觉问题不在于如何实现特定设计中的要求,而在于对如何实现这一点有点困惑总的来说,应该解决这个问题。