Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#表单继承-父表单中的函数需要调用子表单中的重写函数_C#_Visual Studio 2012 - Fatal编程技术网

C#表单继承-父表单中的函数需要调用子表单中的重写函数

C#表单继承-父表单中的函数需要调用子表单中的重写函数,c#,visual-studio-2012,C#,Visual Studio 2012,好的-我遇到了一个我很难解决的问题 我有两种形式——一种是继承自另一种。我们称他们为FormParent和FormChild MyFunction()是在FormParent中定义的。我不需要重写它,因为它将对许多不同的表单执行相同的基本操作,但它调用DoSomethingUnique()。DoSomethingUnique在父级中定义,并在子级中重写 我的问题是,因为我没有重写MyFunction(),所以当我从FormChild调用它时,它调用的DoSomethingUnique()版本是来

好的-我遇到了一个我很难解决的问题

我有两种形式——一种是继承自另一种。我们称他们为FormParent和FormChild

MyFunction()是在FormParent中定义的。我不需要重写它,因为它将对许多不同的表单执行相同的基本操作,但它调用DoSomethingUnique()。DoSomethingUnique在父级中定义,并在子级中重写

我的问题是,因为我没有重写MyFunction(),所以当我从FormChild调用它时,它调用的DoSomethingUnique()版本是来自FormParent的函数,而不是FormChild


是否有任何方法可以避免重写这两个函数,但将名为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()
。谢谢-这正是我所需要的!