C#表单继承-父表单中的函数需要调用子表单中的重写函数
好的-我遇到了一个我很难解决的问题 我有两种形式——一种是继承自另一种。我们称他们为FormParent和FormChild MyFunction()是在FormParent中定义的。我不需要重写它,因为它将对许多不同的表单执行相同的基本操作,但它调用DoSomethingUnique()。DoSomethingUnique在父级中定义,并在子级中重写 我的问题是,因为我没有重写MyFunction(),所以当我从FormChild调用它时,它调用的DoSomethingUnique()版本是来自FormParent的函数,而不是FormChildC#表单继承-父表单中的函数需要调用子表单中的重写函数,c#,visual-studio-2012,C#,Visual Studio 2012,好的-我遇到了一个我很难解决的问题 我有两种形式——一种是继承自另一种。我们称他们为FormParent和FormChild MyFunction()是在FormParent中定义的。我不需要重写它,因为它将对许多不同的表单执行相同的基本操作,但它调用DoSomethingUnique()。DoSomethingUnique在父级中定义,并在子级中重写 我的问题是,因为我没有重写MyFunction(),所以当我从FormChild调用它时,它调用的DoSomethingUnique()版本是来
是否有任何方法可以避免重写这两个函数,但将名为DoSomethingUnique()的版本作为FormChild的版本?您想要做的肯定会起作用。你只需要确保你有正确的修改器 在FormParent中
virtual public void DoSomethingUnique()
在FormChild中
override public void DoSomethingUnique()
如果没有使用override
显式修改该方法,则将在FormParent中调用该方法
显然,用您的返回类型替换void。您描述的情况听起来不正确。如果覆盖了
MyFunction()
调用DoSomethingUnique()
和DoSomethingUnique()
,则应调用被覆盖的版本。请给我们看一些实际代码,或者实际代码的一个类似示例。您不需要使用虚拟调用覆盖?我可能遗漏了什么…@Brian是的,你确实遗漏了,但是user2848780说他/她正在重写该方法。当然,除非我们看到代码,否则我们无法确定情况是什么。@JLRishe-我完全同意。虽然,我怀疑我们不会看到结果……这方面的技术细节是,如果DoSomethingUnique()
没有标记为虚拟,那么MyFunction(){DoSomethingUnique();}
发出的IL将是一个调用而不是callvirt
,并将因此被发送到FormParent
DoSomethingUnique()
。谢谢-这正是我所需要的!