从基础强制方法调用子类的新方法

我的理解是,子类的行为与父类完全相同,除了其他方法或那些使用new和override关键字“重写”的方法。显然,这是不正确的。


请参见下面的代码(为了方便阅读,删除了括号)


class BIG

    protected void Output(string text = "")

        Console.WriteLine("BIG - " + text);


    public void CallingOutput()

        Output("Outputting...");


class SMALL:BIG

    public new void Output(string text = "")

        Console.WriteLine("SMALL - " + text);


class Program

    static void Main(string[] args)

        SMALL foo = new SMALL();

我已经知道我可以BIG.Output(string)使用new关键字将其隐藏在“小”中。直接调用时,它可以完美运行。


>> foo.Output("Outputting...")

SMALL - Outputting...

这是与我的理解相抵触的地方。我认为class SMALL:BIG定义class SMALL与从BIG定义并复制粘贴所有方法完全相同。简而言之,我认为上面的SMALL类与此等效:


class SMALL

    public void Output(string text = "")

        Console.WriteLine("SMALL - " + text);


    public void CallingOutput()

        Output("Outputting...");

显然这是不正确的,因为


>> foo.CallingOutput()

BIG - Outputting...

它仍然使用原来Output(string)从BIG当间接调用。


这样做的正确方法是什么,以便foo.CallingOutput()输出


"SMALL - Outputting..."


假设我无权访问BIG并且不允许进行任何更改。而且我也不想隐藏,CallingOutput()因为这基本上是在重写类。(是的,隐藏CallingOutput()使其起作用)


在发布此消息之前,我做了一些搜索,并在中找到了类似的问题C++。但是,不可能做到这一点。

  1. 我不相信 如此强大的语言,却无法告诉编译器哪种方法。

  2. 这是另一种语言,因此可以发布此帖子,因为它不能被视为重复。


慕码人2483693
浏览 133回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP