更好的方法在C#中执行重载函数?

时间:2013-06-15 07:15:18

标签: c# function overloading

我有很多功能,我可以获取信息并填充类或其他内容。这些人愿意接受不完整的信息并且经常使用默认值填充。

这是一个粗略的例子。

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;
}

这样我就可以快速写出所有三个重载。有这样的吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

从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)将讨论“可选参数”甚至“命名参数”。

答案 1 :(得分:0)

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

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

你像这样使用它们:

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

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