2016-10-27 6 views
1

Я собираюсь приступить к новому проекту C#. Мне было интересно, в чем разница между использованием кодовых контрактов или анализаторов кода (в Рослине). Не понимаю ли я каждого из них? Будучи новым проектом, я хотел бы сохранить целостность кода. Поэтому я хочу, чтобы другие разработчики придерживались определенных правил кода. Я буду исследовать их дальше, но я хотел сначала получить мнение сообщества. Извините вопрос, я все еще довольно новичок в разработке C#.Кодовые контракты и анализаторы кода

ответ

2

Это два разных инструмента.

Код Контракты это способ заявить и проверить ... ну, контракты, такие как предварительные условия и постусловий:

public class Foo 
{ 
    public Foo(object arg) 
    { 
     Contract.Requires<ArgumentNullException>(arg != null); 
    } 

    public object GetBar() 
    { 
     Contract.Ensures(Contract.Result<object>() != null); 

     // TODO: 
    } 
} 

CC проверить свои условия во время выполнения. Для этого необходимо, чтобы ваша сборка (а не исходный код!) была переписана после компиляции, чтобы ввести соответствующие вызовы в ваш код.

Анализаторы кода используют Roslyn для анализа Исходный код, пока вы его пишете. Они могут помочь вам форматировать код, чтобы напомнить вам позвонить Dispose по телефону IDisposable и т. Д., Но они не влияют непосредственно на поведение во время выполнения.

Существует ряд анализаторов, сгруппированных по назначению в проекты (например, StyleCopAnalyzers), а Code Contracts - автономный проект.

(CC также имеет статический анализатор, но я не могу сказать здесь много - он убивает производительность при использовании на реальных проектах, поэтому для меня обычно отключается. В любом случае, это необходимо для проверки контрактов.)

+0

спасибо за это. Так что кодовые контракты будут влиять на производительность? –

+1

Если вы хотите узнать больше о кодовых контрактах, отметьте эту книгу https://www.syncfusion.com/resources/techportal/details/ebooks/csharpcontracts –

+1

@JonMeyers: CC увеличит время на создание проекта из-за перезаписи , Во время выполнения контракты работают медленнее, чем 'if ... throw', но я сомневаюсь, что вы увидите разницу в большинстве случаев. В то же время есть значительные преимущества от использования CC. – Dennis

1

Анализаторы кода проанализируют ваш код на наличие распространенных ошибок. Они рассматривают структуру кода и поток данных для обнаружения проблем.

Другие типы анализаторов смотрят на стиль (например, StyleCop), капители, корпус верблюда, префиксы, постфикс и что у вас есть.

Третий тип - это кодовые контракты, о которых вы упомянули, и это работает несколько иначе. Вы объявляете ожидаемое поведение вашего кода, например, что ожидается от параметров, переданных в метод, исключения из которых могут вызывать код и т. Д. Анализатор контрактов затем проверяет, проходит ли код вызова в правильных параметрах (например, анализатор обнаружит вы передаете нуль и будете вызывать ошибку, если это не разрешено). В то же время он будет проверять «внутреннюю согласованность» ваших методов, чтобы убедиться, что вы не бросаете исключения, которые вам не разрешено бросать. В зависимости от исполнения контракты могут быть проверены во время выполнения или во время компиляции.