c#重构两个几乎相同的方法

c#重构两个几乎相同的方法,第1张

概述重构是好的,但有时候解决如何重构并确实是否可以实际重构某些内容并不容易! 我有许多几乎相同的方法 – 我可以重构它们,但重构的一部分超出了我的逻辑. 这是两个未重构的方法: private void projectToolStripMenuItem_Click(object sender, EventArgs e) { if (projectToolStripMenuIte 重构是好的,但有时候解决如何重构并确实是否可以实际重构某些内容并不容易!

我有许多几乎相同的方法 – 我可以重构它们,但重构的一部分超出了我的逻辑.

这是两个未重构的方法:

private voID projectToolStripMenuItem_Click(object sender,EventArgs e)    {        if (projectToolStripMenuItem.Checked)        {            projectToolStripMenuItem.Checked = false;            if (!projectForm.Isdisposed) projectForm.HIDe();        }        else        {            if (projectForm.Isdisposed)                projectForm = new frmProject();            projectForm.Show(dockPanel,DockState.DockRight);            projectToolStripMenuItem.Checked = true;        }    }    private voID logginToolStripMenuItem_Click(object sender,EventArgs e)    {        if (logginToolStripMenuItem.Checked)        {            logginToolStripMenuItem.Checked = false;            if (!outputForm.Isdisposed) outputForm.HIDe();        }        else        {            if (outputForm.Isdisposed)                outputForm = new frmOutput();            outputForm.Show(dockPanel,DockState.DockBottom);            logginToolStripMenuItem.Checked = true;        }    }

使用Refactoring,我会得到一个这样的方法,以前的未重构方法会调用

private voID refactoredMethod(TooStripMenuItem menuItem,DockContent frmname){        if (menuItem.Checked)        {            menuItem.Checked = false;            if (!frmname.Isdisposed) frmname.HIDe();        }        else        {            if (frmname.Isdisposed)                frmname= new frmProject(); // Still Problematic            frmname.Show(dockPanel,DockState.DockRight);            menuItem.Checked = true;        }    }

那么我们有一个几乎完全重构的方法 – 有一个问题,我怎么能告诉我希望从frmname变量实例化哪个表单?

解决方法 您可以使方法通用并利用new()泛型约束.
private TForm refactoredMethod<TForm>(TooStripMenuItem menuItem,TForm frmname) where TForm : Form,new(){    if (menuItem.Checked)    {        menuItem.Checked = false;        if (!frmname.Isdisposed) frmname.HIDe();    }    else    {        if (frmname.Isdisposed)            frmname= new TForm();        frmname.Show(dockPanel,DockState.DockRight);        menuItem.Checked = true;    }    return frmname;}

所以你可以称之为

projectForm = refactoredMethod<frmProject>(projectToolStripMenuItem,projectForm);

一个限制是您的表单应该有一个公共无参数构造函数.如果你有一个带参数化构造函数的Form,你可以传递Func< TForm>作为工厂方法的方法.

总结

以上是内存溢出为你收集整理的c#重构两个几乎相同的方法全部内容,希望文章能够帮你解决c#重构两个几乎相同的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1262741.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存