0

我不确定这在 C# 中是否允许,但我很确定我以前用其他语言做过。

假设我有班级,Parent,其中有孩子Child0Child1。我制作了一个类型数组Parentwhere Array[0]is of typeChild0Array[1]is of type Child1。在这种情况下,我如何调用孩子的方法?当我输入Array[0].Method()时,它会调用ParentMethod 的版本。如何让它调用Child0方法的版本?这可能吗?

4

2 回答 2

2

您只需在基类中将 Method 声明为 virtual:

public class Parent{
    public virtual void Method(){
    ...
    }
}

并在继承类中覆盖它:

public class Child : Parent{
    public override void Method(){
        ...
    }
}

请注意,如果您的 Parent 类中不需要“标准”实现,因为所有继承类都有自己的版本,您也可以将方法设置为抽象:

public class Parent{
    abstract public void Method();
}

然后你没有选择,所有从 Parent 继承的类都必须提供 Method 的实现,否则你会遇到编译时错误。

于 2012-10-05T20:44:05.297 回答
1

如果您创建父方法virtual,则可以覆盖子类中的基方法。

public class Human
{       
    // Virtual method 
    public virtual void Say()
    {
        Console.WriteLine("i am a human");
    }
}

public class Male: Human
{        
    // Override the virtual method 
    public override void Say()
    {
        Console.WriteLine("i am a male");
        base.Draw(); // --> This will access the Say() method from the 
       //parent class.           
    }
}

将它们添加到数组中:(尽管我个人会使用 a List<T>

 Human[] x = new Human[2];
 x[0] = new Human();
 x[1] = new Male();

打印结果:

 foreach (var i in x)
 {
    i.Say();
 }

将打印出来

"i am a human" // --> (parent class implementation)    
"i am a male" // --> (child class implementation)
于 2012-10-05T20:44:53.203 回答