如下代码:

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/

10-13 07:11