【问题标题】:Send method as the parameter to another method (clarification)将方法作为参数发送到另一个方法(澄清)
【发布时间】:2015-04-10 07:56:21
【问题描述】:

我知道这个问题已经以多种形式被问过很多次了,但现在我想澄清一些事情。

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就够了吗?

这个问题的原因

我没有找到有关如何执行此操作的一般说明。所有示例都充满了个人细节,人们在给方法命名时使用自己的理解,并不清楚在他们的示例中哪个做了什么,这就是为什么我决定用中性名称创建线程。

【问题讨论】:

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


    【解决方案1】:
    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 相同的类中。

    【讨论】:

      【解决方案2】:

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

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

      在你的主要代码中使用

       Default_Method(Additional_Method);
      

      【讨论】:

        猜你喜欢
        • 2017-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        相关资源
        最近更新 更多