C# 方法吃狮子在课堂上使用。我如何将吃过的东西(活的东西)的值设置为死的?
动物世界中接口IAnimal中的Eat方法在Lion类中具有功能。当一只动物(狮子)吃了一个活的东西,剩下的东西就死了 i生活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
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是的,从技术上讲,你的答案是对当前发布的模型进行最短的干净更改,以达到所要求的效果。我只是添加了额外的信息,因为这个示例似乎过于做作,我感觉问题不在于如何实现特定设计中的要求,而在于对如何实现这一点有点困惑总的来说,应该解决这个问题。