【问题标题】:Better Way to Do Overloaded Functions in C#?在 C# 中执行重载函数的更好方法?
【发布时间】:2013-06-15 07:15:17
【问题描述】:

我有很多功能可以获取信息并填充类或其他东西。他们愿意接受不完整的信息并经常填充默认值。

这是一个粗略的例子。

string name;
string address;
string phonenum;

void SaveClass(string a)
{
    SaveClass(a, "UNSET", "UNSET");
}

void SaveClass(string a, string b)
{
    SaveClass(a, b, "UNSET");
}

void SaveClass(string a, string b, string c)
{
    name = a;
    address = b;
    phonenum = c;
}

如果我能做这样的事情,那就太酷了。

void SaveClass(string a, optional string b="UNSET", optional string c="UNSET")
{
    name = a;
    address = b;
    phonenum = c;
}

这样我可以一口气写出所有三个重载。有这样的吗?

感谢您的帮助。

【问题讨论】:

    标签: c# function overloading


    【解决方案1】:

    从 C# 4 开始,您可以使用 可选参数 做到这一点:

    void SaveClass(string a, string b = "UNSET", string c = "UNSET")
    

    然后在调用方法的时候,可以指定命名参数

    SaveClass("Foo", c: "Some value for C");
    

    或者只使用按顺序填充的位置参数:

    SaveClass("Foo", "Some value for B");
    

    即使您不使用可选参数,也可以使用命名参数,如果您在方法调用中有很多参数并且不清楚哪个是哪个参数,这会很有帮助。

    有一些限制:可选参数的默认值必须是常量,可选参数必须出现在方法签名的末尾(params 参数除外),但这些限制都是有充分理由的。

    在查找更多文档时需要注意的一点 - 尽管这些功能被正确地称为 可选参数命名参数,但许多文章(包括 some in MSDN itself)都会谈到关于“可选参数”甚至“命名参数”。

    【讨论】:

      【解决方案2】:

      你可以这样做。只需从参数中删除optional 部分即可。

      它们被称为可选参数。在这里,有一个 MSDN 链接:Optional Parameters.

      你可以这样使用它们:

      void MyFunc(string x, int y = 0)
      {
          //do whatever
      }
      

      小提示:是C# 4 或更高版本,所有可选值都必须是常量,因为编译器所做的实际上是将它们刻录到编译后的代码中。这只是语法糖,真的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多