2012-03-24 104 views
4

我有一些引用的第三方组件的接口,如:是否可以训练ReSharper来重命名接口参数?

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?

回答

11

我建议你不要这样做。事实上,就在昨天晚上,我终于努力将我的参数名称返回添加到界面中声明的参数名称(我怀疑我以后在界面中改变了主意)。

考虑以下代码:

Foo handler = new Foo(); 
handler.Handle(name: "Hello"); 

现在考虑这个看起来无害的重构,就宁愿通过接口类型,而不是具体的类型来声明一个变量的理由:

INameHandler handler = new Foo(); 
handler.Handle(name: "Hello"); 

如果你的参数名称是不同的,你会得到一个编译时错误。它可能比这更糟糕 - 如果您重新排列现有参数名称,您可能会得到代码编译,但更改含义Nasty, nasty stuff.

我不是说这个发生 - 但它是一个原因(IMO)进行选择时,参数名称,特别是在接口,并在实现这些名字坚持要小心。

(嗯...也许我应该写一个小工具,找到所有遭受侵犯的情况......可能是得心应手。)

+0

不会与可选参数这只是事情?如果Handle必须带一个字符串,为什么要用名称来调用它? – 2012-03-24 22:21:02

+1

@MattJohnson:为了清晰起见,或可能改变重载分辨率。虽然命名参数经常与可选参数一起使用,但它们是可以独立使用的独特功能。特别是,如果一个方法有几个相同类型的参数,并且不明确哪个参数意味着什么,那么指定参数名称确实可以帮助。考虑'MessageBox.Show(文本:“这是框中的文本”,标题:“Bang!”)' – 2012-03-24 22:23:48

+0

有趣。谢谢! – 2012-03-24 22:28:17

相关问题