你可以让宠物从一个共同的基类派生:
public abstract class Animal
{
protected Animal() { }
public abstract void Eat();
}
然后猫和狗派生自这个基类:
public class Cat: Animal
{
public override void Eat()
{
// TODO: Provide an implementation for an eating cat
}
}
public class Dog: Animal
{
public override void Eat()
{
// TODO: Provide an implementation for an eating dog
}
}
而且你的Person类将有Animal
类型的属性:
public class Person
{
public Animal Pet { get; set; }
}
当你拥有了人的一个实例:
var person = new Person
{
Pet = new Cat()
};
// This will call the Eat method from the Cat class as the pet is a cat
person.Pet.Eat();
你也可以提供一些在基类中的Eat
方法的共同实现,以避免在派生类中重写它ES:
public abstract class Animal
{
protected Animal() { }
public virtual void Eat()
{
// TODO : Provide some common implementation for an eating animal
}
}
注意Animal
仍然是一个抽象类,以防止它被直接实例化。
public class Cat: Animal
{
}
public class Dog: Animal
{
public override void Eat()
{
// TODO: Some specific behavior for an eating dog like
// doing a mess all around his bowl :-)
base.Eat();
}
}
这是功课吗? – 2010-09-07 17:10:19
闻起来像给我做功课。家庭作业问题没有任何问题,但他们应该被标记为这样。如果家庭作业相关,请在问题中添加“作业”标签。 – 2010-09-07 17:12:18
我不喜欢这个Person.Pet.Eat(),读错误的方式,我可能会害怕这个人会对宠物做什么..如何Person.FeedPet()代替。对于动物来说.. – 2010-09-07 17:14:52