【问题标题】:Default method parameters in C#C# 中的默认方法参数
【发布时间】:2010-08-14 08:04:28
【问题描述】:

如何使方法具有参数的默认值?

【问题讨论】:

标签: c# .net optional-parameters


【解决方案1】:

您只能在 C# 4 中执行此操作,它同时引入了 named arguments and optional parameters

public void Foo(int x = 10)
{
    Console.WriteLine(x);
}

...
Foo(); // Prints 10

请注意,默认值必须是常量 - 正常的编译时常量(例如文字)或:

  • 值类型的无参数构造函数
  • default(T) 某些类型 T

还请注意,默认值嵌入在 调用者的 程序集中(假设您省略了相关参数) - 因此,如果您更改默认值而不重建调用代码,您仍然会看到旧值。

C# in Depth 的第二版中介绍了这个(以及 C# 4 中的其他新功能)。 (在这种情况下是第 13 章。)

【讨论】:

  • C# in Depth 图书的链接错误。 manning.com 网站返回一个 PHP 文件,该文件重定向到一个无法加载的网站。
  • @NikolayKostov: Humbug - 附属程序不久前改变了。我在这里包含了一个更简单的链接。
【解决方案2】:

C# 4.0 允许你使用named and optional arguments:

public void ExampleMethod(
    int required, 
    string optionalstr = "default string",
    int optionalint = 10
)

在以前的版本中,您可以使用方法重载simulate default parameters

【讨论】:

    【解决方案3】:

    您只需使用默认值声明它们 - 它们称为optional parameters

     public void myMethod(string param1 = "default", int param2 = 3)
     {
     }
    

    这是在 C# 4.0 中引入的(因此您需要使用 Visual Studio 2010)。

    【讨论】:

      【解决方案4】:

      一个简单的解决方案是重载方法:

      private void Foo(int length)
      {
      }
      
      private void Foo()
      {
          Foo(20);
      }
      

      【讨论】:

      • 这仍然是一个很好的解决方案,即使在 C# 4 中也是如此。这样做的一个优点是默认值嵌入在您的程序集中而不是调用者的;有关详细信息,请参阅 Jon 的答案。
      • @Dan:我越来越怀疑“你不能更改默认值”问题的真正损害......因为对于大多数代码,我预计无论如何,整个应用程序都会被重新编译。这是值得了解的事情,但我不认为这真的是一个大问题。
      • @Jon,我倾向于同意你的观点,因为我认为在任何情况下依赖特定的默认值可能都是不好的做法,因为这似乎表明API 已更改。如果是这种情况,客户可能无论如何都需要改变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2011-12-24
      相关资源
      最近更新 更多