Принудительно используйте «это» и «база» во время компиляции в Visual Studio/C#

#c# #visual-studio #compiler-construction

Вопрос:

При расширении классов я нахожу очень описательным использование base ключевого слова ( MyBase в VB) при доступе к методам в базовом классе. И this ключевое слово ( Me в VB) при доступе к функциям в классе, расширяющем базовый класс. Это относится и к «плоской» структуре без наследования.

Мне легче читать это:

 public class World
{
    public String baseName = "World";
}


public class Hello : World
{
    public String thisName = "Hello";


    public String GetNames()
    {
        return this.thisName   " "   base.baseName;
    }
}
 

Чем это:

 ...

    public String GetNames()
    {
        return thisName   " "   baseName;
    }

...
 

Теперь мой вопрос: можно ли принудительно использовать this и base во время компиляции в Visual Studio/C#, чтобы компилятор выдавал ошибку или предупреждение, если вы не используете эти ключевые слова в своем коде?

Ответ №1:

Взгляните на StyleCop.

http://code.msdn.microsoft.com/sourceanalysis

Там есть несколько правил, которые должны делать то, что вы хотите. Вы можете настроить его так, чтобы любые нарушения стиля отображались в виде предупреждений или ошибок.

Комментарии:

1. К вашему сведению, по умолчанию StyleCop применяет это (в качестве альтернативы какому-либо соглашению об именовании данных-членов) и не поощряет излишние базовые спецификации.

2. Похоже, это не работает с Visual Studio Team System 2008. Установка работает нормально, но VS вылетает, когда я пытаюсь использовать плагин. Это чистая установка VS, без установленных дополнений.

3. Мы используем StyleCop 4.3 с Visual Studio Team System 2008 как в обычном, так и (только что обновленном) вариантах с пакетом обновления 1, и он работает нормально, поэтому нет никакой фундаментальной несовместимости (хотя, к сожалению, это не помогает решить вашу проблему, просто сообщая вам, что он может работать нормально).

Ответ №2:

Возможно, вы также захотите ознакомиться с аудитором кода SSW

К сожалению, я не знаю способа обеспечить соблюдение этого в компиляторе.