代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

C中是否有类似于PHP的可选参数?

  •  2
  • Edward Tanguay  · 技术社区  · 16 年前

    具有 PHP可选参数 ,如果不发送参数,它将被指定为默认值:

    public function getCustomer(id, optionalMessage = "(no message)") {
        ...
    }
    

    在C中,我通常用 方法过载 ,例如:

    public void GetCustomer(int id) 
    {
        ...
    }
    
    public void GetCustomer(int id, string optionalMessage)
    {
        ...
    }
    

    但我错过了实用的PHP变体, C也有一些甜甜的语法来做可选参数吗? ,就像在PHP示例中一样?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Marc Gravell    16 年前

    不在C 3.0中;此功能在C 4.0的表中-请参见 here .

    现在,您必须使用不同的重载:

    public void Foo(int a) {Foo(a, "");}
    public void Foo(int a, string b) {...}
    

    建议的语法为:

    public void Foo(int a, string b = "") {...}
    

    使用以下任一项调用:

    Foo(123); // use default b
    Foo(123, "abc"); // optional by position
    Foo(123, b: "abc"); // optional  by name
    
        2
  •  4
  •   Erik Funkenbusch    16 年前

    不,但是您可以在一定程度上模拟它们,特别是当您的可选参数是同一类型时(或者您不介意执行一些强制转换)。

    您可以使用参数标志。

    void paramsExample(object arg1, object arg2, params object[] argsRest) 
    

    不过,我应该指出,这会失去类型安全性,并且不存在参数或顺序的类型强制。