自动使所有子类调用父方法

时间:2017-08-24 11:36:59

标签: c# .net inheritance resharper

我目前正在重构一个大型应用程序。

有大量的Windows窗体,它们都从一个基本窗体继承。我无法调试使用Application.Run()运行第一个表单后发生的任何事情。

由于代码很乱,我在调试UI时不能轻易遵循流程,并且不知道我在查看哪种形式。

我有太多的表单为每个人手动创建一个方法,所以我想要做的是在父类中创建一个由每个人调用的方法。例如,此方法可以将表单名称打印到控制台。通过这种方式,我可以在源代码中创建一些文件夹结构,具体取决于何处。

有关使用Resharper和/或Visual Studio如何做到这一点的任何建议?

非常感谢任何输入!

2 个答案:

答案 0 :(得分:1)

如果您没有覆盖OnShown方法,可以将其放在基本表单中,如下所示:

public /*abstract*/ class BaseForm : Form
{ 
    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
        Console.WriteLine($"Entered {this.GetType().Name}");
    }
}

当显示任何表单时将自动调用它,并使用Reflection将类的名称打印到控制台。

答案 1 :(得分:0)

据我了解并如您所说,如果所有表单都从基本表单继承,则它们都具有相同的组件。所以你可以创建一个像bellow这样的模块并放置这个基本形式的方法。

'This Module you will put all methods from the base form

Module ProcAuxiliar

    Public Sub BaseForm_Sum (ByVal Textbox1 As String, ByVal Textbox2 As String)
        Dim Val1 As Int32 = Convert.ToInt32(Textbox1)
        Dim Val2 As Int32 = Convert.ToInt32(Textbox2)

        MsgBox( Convert.ToString(Val1 + Val2)

    End Sub

    Public Sub BaseForm_decrease (ByVal Textbox1 As String, ByVal Textbox2 As String)
        Dim Val1 As Int32 = Convert.ToInt32(Textbox1)
        Dim Val2 As Int32 = Convert.ToInt32(Textbox2)

        MsgBox( Convert.ToString(Val1 - Val2)

    End Sub

End Module  

在Child Form中只需从模块中调用方法

'Child Form 1
    Sub BtSumClick(ByVal sender As Object, ByVal e As EventArgs) Handles btSum.Click
        ProcAuxiliar.BaseForm_Sum(Textbox1.Text, Textbox2.Text)
    End Sub

    'Child Form 2
    Sub BtDecreaseClick(ByVal sender As Object, ByVal e As EventArgs) Handles BtDecrease.Click
        ProcAuxiliar.BaseForm_decrease(Textbox1.Text, Textbox2.Text)
    End Sub

在子节点中重写baseform的方法并使用更多代码调用baseform方法:

protected override sub Children_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MyBase.Children_Load(sender, e)


    MyBase.BaseForm_Load(sender, e)


End Sub