我需要将对象转换为具有特定属性和方法的类型之一。 首先,我需要检查我的对象是否是这种类型之一的实例,然后我需要将它转换为此类型并执行一些操作。
如果没有重复代码,我怎么能这样做?
var foo = GetAnimalById(animalId); // Animal type returned to foo
var animal = new Animal(); // Animal class hasn't Age property and GiveVitamins method
if (foo is Tiger) {
animal = foo as Tiger;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
if (foo is Lion) {
animal = foo as Lion;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
if (foo is Monkey) {
animal = foo as Monkey;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
答案 0 :(得分:0)
我认为你的设计有问题。每个动物都应该有一个年龄,所以不要在Age
,Tiger
和Lion
中设置单独的Monkey
属性,而是将Age
属性移动到{{} 1}} class。
您设计的另一个奇怪之处是动物不会给予维生素。他们接受维生素。我认为您应该将方法重命名为Animal
。然后,创建一个这样的界面:
ReceiveVitamins
让interface VitaminReceivable {
void ReceiveVitamins();
}
,Tiger
和Lion
都实现此界面,然后您可以这样做:
Monkey
编辑:
现在我知道你不能在var foo = GetAnimalById(animalId); // Animal type returned to foo
var animal = new Animal(); // Animal class hasn't Age property and GiveVitamins method
if (foo is VitaminReceivable) {
animal = foo;
if (animal.Age >= 10)
{
((VitaminReceivable)animal).ReceiveVitamins();
}
}
中拥有Age
,你应该创建另一个界面:
Animal
让子类实现接口,然后你可以这样写:
interface Ageable {
int Age { get; }
}