重载方法,重用代码

时间:2012-11-26 17:26:30

标签: c# .net wpf inheritance refactoring

如何重构这个以便我不在每个方法中重复相同的代码?

    private void setupTooltip(Grid obj)
    {
        var controls = obj.Children.OfType<System.Windows.Controls.TextBox>();
        foreach (var control in controls)
        {
            control.ToolTip = "Code is <" + control.Name + ">";
        }
    }

    private void setupTooltip(StackPanel obj)
    {
        var controls = obj.Children.OfType<System.Windows.Controls.TextBox>();
        foreach (var control in controls)
        {
            control.ToolTip = "Code is <" + control.Name + ">";
        }
    }

4 个答案:

答案 0 :(得分:3)

制作一个接收Panel对象的方法。 StackPanel和Grid都从那里继承,你不会使用任何特定于控件的方法。

http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx

http://msdn.microsoft.com/en-us/library/system.windows.controls.stackpanel.aspx

答案 1 :(得分:3)

ChildrenPanel课程中定义。

private void setupTooltip(Panel obj)
{
    var controls = obj.Children.OfType<System.Windows.Controls.TextBox>();
    foreach (var control in controls)
    {
        control.ToolTip = "Code is <" + control.Name + ">";
    }
}

答案 2 :(得分:1)

通过使用公共基类Panel作为方法的参数,您可以对GridStackPanel使用以下方法:

private void setupTooltip(Panel panel)
{
    var controls = panel.Children.OfType<System.Windows.Controls.TextBox>();
    foreach (var control in controls)
    {
        control.ToolTip = "Code is <" + control.Name + ">";
    }
}

答案 3 :(得分:0)

如果StackPanelGrid共享公共基类或接口,则可以将方法的参数更改为该类型,然后删除第二种方法。