C# 这是重载方法的正确方法吗?
我正在开发自己的命令行参数解析器,在阅读了几十篇关于方法重载的文章之后,我仍然不确定我是否做对了C# 这是重载方法的正确方法吗?,c#,overloading,C#,Overloading,我正在开发自己的命令行参数解析器,在阅读了几十篇关于方法重载的文章之后,我仍然不确定我是否做对了 这样重载方法对我有什么好处吗?我知道我可以通过分支在一个方法(使用默认值参数)中编写整个过程,但我目前正在尝试重载,我想知道是否继续这条路径 public static class MyParsers { private static List<string> args; static MyParsers() {
这样重载方法对我有什么好处吗?我知道我可以通过分支在一个方法(使用默认值参数)中编写整个过程,但我目前正在尝试重载,我想知道是否继续这条路径
public static class MyParsers
{
private static List<string> args;
static MyParsers()
{
args = Environment.GetCommandLineArgs().ToList();
}
public static List<string> ParseOptions()
{
return ParseOptions(false);
}
public static List<string> ParseOptions(bool toLowercase)
{
// DEBUG: Change command line arguments here.
var arguments = args;
return !toLowercase
? arguments
: arguments.MyExtToLower();
}
public static bool OptionExists(string option)
{
return OptionExists(option, false);
}
public static bool OptionExists(string option, bool toLowercase)
{
var list = ParseOptions(toLowercase);
for (var i = 1; i < list.Count; i++)
{
if (list[i].StartsWith(option)) return true;
}
return false;
}
}
公共静态类MyParser
{
私有静态列表参数;
静态MyParsers()
{
args=Environment.GetCommandLineArgs().ToList();
}
公共静态列表解析选项()
{
返回ParseOptions(false);
}
公共静态列表解析选项(bool-toLowercase)
{
//调试:在此处更改命令行参数。
var参数=args;
返回!toLowercase
?论据
:arguments.MyExtToLower();
}
公共静态bool OptionExists(字符串选项)
{
返回OptionExists(option,false);
}
公共静态bool OptionExists(字符串选项,bool-toLowercase)
{
var list=ParseOptions(toLowercase);
对于(变量i=1;i
是的,很好
如您所知,如果您的重载只调用另一个具有默认值的方法(这将减少代码行数),您还可以使用带有默认值的可选参数。是的,这很好
如您所知,如果您的重载只调用另一个具有默认值的方法(这将减少代码行数),您还可以使用带有默认值的可选参数。是的,这就是重载的工作方式 但是一个侧节点:
- 您是否需要从不支持的语言中使用代码 可选参数?如果是,请考虑包含重载。
- 您的团队中是否有任何成员强烈反对可选参数?(有时候,接受一个决定更容易 你不喜欢争论这个案子。)
- 您确信您的默认值不会在代码的不同版本之间更改吗?或者,如果可能的话,您的调用者会同意吗
来源:是的,重载就是这样工作的 但是一个侧节点:
- 您是否需要从不支持的语言中使用代码 可选参数?如果是,请考虑包含重载。
- 您的团队中是否有任何成员强烈反对可选参数?(有时候,接受一个决定更容易 你不喜欢争论这个案子。)
- 您确信您的默认值不会在代码的不同版本之间更改吗?或者,如果可能的话,您的调用者会同意吗
如果这不是一个潜在问题,那么使用可选参数更方便。使用多个重载模拟可选参数的等效版本没有这个问题,因为在这种情况下,默认值被烘焙到程序集A而不是C中。我认为您的重载风格很好 如果您认为可能有大量不同的解析参数(ToUpperCase等)
而不是有一个类,有很多重载的方法,你可能会考虑使用对象继承,并有一个LealReCasePalter,CamelCaseParser etc.… < P>我认为你的超载风格很好。 如果您认为可能有大量不同的解析参数(ToUpperCase等)
而不是有一个类有很多重载的方法,你可能会考虑使用对象继承,并有一个LealReCasePalter,CamelCaseParser etc.… < P>是的,这是正确使用重载的方法。 关于默认参数,需要注意一点 如果有两个程序集A和B,A将调用B中的函数 如果更改B中的默认值: 使用参数的默认值,需要重新编译程序集A和B才能使此更改生效 使用重载,您只需要重新编译B
这是因为对于默认参数,编译器在编译时插入默认值。是,这是使用重载的正确方法 关于默认参数,需要注意一点 如果有两个程序集A和B,A将调用B中的函数 如果更改B中的默认值: 使用参数的默认值,需要重新编译程序集A和B才能使此更改生效 使用重载,您只需要重新编译B
这是因为对于默认参数,编译器在编译时会插入默认值。“我知道我可以用一个方法(使用默认值参数)编写整个过程”-我会在这个场景中这样做,就像我