Почему StyleCop рекомендует снабдить префиксом метод или вызовы свойства с “этим”?

Нет. shared_ptr просто сохранить один дополнительный указатель для подсчета ссылок.

Когда вы копируете объект shared_ptr, он копирует указатель с количеством ссылок, увеличивает его и копирует указатель на содержащийся объект.

67
задан Drew Noakes 21 January 2010 в 01:11
поделиться

7 ответов

Это может сделать код более понятным с первого взгляда. Когда вы используете this , проще:

  • Разделять статические элементы и элементы экземпляра. (И отличать методы экземпляра от делегатов.)
  • Различать члены экземпляра от локальных переменных и параметров (без использования соглашения об именах).
68
ответ дан 24 November 2019 в 14:25
поделиться

Думаю, эта статья немного объясняет это

http://blogs.msdn.microsoft.com/sourceanalysis/archive /2008/05/25/a-difference-of-style.aspx

... блестящий молодой разработчик из Microsoft (хорошо, это был я) решил взять на себя ответственность написать небольшой инструмент, который мог бы обнаруживать отклонения из стиля C #, используемого в его команде. Так родился StyleCop. В течение следующих нескольких лет мы собрали все рекомендации по стилю C #, которые смогли найти в различных командах Microsoft, и выбрали все лучшие практики, которые были общими для этих стилей. Они составили первый набор правил StyleCop. Одним из первых правил, появившихся в результате этих усилий, было использование префикса this для вызова членов класса и удаление любых префиксов подчеркивания из имен полей. Стиль C # официально вырос отдельно от своего старого племени C ++.

38
ответ дан 24 November 2019 в 14:25
поделиться

Я на самом деле не следую этому руководству, если я не нахожусь в сценариях, которые вам нужны:

  • есть фактическая двусмысленность - в основном ] это влияет либо на конструкторы ( this.name = name; ), либо на такие вещи, как Equals ( return this.id == other.id; )
  • вы хотите передать ссылку на текущий экземпляр
  • вы хотите вызвать метод расширения в текущем экземпляре

Кроме того, я считаю это беспорядком. Поэтому я отключаю правило.

88
ответ дан 24 November 2019 в 14:25
поделиться

Обратите внимание, что компилятор не заботится о том, префикс ли вы ссылки с помощью this или нет (если нет конфликта имен с локальной переменной и полем или вы хотите вызвать метод расширения в текущем экземпляре.)

Это зависит от вашего стиля. Лично я удаляю это. из кода, поскольку я думаю, что это уменьшает отношение сигнал / шум.

Тот факт, что Microsoft использует этот стиль внутри компании, не означает, что вы должны это делать. StyleCop, похоже, стал общедоступным внутренним инструментом MS. Я полностью за то, чтобы придерживаться соглашений Microsoft по общедоступным вещам, например:

  • имена типов находятся в PascalCase
  • имена параметров находятся в camelCase
  • интерфейсы должны иметь префикс с буквой I
  • использовать имена в единственном числе для перечислений, кроме случаев, когда они [Флаги]

... но то, что происходит в частных сферах вашего кода, в общем, личное. Делайте то, о чем соглашается ваша команда.

Последовательность также важна. Это снижает когнитивную нагрузку при чтении кода, особенно если стиль кода соответствует вашим ожиданиям. Но даже при работе с иностранным стилем кодирования, если он согласован, вам не понадобится много времени, чтобы к нему привыкнуть. Используйте такие инструменты, как ReSharper и StyleCop, чтобы обеспечить согласованность там, где вы считаете это важным.

Использование .NET Reflector предполагает, что Microsoft в любом случае не так хороша в соблюдении стандартов кодирования StyleCop в BCL.

Но даже при работе с иностранным стилем кодирования, если он согласован, вам не понадобится много времени, чтобы к нему привыкнуть. Используйте такие инструменты, как ReSharper и StyleCop, чтобы обеспечить согласованность там, где вы считаете это важным.

Использование .NET Reflector предполагает, что Microsoft в любом случае не так хороша в соблюдении стандартов кодирования StyleCop в BCL.

Но даже при работе с иностранным стилем кодирования, если он согласован, вам не понадобится много времени, чтобы к нему привыкнуть. Используйте такие инструменты, как ReSharper и StyleCop, чтобы обеспечить согласованность там, где вы считаете это важным.

Использование .NET Reflector предполагает, что Microsoft в любом случае не так хороша в соблюдении стандартов кодирования StyleCop в BCL.

9
ответ дан 24 November 2019 в 14:25
поделиться

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

И, конечно же, я должен использовать его конструкторы, потому что я обычно даю параметрам конструктора те же имена, что и поле, которому присваиваются их значения. Так что мне нужно «это» для доступа к полям.

4
ответ дан 24 November 2019 в 14:25
поделиться

Кроме того, можно дублировать имена переменных в функции, так что использование «this» может сделать ее более понятной.

class foo {
  private string aString;

  public void SetString(string aString){
    //this.aString refers to the class field
    //aString refers to the method parameter        
    this.aString = aString; 
  }
}
3
ответ дан 24 November 2019 в 14:25
поделиться

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

1
ответ дан 24 November 2019 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: