c#将基类转换为派生类,反之亦然

时间:2015-08-13 18:18:48

标签: c# inheritance

“可能已经有你答案的问题”(这个主题似乎已经讨论过,但我问的是一个稍微不同的问题)

我有三节课。 Main()方法仅调用new Processor()

我在foreach()遇到问题 - 这不能正常工作。 我也认为Animals[X,Y] = new Cat();但我没有测试过它 - 编译器称我为坏人;

public class Processor
{
    Animal[,] Animals;
    public Processor()
    {
    Animals = new Animal[10,10];
    Random rand = new Random();

    for(int X = 0; X < 10; X++)
        for(int Y = 0; Y < 10; Y++)
            {
            if(rand.Next(4) == 1) 
                 Animals[X,Y] = new Cat();
            else Animals[X,Y] = new Dog();
            }

    foreach(Animal animal in Animals)
        {
        if(animal.IsCat)
            {
            Cat MyCat = animal;
            DoSome(MyCat);
            }
        }
    }

    public void DoSome(Cat cat)
    {
    Never mind.
    }
}


public class Animal
{
    bool IsCat = false;
    public Animal(){}
}

public class Cat : Animal
{
    public Cat()
    {
    IsCat = true;
    }
    string MyColor = "White";
}

public class Dog : Animal
{
    public Dog(){}
    string MyOwner = "Dave";
}

2 个答案:

答案 0 :(得分:0)

我必须使用List<Animal>类中的继承类随机填充Animal。课程CatDog。 我需要处理这个List。要做到这一点,我必须做像

这样的事情
Foreach(Animal A in AnimalList)
{
if(CheckingThatItIsCat(A)) 
 {
 Cat C = A;
 }
}

我真的知道这个A是什么Cat类,但这段代码行调用语法错误。

答案 1 :(得分:0)

除了尝试使用foreach循环遍历数组数组的问题之外,您还需要通过显式强制转换或使用{{animalas显式转换为Cat 1}} operator:

if (animal.IsCat) 
{
    Cat cat = (Cat)animal;
    // alteratively: Cat cat = animal as Cat;
    DoSomethingFeline(cat);
}

有关详细信息,请see MSDN