代码之家  ›  专栏  ›  技术社区  ›  Nakul Chaudhary

函数重载与VB.NET中的默认参数?

  •  6
  • Nakul Chaudhary  · 技术社区  · 17 年前

    在VB.NET中,使用哪个更好:函数重载还是默认参数?

    3 回复  |  直到 17 年前
        1
  •  9
  •   Hamish Smith    17 年前

    如果参数是可选的(即重载是完整过程签名接受的参数的子集),那么默认或可选参数将更有意义。

    如果重载允许参数使用不同的类型,或者是一个语义上不同的参数,例程会对其进行不同的解释,那么重载将更有意义。

        2
  •  4
  •   Jon Skeet    17 年前

    代码会被其他语言使用吗?如果是这样的话,这会使天平向超载方向倾斜,同时仍然牢记哈米什的答案。特别是,C#还不支持可选参数。..

    诚然,这实际上并不能阻止有人使用C#的代码,这可能会让他们感到痛苦。

    如果有很多参数,并且它们在逻辑上表示某些东西,你可能想考虑将它们封装在一起,就像 Process 使用 ProcessStartInfo 。由于对象初始化器,这在C#中特别好。

    如果这是为了构建,您也可以将构建器模式视为其变体。例如,在Protocol Buffers中,我可以执行以下操作:

    Person jon = new Person.Builder { Name="Jon", Age=32,
                                      Spouse="Holly", Kids=3 }.Build();
    

    它最终非常可读,同时仍然一次创建一个人(在一个表达式中,不必改变人本身——事实上,消息类型是不可变的;只有构建器不是)。

        3
  •  0
  •   Mafu Josh    16 年前

    供参考

    如果要向从其他程序集调用的函数或方法添加参数,则:

    您可以通过使用额外的参数创建额外的函数来重载。

    或者你可以添加一个可选参数,但是:你必须重新编译所有调用此函数的程序集,即使它们不需要使用新的可选参数!这通常不是人们所期望的(特别是那些习惯了VB6工作原理的人)。基本上,你不能在函数中插入一个新的可选参数,并期望它完全向后兼容。此外,据我所知,如果更改默认值,则需要重建所有调用程序集才能使更改生效。