我对编程比较陌生,所以请原谅我,如果我说错了一些术语(我已经学会了这些概念,我实际上并没有真正使用它们)。
麻烦:我目前有一个班级我会叫鲍勃,它的父类是Cody,Cody有方法调用Foo()。我希望Bob也有Foo()方法,除了一些额外的代码行。我试图做Foo():base(),但这似乎不起作用。对此有一些简单的解决方案吗?
答案 0 :(得分:8)
您可以在派生类中覆盖Foo
并使用base.Foo()
调用重写的基类实现:
class Cody
{
public virtual void Foo()
{
Console.WriteLine("Cody says: Hello World!");
}
}
class Bob : Cody
{
public override void Foo()
{
base.Foo();
Console.WriteLine("Bob says: Hello World!");
base.Foo();
}
}
new Bob().Foo()
的输出:
Cody says: Hello World! Bob says: Hello World! Cody says: Hello World!
构造函数使用稍微不同的语法来调用基类中的构造函数,因为它们要求必须在派生类中的构造函数之前调用基类构造函数:
class Cody
{
public Cody()
{
}
}
class Bob : Cody
{
public Bob() : base()
{
}
}
答案 1 :(得分:2)
标准形式(没有多态性)是:
class Cody
{
public void Foo ()
{
}
}
class Bob : Cody
{
public new void Foo()
{
base.Foo(); // Cody.Foo()
// extra stuff
}
}
如果您想要多态,则以下两行会发生变化:
// Cody
public virtual void Foo ()
// Bob
public override void Foo()
通过Cody引用调用Bob实例时显示差异:
Bob b = new Bob();
Cody c = b;
b.Foo(); // always Bob.Foo()
c.Foo(); // when virtual, Bob.Foo(), else Cody.Foo()
答案 2 :(得分:0)
您需要将基本方法标记为虚拟,在继承的类中覆盖它,然后以这种方式调用基类。您可以在“Cody”课程中代码之前或之后调用基础,这取决于您的通话顺序。
class Bob
{
public virtual void Foo()
{
}
}
class Cody
{
public override void Foo()
{
base.Foo()
// your code
}
}