繁体   English   中英

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

[英]Automatically make all child classes call parent's method

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

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

由于代码是一团糟,因此在调试UI时我不容易遵循流程,也不知道我何时查看哪种形式。

对于我来说,有太多形式无法手动为每个方法创建一个方法,因此我想做的是在每个人都调用的父类中创建一个方法。 例如,此方法可以将表单名称打印到控制台。 通过这种方式,我可以根据导致问题的原因在源代码中创建一些文件夹结构。

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

任何输入都非常感谢!

如果您尚未覆盖OnShown方法,则可以将其放在基本形式中,如下所示:

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

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

据我了解和您所说,如果所有表单都从基本表单继承,则它们都具有相同的组件。 因此,您可以创建一个类似于波纹管的模块,然后放置此基本形式的方法。

'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 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM