如下代码:
class Program
{
static P1 p = new P1();
static void Main(string[] args)
{
var t = new P2();
p = t;
p.DoWork();
t.DoWork();
Console.ReadLine();
}
}
public class P1
{
public void DoWork()
{
Console.WriteLine("Test1");
}
}
public class P2: P1
{
new public void DoWork()
{
Console.WriteLine("Test2");
}
}
将打印出:
Test1
Test2
无论如何,有没有强制调用p.DoWork()使用P2类中的实现。实际上,P1类是在第三方编译的程序集中,因此我无法修改P1类的任何代码。通常,我只是将virtual关键字添加到P1中,但这是不可能的。
最佳答案
没有。P1
的作者没有选择将其DoWork
方法虚拟化。因此,您无法更改该方法的功能。
不要引入与new
中的DoWork
相同名称和签名的P1
方法。这会导致混乱。而且它不会以任何方式更改原始的DoWork
。而是,为您自己的方法选择一个新名称。
如果P1
的功能并非在所有情况下都不是您所需要的,那么也许您根本不应该继承P1
的功能。相反,您的类可以保存一个P1
类型的私有字段,然后您的某些方法可以使用P1
的“良好”功能。
关于c# - 使用新关键字C#强制使用方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17906820/