我的理解是,子类的行为与父类完全相同,除了其他方法或那些使用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++。但是,不可能做到这一点。
我不相信 如此强大的语言,却无法告诉编译器哪种方法。
这是另一种语言,因此可以发布此帖子,因为它不能被视为重复。
相关分类