为什么我不能访问特定于我的子类的方法?

bbs*_*nbb -5 c# polymorphism object

在C#中,我有一个带有公共成员的父类.我想派生父类,然后派生公共成员的类,以便创建和访问新方法,如下所示......

    public class Animal { }
    public class Sheep : Animal {
        public void makeALamb() { }
    }
    public class Farm
    {
        public Animal myAnimal;
    }
    public class SheepFarm : Farm {
        public void SheepFarm() {
            this.myAnimal = new Sheep();
            this.myAnimal.makeALamb();
        }
    }
Run Code Online (Sandbox Code Playgroud)

此代码无法编译."Animal不包含makeALamb()的定义".但我想做的是多态的本质,不是吗?我错过了什么?我非常期待找到答案.

提前致谢!

Sim*_*ead 8

因为myAnimal是类型Animal.因此,它只能访问Animal...的成员,并且Animal没有方法makeALamb.

这里任务的右侧:

this.myAnimal = new Sheep();
Run Code Online (Sandbox Code Playgroud)

..它是什么.左侧显示您的代码所看到的内容.你的任务的左侧是:

public Animal myAnimal;
//     ^^^^^^
Run Code Online (Sandbox Code Playgroud)

现在..假装你尝试过的东西是可能的..考虑一下:

this.myAnimal = new Snake();
this.myAnimal.makeALamb(); // what does it call here?

this.myAnimal = new Giraffe();
this.myAnimal.makeALamb(); // what here?
Run Code Online (Sandbox Code Playgroud)

..当你打电话makeALamb给一个Snake实例时会发生什么?...