你可以讓寵物從一個共同的基類派生:
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