【问题标题】:How to call multiple functions?如何调用多个函数?
【发布时间】:2026-02-08 06:20:19
【问题描述】:

我有一个 click_event,如您所见,还有许多功能,还有更多功能。

有没有比拥有 30 多行函数更简单的方法,或者这真的是最好的方法吗?

private void metroButton1_Click(object sender, EventArgs e)
{
    foreach (MetroFramework.Controls.MetroTextBox item in groupBox1.Controls
        .OfType<MetroFramework.Controls.MetroTextBox>())
    {
        item.Enabled = false;
       
    }
    if (searchUsernametxt.Text == "")
    {
        MessageBox.Show("Domain or Username has not been completed, Please try again!",
            "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        //ActiveDirectory.DomainValue = comboBox1.SelectedText.ToString() ;
        if (ActiveDirectory.DoesUserExist(searchUsernametxt.Text) ==true)
        {
            ActiveDirectory.GetsamAccountName(searchUsernametxt.Text, samAccountNametxt);
            ActiveDirectory.isUserEnabled(searchUsernametxt.Text, userenabledtxt);
            ActiveDirectory.GetObjectGuid(searchUsernametxt.Text, GUIDtxt);
            ActiveDirectory.GetObjectSID(searchUsernametxt.Text, SIDtxt);
            ActiveDirectory.PasswordExpirationDate(searchUsernametxt.Text, passlstsettxt);
            ActiveDirectory.LockoutCheck(searchUsernametxt.Text, metroCheckBox1);
            ActiveDirectory.GetEmployeeID(searchUsernametxt.Text, employeeidtxt);
            ActiveDirectory.GetAttributed(searchUsernametxt.Text, cusatt1txt, cusatt2,
                cusatt3, cusatt4);
        }
    }
}

【问题讨论】:

  • 有没有更简单的方法来做到这一点 - 不是真的,但每个人对“简单”的定义不同 - 你的定义是什么?

标签: c#


【解决方案1】:

我认为在这种情况下更好的解决方案是创建一个包装类

public static class ActiveDirectoryWrapper
{
    public static void DoTheStuff(NeededProperties properties)
    {
       ActiveDirectory.GetsamAccountName(NeededProperties .searchUsernametxt, NeededProperties.samAccountNametxt);
       ...
       ...
       ...
    }
    
    public static boolean DoesUserExist(string searchUsernametxt)
    {
        ...
    }
}

然后从你的主类调用它

if (ActiveDirectoryWrapper.DoesUserExist(searchUsernametxt.Text) ==true)
{
    ActiveDirectoryWrapper.DoTheStuff({searchUsernametxt.Text,....});
}

这种方式更可重用和可扩展

【讨论】:

    【解决方案2】:

    Ehsan Kiani 的答案对你来说更安全


    您可以为此使用反射。如果您create custom attribute 并将其提供给您想要“批量调用”的功能会更好。 然后,get all functions with your custom attribute,最后,call them 通过迭代它们,例如,使用foreach 循环。

    所有有用的链接都提供给研究和解决问题!祝你好运!

    【讨论】:

    • 是的,但是这些方法调用中的每一个都需要不同的参数,因此您将进入一些复杂的方法来反射调用方法并提供一系列不同的参数......远不如直接调用方法清晰
    • 是的,你是对的。这就是为什么我在那里指出:D