我在看Anders' talk about C# 4.0 and sneak preview of C# 5.0 ,这让我开始思考什么时候 C# 中的可选参数可用,推荐的方法是什么来声明不需要指定所有参数的方法?
例如 FileStream
类有大约 15 个不同的构造函数,它们可以分为逻辑“家族”,例如以下来自字符串的那些,来自 IntPtr
的那些和来自 SafeFileHandle
的那些。
FileStream(string,FileMode);
FileStream(string,FileMode,FileAccess);
FileStream(string,FileMode,FileAccess,FileShare);
FileStream(string,FileMode,FileAccess,FileShare,int);
FileStream(string,FileMode,FileAccess,FileShare,int,bool);
在我看来,这种类型的模式可以通过使用三个构造函数来简化,并对可以默认的参数使用可选参数,这将使不同的构造函数家族更加明显[注意:我知道这种变化不会在 BCL 中制作,我是在假设这种情况下说话]。
你怎么看?从 C# 4.0 开始,将密切相关的构造函数和方法组变成一个带有可选参数的方法是否更有意义,或者是否有充分的理由坚持传统的多重重载机制?
最佳答案
我会考虑以下几点:
- 您是否需要使用不支持可选参数的语言来使用您的代码?如果是这样,请考虑包括重载。
- 您的团队中是否有任何成员强烈反对可选参数? (有时候接受一个你不喜欢的决定比争论这个问题更容易。)
- 您是否确信您的默认值不会在您的代码构建之间发生变化,或者如果它们可能会发生变化,您的调用者会接受吗?
我没有检查默认值是如何工作的,但我假设默认值将被烘焙到调用代码中,与对 const
字段的引用非常相似。这通常没问题 - 对默认值的更改无论如何都非常重要 - 但这些是需要考虑的事情。
关于c# - 您应该在 C# 4.0 中使用重载或可选参数来声明方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/251868/