如何将对象转换为在C#中键入

时间:2017-02-16 11:44:54

标签: c# types casting

我需要将对象转换为具有特定属性和方法的类型之一。 首先,我需要检查我的对象是否是这种类型之一的实例,然后我需要将它转换为此类型并执行一些操作。

如果没有重复代码,我怎么能这样做?

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();
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你的设计有问题。每个动物都应该有一个年龄,所以不要在AgeTigerLion中设置单独的Monkey属性,而是将Age属性移动到{{} 1}} class。

您设计的另一个奇怪之处是动物不会给予维生素。他们接受维生素。我认为您应该将方法重命名为Animal。然后,创建一个这样的界面:

ReceiveVitamins

interface VitaminReceivable { void ReceiveVitamins(); } TigerLion都实现此界面,然后您可以这样做:

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; }
}