【发布时间】:2018-10-22 07:04:12
【问题描述】:
我想知道,虽然继承可以用来继承派生类中的属性和方法。
为什么我们不在派生类中编写函数,而是将它们声明为覆盖。
以下示例将详细解释我的问题。
class Net
{
public virtual void Act()
{
}
}
class Perl : Net
{
public override void Act()
{
Console.WriteLine("Perl.Act");
}
}
class Python : Net
{
public override void Act()
{
Console.WriteLine("Python.Act");
}
}
// Use base class and derived types in a List.
List<Net> nets = new List<Net>();
nets.Add(new Perl());
nets.Add(new Python());
// Call virtual method on each instance.
foreach (Net net in nets)
{
net.Act();
}
在上面的示例中,act 函数可以声明为“新”函数,为什么我们要选择覆盖基函数??
编辑:假设我有一个案例如下
class Net
{
public virtual void Act()
{
}
public virtual void secondMethod()
{
}
}
class Perl
{
public override void Act()
{
Console.WriteLine("Perl.Act");
}
public override void secondMethod()
{
Console.WriteLine("Perl.Act");
}
}
class Python
{
public new void Act()
{
Console.WriteLine("Python.Act");
}
public override void secondMethod()
{
Console.WriteLine("Perl.Act");
}
}
那我该怎么办。 在上述情况下,我希望继承基类,但我正在实现的功能可能不同。 在这种情况下,我应该使用覆盖还是编写完全不同的方法。
【问题讨论】:
-
不做任何其他更改,将任何子方法声明为
new,看看会发生什么。
标签: c# oop inheritance