Как я могу иметь другое соглашение об именовании для более четкого интерфейса? - PullRequest
1 голос
/ 16 сентября 2009

я люблю резарпер.

Однако у меня есть следующая проблема:

Мое соглашение об именах для частных методов - верблюд.

Так хорошо.

Однако, когда я реализую метод интерфейса явно, как в

void IMyInterface.MyMethod (...)

resharper рассматривает его как закрытый метод и хочет изменить его на IMyInterface. *** m *** yMethod Есть ли способ игнорировать соглашение об именах для явных реализаций интерфейса?

Ответы [ 3 ]

0 голосов
/ 16 сентября 2009

Методы интерфейса не могут быть приватными. При явном использовании интерфейса вы будете использовать

void IMyInterface.MyMethod(...)

без настройки доступности. Реализация будет публичной или внутренней в зависимости от того, является ли интерфейс публичным или внутренним.

0 голосов
/ 17 сентября 2009

В некоторых версиях ReSharper была ошибка, и она была исправлена ​​давно. Какую версию вы используете? Вы пробовали последние сборки, такие как 4.5.1 или одну из последних ночных вечеринок?

0 голосов
/ 16 сентября 2009

Это не сработает.

Resharper использует имя, предоставленное самим интерфейсом - и для его реализации вы не можете изменить это имя (даже регистр).

«MyMethod» - это имя, указанное в «IMyInterface». Вы должны сохранить регистр для реализации этого метода, и, поскольку вы реализуете его явно, вариантов нет.


Редактировать после комментариев:

Вот пример. Я только что сделал интерфейс, вот так:

internal interface IMyInterface
{
    void testmethod();
}

Это нарушает мои действующие соглашения об именах (в этом случае Resharper просит использовать метод test заглавными буквами).

Если я создам класс, который реализует этот интерфейс:

class MyClass : IMyInterface
{

И я выбираю «Реализовать интерфейс явно», Resharper создает:

class MyClass : IMyInterface
{
    #region IMyInterface Members

    void IMyInterface.testmethod()
    {
        throw new NotImplementedException();
    }

    #endregion
}

В этом случае не жалуется на корпус в строке: void IMyInterface.testmethod()

Не было бы никакого способа реализовать интерфейс, использующий другой регистр, чем тот, который находится в интерфейсе, однако - не имеет значения, определен он явно или неявно - интерфейс определяет имя метода, включая регистр.

Я думаю, что путаница может быть связана с тем, что вы предполагаете, что в моем случае testmethod - это private - это не приватный метод, это публичная, явная реализация IMyInterface.testmethod, поэтому вы можете сделать:

IMyInterface myClass = new MyClass();
myClass.testmethod(); // This is public on IMyInterface, not private!

Вы не можете изменить регистр метода, реализующего ваш интерфейс - это ограничение .NET, а не ограничение Resharper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...