我的理解是,子类的行为与父类完全相同,除了其他方法或那些使用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++。但是,不可能做到这一点。我不相信 如此强大的语言,却无法告诉编译器哪种方法。这是另一种语言,因此可以发布此帖子,因为它不能被视为重复。
2 回答
- 2 回答
- 0 关注
- 143 浏览
添加回答
举报
0/150
提交
取消