我在一些引用的第三方程序集中有一个接口,例如:
public interface ITextHandler
{
void Handle(string text)
}
在我自己的项目中,我通过将其继承到我自己的界面来承担具体含义:
public interface INameHandler : ITextHandler
{
}
使用像ReSharper这样的工具时,我可能会开始:
public class Foo : INameHandler
{
}
Resharper将显示我可以单击的错误和“实现接口”。结果产生:
public class Foo : INameHandler
{
public void Handle(string text)
{
}
}
有没有办法告诉ReSharper我想将参数重命名为更具体?我希望它实现“名称”而不是“文本”:
public class Foo : INameHandler
{
public void Handle(string name)
{
}
}
是否有一个resharper评论或我可以添加到INameHandler的内容重新定义默认参数名称?
答案 0 :(得分:11)
我建议您不这样做。实际上,就在昨晚我最终努力将我的参数名称返回添加到界面中声明的那个(我怀疑我后来在界面中改变了主意)。
考虑以下代码:
Foo handler = new Foo();
handler.Handle(name: "Hello");
现在考虑这种无害的重构,理由是更喜欢通过接口类型而不是具体类型来声明变量:
INameHandler handler = new Foo();
handler.Handle(name: "Hello");
如果参数名称不同,则会出现编译时错误。它可能比这更糟糕 - 您可能最终得到编译的代码,但如果您重新排序现有的参数名称,则更改意味着。 Nasty, nasty stuff.
我不是说会发生 - 但是选择参数名称时要小心 实现中的名称。
(嗯......也许我应该写一个小工具来找到所有违反这个......可能很方便。)