【问题标题】:Default method parameters [closed]默认方法参数
【发布时间】:2013-04-03 13:34:48
【问题描述】:

如何在不改变构造函数的情况下创建具有重载概念的方法?

我想使用带参数的线程,但我不确定是否需要放置参数表,因为有时我不需要让方法带参数。再次创建一个带参数的方法,但它不是必须提供参数,我不想使用重载概念。

public void DoIt(string text){
//do something with text //do other things
}

DoIt(); //the method will do other things without paying attention to do something with text

【问题讨论】:

  • 为什么不想使用重载?
  • 你的问题几乎没有意义。构造函数与创建类的实例有关,不一定与方法有关。
  • 不太清楚,能不能多放点代码和使用示例?
  • 查看可选参数。这个问题的公认答案应该会有所帮助:stackoverflow.com/questions/3316402/…
  • @MostafaSarsour 你这里不需要重载,可选参数适合这种情况

标签: c#


【解决方案1】:

当然,重载它,让您的 fullest 方法处理参数或不处理参数,并且您的重载使用适当的参数调用该方法(如果它们在功能上足够相似,那么它们绝对应该是 -否则将新方法称为完全不同的东西,表明这一点):

public void DoIt(string text) {
  if (!string.IsNullOrEmpty(text)) {

  } else {

  }
} 

public void DoIt() {
  DoIt(""); // or DoIt(null);
}

您也可以在以后的 C# 版本中使用optional parameters,但这不是重载:它允许您为参数参数指定默认值,然后在调用中省略这些参数。但是,这不是重载,并且您必须确保所有可选参数都是签名的尾随参数。

不过,我不确定你认为构造函数是从哪里来的。

【讨论】:

  • 啊哈,所以没有其他办法(我必须使用重载)
  • 谢谢,但我的目的不是给它任何参数,即使是 null :)
【解决方案2】:

您可以使用默认参数

public void DoIt(string text="")

通过这样做,您可以在不想使用参数时调用 DoIt() 或在要传递某些内容时调用 DoIt("someString")

【讨论】:

    【解决方案3】:

    在 c# 4 及更高版本中,您可以为参数指定默认值,因此无需在调用站点指定它们:

    public void DoIt(string text = "")
    {
       //do something with text 
       //do other things
    }
    

    然后你可以调用它或者传递一个参数,像这样:

    DoIt("parameterValue");
    

    或不传递参数,在这种情况下,将使用方法定义中指定的值:

    DoIt(); // equivalent to DoIt("");
    

    【讨论】:

    • yub 这就是我所说的谢谢
    • +1 用于了解 OP 的实际要求
    • @MostafaSarsour 你的方法调用is仍然在这里获取参数。
    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2015-12-10
    相关资源
    最近更新 更多