将方法作为参数发送到另一种方法(澄清)

时间:2015-04-10 07:56:22

标签: c# asp.net methods parameters optional-parameters

我知道这个问题已多次以多种形式提出,但现在我想澄清一些事情。

2种方法:默认方法和附加方法。首先,我们使用基本操作执行默认方法。然后,如果将其他方法作为参数传递给默认方法,也可以执行它。

???void Default_Method(???Additional_Method)
{
     //default logic
     //after default logic, call additional method if its name was specified
     ??? - how to call the specified additional method
}

???void Additional_Method()
{
     //additional logic
}

... 

现在是最有趣的地方

protected void Page_Load(object sender, EventArgs e)
{
    Default_Method(???Additionl_Method???) //here I need to pass Additional_Method as a parameter
}

问题:

如何正确声明方法。我用 ??? 标记标记了要澄清的地方。

如何使附加方法成为默认方法的可选参数?在不需要时通过Null是否足够?

此问题的原因

我没有找到关于如何做的一般性指示。所有的例子都充满了各自的细节,人们在给方法命名时会使用自己的理解而且在他们的例子中哪个人做了什么并不是很清楚,这就是为什么我决定创建一个中性名字的线程。

2 个答案:

答案 0 :(得分:2)

void Default_Method(Action additionalMethod = null)
{
    //default logic         
    //after default logic, call additional method if its name was specified

    //This if is needed to avoid NullReferenceException
    if (additionalMethod != null)
        additionalMethod();
}

void Additional_Method()
{
    //additional logic
}

protected void Page_Load(object sender, EventArgs e)
{
     Default_Method(Additional_Method);
     //OR
     Default_Method();
     //OR
     Default_Method(null);
     //OR
     Default_Method(() => { /*Do something*/}); 
}

在这个例子中,我假设两个方法都与Page_Load在同一个类中定义。

答案 1 :(得分:1)

恕我直言,最好使用动作:

    void Additional_Method()
    {

    }

    void Default_Method(Action a)
    {
        a.Invoke();
    }

在主代码中使用

 Default_Method(Additional_Method);