Optional parameters and inheritance
我了解可选参数,我非常喜欢它们,但我想知道更多关于将它们与继承接口一起使用的信息。
附件A
1 2 3 4 5 6 7 8 9 10 11 12 13 | interface IMyInterface { string Get(); string Get(string str); } class MyClass : IMyInterface { public string Get(string str = null) { return str; } } |
现在我认为
'MyClass' does not implement interface member 'MyInterface.Get()'
号
这有充分的理由吗?
也许我应该通过将可选参数放入您所说的接口来实现这一点?但是这个呢?
附件B
1 2 3 4 5 6 7 8 9 10 11 12 | interface IMyInterface { string Get(string str="Default"); } class MyClass : IMyInterface { public string Get(string str ="A different string!") { return str; } } |
号
这段代码编译得很好。但这肯定是不对的?再挖一点,我发现了:
1 2 3 4 5 |
似乎调用代码正在根据所声明的对象类型获取可选参数的值,然后将其传递给方法。在我看来,这有点愚蠢。可能可选参数和方法重载在应该使用它们的时候都有它们的场景?
我的问题
我的调用代码被传递给
是否将强制我在每个实现中实现相同的方法重载?
1 2 3 4 | public string Get() { return Get("Default"); } |
。
我还没有意识到,可选参数不会改变方法签名。因此,以下代码完全合法,实际上是我的解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 | interface IMyInterface { string Get(string str ="Default"); } class MyClass : IMyInterface { public string Get(string str) { return str; } } |
因此,如果我有一个