C# 可以训练ReSharper重命名接口参数吗?

C# 可以训练ReSharper重命名接口参数吗?,c#,resharper,C#,Resharper,我在某些引用的第三方程序集中有一个接口,例如: public interface ITextHandler { void Handle(string text) } 在我自己的项目中,通过将其继承到我自己的界面中,我获得了特定的含义: public interface INameHandler : ITextHandler { } 当使用诸如ReSharper之类的工具时,我可能会从以下几点开始: public class Foo : INameHandler { } Resharpe

我在某些引用的第三方程序集中有一个接口,例如:

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我想将参数重命名为更具体的参数?我希望它实现“名称”而不是“文本”:

是否有resharper注释或我可以添加到INameHandler中的内容来重新定义默认参数名?

我建议您不要这样做。事实上,就在昨天晚上,我努力将参数名恢复到接口中声明的名称(我怀疑我后来在接口中改变了主意)

考虑以下代码:

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

现在考虑这个无害的重构,理由是喜欢通过接口类型声明变量,而不是具体类型:

INameHandler handler = new Foo();
handler.Handle(name: "Hello");
如果参数名称不同,则会出现编译时错误。这可能比这更糟糕——如果对现有参数名称进行重新排序,可能会得到编译但会发生更改的代码

我并不是说这种情况会发生——但在选择参数名称时,特别是在接口中,以及在实现中使用这些名称时,这是一个很好的理由(IMO)要小心


(嗯……也许我应该编写一个小工具来查找所有违反此规则的行为……可能很方便。)

这不是只有可选参数才重要吗?若句柄必须包含一个字符串,你们为什么要用名字来称呼它?@MattJohnson:为了清楚起见,或者可能会改变重载解析。虽然命名参数通常与可选参数一起使用,但它们是可以独立使用的独特特性。特别是,如果一个方法具有多个相同类型的参数,并且不清楚哪个参数意味着什么,那么指定参数名称确实会有所帮助。考虑<代码> MeaseBox。显示(文本:“这是框中的文本”,标题:“砰!”)< /代码>
INameHandler handler = new Foo();
handler.Handle(name: "Hello");