C# 如何为显式接口方法使用不同的resharper命名约定?
我喜欢雷夏普 但是,我有以下问题: 我对私有方法的命名约定是camel 就这么好 然而,当我明确地实现一个接口方法时,如C# 如何为显式接口方法使用不同的resharper命名约定?,c#,resharper,C#,Resharper,我喜欢雷夏普 但是,我有以下问题: 我对私有方法的命名约定是camel 就这么好 然而,当我明确地实现一个接口方法时,如 void IMyInterface.MyMethod (...) resharper将其视为私有方法,并希望将其更改为IMyInterface.**m***y方法。 有没有一种方法可以忽略显式接口实现的命名约定?这是行不通的 Resharper正在使用接口本身提供的名称-为了实现它,您不能更改此名称(甚至是大小写) “MyMethod”是“IMyInterface”中指定的
void IMyInterface.MyMethod (...)
resharper将其视为私有方法,并希望将其更改为IMyInterface.**m***y方法。
有没有一种方法可以忽略显式接口实现的命名约定?这是行不通的
Resharper正在使用接口本身提供的名称-为了实现它,您不能更改此名称(甚至是大小写)
“MyMethod”是“IMyInterface”中指定的名称。为了实现该方法,您必须保留大小写,因为您显式地实现了它,所以没有选项
评论后编辑: 这里有一个例子。我刚刚制作了一个界面,如下所示:
internal interface IMyInterface
{
void testmethod();
}
这违反了我当前的命名约定(在本例中,Resharper要求将testmethod大写)
如果我创建了一个实现此接口的类:
class MyClass : IMyInterface
{
我选择“显式实现接口”,Resharper创建:
class MyClass : IMyInterface
{
#region IMyInterface Members
void IMyInterface.testmethod()
{
throw new NotImplementedException();
}
#endregion
}
在这种情况下,it不会抱怨行中的套管:void IMyInterface.testmethod()
使用与接口中不同的大小写实现接口是没有办法的,但是,无论是显式定义还是隐式定义,接口都会确定方法的名称,包括大小写
我认为这种混淆可能是因为您假设,在我的例子中,testmethod
是私有的——它不是私有的方法,它是IMyInterface.testmethod
的公开、显式实现,这就是为什么您可以这样做:
IMyInterface myClass = new MyClass();
myClass.testmethod(); // This is public on IMyInterface, not private!
您无法更改实现接口的方法的大小写-这是一个.NET限制,而不是Resharper限制。接口方法不允许是私有的。当显式使用接口时,您将使用
void IMyInterface.MyMethod(...)
没有辅助功能设置。实现将是公共的还是内部的,取决于接口是公共的还是内部的。在某些版本的ReSharper中有一个bug,它在很久以前就被修复了。你用什么版本?您是否尝试过最新的版本,如4.5.1或最新的nightlies?但Resharper似乎忽略了这一点,并愉快地改变了隐式实现方法的情况,因为它将它们视为私有方法。我认为问题是,如何防止Resharper这样做,而不是如何让它这样做。哦,如果是这样的话,那就是去掉修饰语“private”的问题。不过,我相信Resharper(从我刚才的测试来看)足够聪明,不会改变显式实现接口的情况。奇怪的是,为什么否决-我刚刚再次测试了这个,现在Resharper会让你显式实现一个违反规则的接口。刚刚添加了完整、详细的解释,包括使用resharper在新项目中进行测试。感谢您抽出时间。然而,这并没有回答我的问题。我不习惯将我的方法名更改为testMethod。我希望resharper停止抱怨。我正在使用resharper 4.5。它是否太旧了?对于私有方法,使用相同的规则和显式实现,它在5.0.1659.36中没有任何问题